Haraka 3.0.2 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/.eslintrc.yaml +5 -9
  2. package/.prettierrc.yml +1 -0
  3. package/CONTRIBUTORS.md +11 -0
  4. package/Changes.md +1393 -1211
  5. package/Dockerfile +3 -3
  6. package/Plugins.md +119 -106
  7. package/README.md +7 -16
  8. package/TODO +1 -24
  9. package/bin/haraka +197 -298
  10. package/config/auth_flat_file.ini +2 -0
  11. package/config/auth_vpopmaild.ini +4 -2
  12. package/config/dhparams.pem +8 -0
  13. package/config/mail_from.is_resolvable.ini +4 -2
  14. package/config/me +1 -0
  15. package/config/outbound.ini +0 -2
  16. package/config/plugins +36 -35
  17. package/config/rabbitmq_amqplib.ini +8 -1
  18. package/config/smtp.ini +0 -1
  19. package/config/smtp.json +17 -0
  20. package/config/tls_cert.pem +23 -0
  21. package/config/tls_key.pem +28 -0
  22. package/connection.js +46 -73
  23. package/contrib/bsd-rc.d/haraka +3 -1
  24. package/contrib/plugin2npm.sh +6 -36
  25. package/docs/Connection.md +1 -1
  26. package/docs/CoreConfig.md +2 -2
  27. package/docs/Logging.md +7 -21
  28. package/docs/Outbound.md +104 -210
  29. package/docs/Plugins.md +47 -40
  30. package/docs/Transaction.md +59 -82
  31. package/docs/{plugins → deprecated}/connect.rdns_access.md +1 -1
  32. package/docs/{plugins → deprecated}/mail_from.access.md +1 -1
  33. package/docs/{plugins → deprecated}/rcpt_to.access.md +1 -1
  34. package/docs/plugins/auth/auth_vpopmaild.md +15 -19
  35. package/docs/plugins/auth/flat_file.md +23 -30
  36. package/docs/plugins/queue/rabbitmq_amqplib.md +7 -0
  37. package/docs/plugins/queue/smtp_forward.md +1 -1
  38. package/docs/plugins/queue/smtp_proxy.md +5 -10
  39. package/docs/plugins/relay.md +2 -2
  40. package/docs/plugins/tls.md +29 -9
  41. package/endpoint.js +16 -13
  42. package/haraka.js +10 -14
  43. package/host_pool.js +5 -5
  44. package/line_socket.js +3 -4
  45. package/logger.js +44 -28
  46. package/outbound/client_pool.js +27 -23
  47. package/outbound/config.js +4 -6
  48. package/outbound/fsync_writestream.js +1 -1
  49. package/outbound/hmail.js +180 -220
  50. package/outbound/index.js +86 -99
  51. package/outbound/qfile.js +1 -1
  52. package/outbound/queue.js +55 -43
  53. package/outbound/timer_queue.js +3 -2
  54. package/outbound/tls.js +19 -7
  55. package/package.json +66 -55
  56. package/plugins/.eslintrc.yaml +0 -6
  57. package/plugins/auth/auth_base.js +30 -12
  58. package/plugins/auth/auth_proxy.js +14 -12
  59. package/plugins/auth/auth_vpopmaild.js +30 -20
  60. package/plugins/auth/flat_file.js +17 -12
  61. package/plugins/block_me.js +1 -1
  62. package/plugins/data.signatures.js +2 -4
  63. package/plugins/early_talker.js +2 -1
  64. package/plugins/mail_from.is_resolvable.js +65 -135
  65. package/plugins/queue/deliver.js +4 -5
  66. package/plugins/queue/lmtp.js +11 -14
  67. package/plugins/queue/qmail-queue.js +2 -2
  68. package/plugins/queue/quarantine.js +2 -2
  69. package/plugins/queue/rabbitmq.js +16 -17
  70. package/plugins/queue/rabbitmq_amqplib.js +1 -1
  71. package/plugins/queue/smtp_forward.js +6 -6
  72. package/plugins/queue/smtp_proxy.js +10 -1
  73. package/plugins/queue/test.js +2 -2
  74. package/plugins/rcpt_to.host_list_base.js +5 -5
  75. package/plugins/rcpt_to.in_host_list.js +2 -2
  76. package/plugins/relay.js +6 -7
  77. package/plugins/reseed_rng.js +1 -1
  78. package/plugins/status.js +37 -33
  79. package/plugins/tls.js +2 -2
  80. package/plugins/xclient.js +3 -2
  81. package/plugins.js +51 -54
  82. package/run_tests +3 -30
  83. package/server.js +190 -190
  84. package/smtp_client.js +30 -23
  85. package/{tests → test}/config/plugins +0 -2
  86. package/{tests → test}/config/smtp.ini +1 -1
  87. package/test/config/tls/example.com/_.example.com.key +28 -0
  88. package/test/config/tls/example.com/example.com.crt +25 -0
  89. package/test/connection.js +302 -0
  90. package/test/endpoint.js +94 -0
  91. package/{tests → test}/fixtures/line_socket.js +1 -1
  92. package/{tests → test}/fixtures/util_hmailitem.js +19 -25
  93. package/{tests → test}/host_pool.js +42 -57
  94. package/test/logger.js +258 -0
  95. package/test/outbound/hmail.js +141 -0
  96. package/test/outbound/index.js +220 -0
  97. package/test/outbound/qfile.js +126 -0
  98. package/test/outbound_bounce_net_errors.js +142 -0
  99. package/{tests → test}/outbound_bounce_rfc3464.js +110 -122
  100. package/test/plugins/auth/auth_base.js +484 -0
  101. package/test/plugins/auth/auth_vpopmaild.js +83 -0
  102. package/test/plugins/early_talker.js +104 -0
  103. package/test/plugins/mail_from.is_resolvable.js +35 -0
  104. package/test/plugins/queue/smtp_forward.js +206 -0
  105. package/test/plugins/rcpt_to.host_list_base.js +122 -0
  106. package/test/plugins/rcpt_to.in_host_list.js +193 -0
  107. package/test/plugins/relay.js +303 -0
  108. package/test/plugins/status.js +130 -0
  109. package/test/plugins/tls.js +70 -0
  110. package/test/plugins.js +228 -0
  111. package/{tests → test}/queue/multibyte +0 -0
  112. package/{tests → test}/queue/plain +0 -0
  113. package/test/rfc1869.js +73 -0
  114. package/test/server.js +491 -0
  115. package/test/smtp_client.js +299 -0
  116. package/test/tls_socket.js +273 -0
  117. package/test/transaction.js +270 -0
  118. package/tls_socket.js +202 -252
  119. package/transaction.js +9 -24
  120. package/CONTRIBUTING.md +0 -1
  121. package/bin/dkimverify +0 -40
  122. package/config/access.domains +0 -13
  123. package/config/attachment.ctype.regex +0 -2
  124. package/config/attachment.filename.regex +0 -1
  125. package/config/avg.ini +0 -5
  126. package/config/bounce.ini +0 -15
  127. package/config/data.headers.ini +0 -61
  128. package/config/dkim/dkim_key_gen.sh +0 -78
  129. package/config/dkim_sign.ini +0 -4
  130. package/config/dkim_verify.ini +0 -7
  131. package/config/dnsbl.ini +0 -23
  132. package/config/greylist.ini +0 -43
  133. package/config/helo.checks.ini +0 -52
  134. package/config/lookup_rdns.strict.ini +0 -12
  135. package/config/lookup_rdns.strict.timeout +0 -1
  136. package/config/lookup_rdns.strict.whitelist +0 -1
  137. package/config/lookup_rdns.strict.whitelist_regex +0 -5
  138. package/config/messagesniffer.ini +0 -18
  139. package/config/rcpt_to.blocklist +0 -1
  140. package/config/rdns.allow_regexps +0 -0
  141. package/config/rdns.deny_regexps +0 -0
  142. package/config/spamassassin.ini +0 -56
  143. package/config.js +0 -6
  144. package/dkim.js +0 -614
  145. package/docs/plugins/avg.md +0 -35
  146. package/docs/plugins/bounce.md +0 -69
  147. package/docs/plugins/clamd.md +0 -147
  148. package/docs/plugins/esets.md +0 -8
  149. package/docs/plugins/greylist.md +0 -90
  150. package/docs/plugins/helo.checks.md +0 -135
  151. package/docs/plugins/messagesniffer.md +0 -163
  152. package/docs/plugins/relay_acl.md +0 -29
  153. package/docs/plugins/relay_all.md +0 -15
  154. package/docs/plugins/relay_force_routing.md +0 -33
  155. package/docs/plugins/spamassassin.md +0 -180
  156. package/outbound/mx_lookup.js +0 -70
  157. package/plugins/auth/auth_ldap.js +0 -3
  158. package/plugins/avg.js +0 -162
  159. package/plugins/backscatterer.js +0 -25
  160. package/plugins/bounce.js +0 -381
  161. package/plugins/clamd.js +0 -381
  162. package/plugins/data.headers.js +0 -4
  163. package/plugins/data.uribl.js +0 -4
  164. package/plugins/dkim_sign.js +0 -395
  165. package/plugins/dkim_verify.js +0 -62
  166. package/plugins/dns_list_base.js +0 -221
  167. package/plugins/dnsbl.js +0 -146
  168. package/plugins/dnswl.js +0 -58
  169. package/plugins/esets.js +0 -71
  170. package/plugins/graph.js +0 -5
  171. package/plugins/greylist.js +0 -645
  172. package/plugins/helo.checks.js +0 -533
  173. package/plugins/messagesniffer.js +0 -381
  174. package/plugins/rcpt_to.ldap.js +0 -3
  175. package/plugins/rcpt_to.max_count.js +0 -24
  176. package/plugins/relay_all.js +0 -13
  177. package/plugins/spamassassin.js +0 -384
  178. package/tests/config/dkim/example.com/dns +0 -29
  179. package/tests/config/dkim/example.com/private +0 -6
  180. package/tests/config/dkim/example.com/public +0 -4
  181. package/tests/config/dkim/example.com/selector +0 -1
  182. package/tests/config/dkim.private.key +0 -6
  183. package/tests/config/dkim_sign.ini +0 -4
  184. package/tests/config/helo.checks.ini +0 -52
  185. package/tests/connection.js +0 -327
  186. package/tests/endpoint.js +0 -128
  187. package/tests/fixtures/vm_harness.js +0 -59
  188. package/tests/logger.js +0 -327
  189. package/tests/outbound/hmail.js +0 -112
  190. package/tests/outbound/index.js +0 -324
  191. package/tests/outbound/qfile.js +0 -67
  192. package/tests/outbound_bounce_net_errors.js +0 -173
  193. package/tests/plugins/auth/auth_base.js +0 -463
  194. package/tests/plugins/auth/auth_vpopmaild.js +0 -91
  195. package/tests/plugins/bounce.js +0 -307
  196. package/tests/plugins/clamd.js +0 -224
  197. package/tests/plugins/deprecated/relay_acl.js +0 -140
  198. package/tests/plugins/deprecated/relay_all.js +0 -59
  199. package/tests/plugins/dkim_sign.js +0 -315
  200. package/tests/plugins/dkim_signer.js +0 -108
  201. package/tests/plugins/dns_list_base.js +0 -259
  202. package/tests/plugins/dnsbl.js +0 -101
  203. package/tests/plugins/early_talker.js +0 -115
  204. package/tests/plugins/greylist.js +0 -58
  205. package/tests/plugins/helo.checks.js +0 -525
  206. package/tests/plugins/mail_from.is_resolvable.js +0 -116
  207. package/tests/plugins/queue/smtp_forward.js +0 -221
  208. package/tests/plugins/rcpt_to.host_list_base.js +0 -132
  209. package/tests/plugins/rcpt_to.in_host_list.js +0 -218
  210. package/tests/plugins/relay.js +0 -339
  211. package/tests/plugins/spamassassin.js +0 -171
  212. package/tests/plugins/status.js +0 -138
  213. package/tests/plugins/tls.js +0 -84
  214. package/tests/plugins.js +0 -247
  215. package/tests/rfc1869.js +0 -61
  216. package/tests/server.js +0 -510
  217. package/tests/smtp_client/auth.js +0 -105
  218. package/tests/smtp_client/basic.js +0 -101
  219. package/tests/smtp_client.js +0 -80
  220. package/tests/tls_socket.js +0 -333
  221. package/tests/transaction.js +0 -284
  222. /package/docs/{plugins → deprecated}/dkim_sign.md +0 -0
  223. /package/docs/{plugins → deprecated}/dkim_verify.md +0 -0
  224. /package/docs/{plugins → deprecated}/dnsbl.md +0 -0
  225. /package/docs/{plugins → deprecated}/dnswl.md +0 -0
  226. /package/docs/{plugins → deprecated}/rcpt_to.routes.md +0 -0
  227. /package/{tests → test}/.eslintrc.yaml +0 -0
  228. /package/{tests → test}/config/auth_flat_file.ini +0 -0
  229. /package/{tests → test}/config/dhparams.pem +0 -0
  230. /package/{tests → test}/config/host_list +0 -0
  231. /package/{tests → test}/config/outbound_tls_cert.pem +0 -0
  232. /package/{tests → test}/config/outbound_tls_key.pem +0 -0
  233. /package/{tests → test}/config/smtp_forward.ini +0 -0
  234. /package/{tests → test}/config/tls/ec.pem +0 -0
  235. /package/{tests → test}/config/tls/haraka.local.pem +0 -0
  236. /package/{tests → test}/config/tls/mismatched.pem +0 -0
  237. /package/{tests → test}/config/tls.ini +0 -0
  238. /package/{tests → test}/config/tls_cert.pem +0 -0
  239. /package/{tests → test}/config/tls_key.pem +0 -0
  240. /package/{tests → test}/fixtures/todo_qfile.txt +0 -0
  241. /package/{tests → test}/installation/config/test-plugin-flat +0 -0
  242. /package/{tests → test}/installation/config/test-plugin.ini +0 -0
  243. /package/{tests → test}/installation/config/tls.ini +0 -0
  244. /package/{tests → test}/installation/node_modules/load_first/index.js +0 -0
  245. /package/{tests → test}/installation/node_modules/load_first/package.json +0 -0
  246. /package/{tests → test}/installation/node_modules/test-plugin/config/test-plugin-flat +0 -0
  247. /package/{tests → test}/installation/node_modules/test-plugin/config/test-plugin.ini +0 -0
  248. /package/{tests → test}/installation/node_modules/test-plugin/package.json +0 -0
  249. /package/{tests → test}/installation/node_modules/test-plugin/test-plugin.js +0 -0
  250. /package/{tests → test}/installation/plugins/base_plugin.js +0 -0
  251. /package/{tests → test}/installation/plugins/folder_plugin/index.js +0 -0
  252. /package/{tests → test}/installation/plugins/folder_plugin/package.json +0 -0
  253. /package/{tests → test}/installation/plugins/inherits.js +0 -0
  254. /package/{tests → test}/installation/plugins/load_first.js +0 -0
  255. /package/{tests → test}/installation/plugins/plugin.js +0 -0
  256. /package/{tests → test}/installation/plugins/tls.js +0 -0
  257. /package/{tests → test}/loud/config/dhparams.pem +0 -0
  258. /package/{tests → test}/loud/config/tls/goobered.pem +0 -0
  259. /package/{tests → test}/loud/config/tls.ini +0 -0
  260. /package/{tests → test}/mail_specimen/base64-root-part.txt +0 -0
  261. /package/{tests → test}/mail_specimen/varied-fold-lengths-preserve-data.txt +0 -0
  262. /package/{tests → test}/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_fixed +0 -0
  263. /package/{tests → test}/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_haraka +0 -0
  264. /package/{tests → test}/queue/1508269674999_1508269674999_0_34002_socVUF_1_haraka +0 -0
  265. /package/{tests → test}/queue/1508455115683_1508455115683_0_90253_9Q4o4V_1_haraka +0 -0
  266. /package/{tests → test}/queue/zero-length +0 -0
  267. /package/{tests → test}/test-queue/delete-me +0 -0
@@ -0,0 +1,228 @@
1
+ 'use strict';
2
+
3
+ process.env.WITHOUT_CONFIG_CACHE=true;
4
+
5
+ const assert = require('node:assert')
6
+ const fs = require('node:fs');
7
+ const path = require('node:path');
8
+
9
+ const plugin = require('../plugins');
10
+
11
+ const piName = 'testPlugin';
12
+
13
+ /*
14
+
15
+ From: https://github.com/haraka/Haraka/pull/1278#issuecomment-172134064
16
+
17
+ * Need to test installed mode + core mode
18
+ * Need to test each variation of loading plugins
19
+ INSTALLED MODE
20
+ * Create test/installation/ with config/, plugins/, and node_modules
21
+ * Plugin in <install_dir>/plugins/<name>.js
22
+ * Plugin in <install_dir>/plugins/<name>/ with package.json
23
+ * Plugin in <install_dir>/node_modules/<name>/ with package.json
24
+ CORE MODE + INSTALLED MODE
25
+ * Plugin in <core>/plugins/<name>.js
26
+ * Plugin in <core>/plugins/<name>/ with package.json
27
+ * Plugin in <core>/node_modules/<name>/ with package.json
28
+ * Need to test conflict on name in various forms
29
+ * Check plugins/<name>.js loads, not node_modules/<name>/package.json
30
+ * Should be enough of a check(?)
31
+ * Need to test plugin not existing
32
+ * Check <bogus_name_guaranteed_to_not_exist> fails
33
+ * Need to test plugin existing and failing to compile
34
+ * Create bad plugin in test/installation/plugins/bad_plugin.js
35
+ * Need to test plugin inheritance
36
+ * Base plugin in test/installation/plugins/base_plugin.js
37
+ * Real plugin in test/installation/plugins/inherits.js
38
+ * Check base methods work
39
+ * Check plugin.base.base_plugin is set/correct
40
+ * Plugin timeouts (already tested)
41
+
42
+ */
43
+
44
+ describe('plugin', () => {
45
+
46
+ it('new Plugin() object', () => {
47
+ const pi = new plugin.Plugin(piName);
48
+ assert.ok(pi);
49
+ })
50
+
51
+ describe('get_timeout', () => {
52
+ const toPath = path.resolve('config', `${piName}.timeout`);
53
+ it('0s', (done) => {
54
+ fs.writeFile(toPath, '0', () => {
55
+ this.plugin = new plugin.Plugin(piName);
56
+ assert.equal(this.plugin.timeout, 0);
57
+ fs.unlink(toPath, done);
58
+ })
59
+ })
60
+
61
+ it('3s', (done) => {
62
+ fs.writeFile(toPath, '3', () => {
63
+ this.plugin = new plugin.Plugin(piName);
64
+ assert.equal(this.plugin.timeout, 3);
65
+ fs.unlink(toPath, done);
66
+ })
67
+ })
68
+
69
+ it('60s', (done) => {
70
+ fs.writeFile(toPath, '60', () => {
71
+ this.plugin = new plugin.Plugin(piName);
72
+ assert.equal(this.plugin.timeout, 60);
73
+ fs.unlink(toPath, done);
74
+ })
75
+ })
76
+
77
+ it('30s default (overrides NaN)', (done) => {
78
+ fs.writeFile(toPath, 'apple', () => {
79
+ this.plugin = new plugin.Plugin(piName);
80
+ assert.equal(this.plugin.timeout, 30);
81
+ fs.unlink(toPath, done);
82
+ })
83
+ })
84
+ })
85
+
86
+ describe('plugin_paths', () => {
87
+ beforeEach((done) => {
88
+ delete process.env.HARAKA;
89
+ done()
90
+ })
91
+
92
+ afterEach((done) => {
93
+ delete process.env.HARAKA;
94
+ done()
95
+ })
96
+
97
+ it('CORE plugin: (tls)', () => {
98
+ const p = new plugin.Plugin('tls');
99
+
100
+ assert.equal(p.plugin_path, path.resolve(__dirname, '..', 'plugins', 'tls.js'));
101
+ })
102
+
103
+ it('INSTALLED override: (tls)', () => {
104
+ process.env.HARAKA = path.resolve(__dirname, '..', 'test', 'installation');
105
+
106
+ const p = new plugin.Plugin('tls');
107
+
108
+ assert.equal(p.plugin_path, path.resolve(__dirname, 'installation', 'plugins', 'tls.js'));
109
+ })
110
+
111
+ it('INSTALLED node_modules package plugin: (test-plugin)', () => {
112
+ process.env.HARAKA = path.resolve(__dirname, '..', 'test', 'installation');
113
+
114
+ const p = new plugin.Plugin('test-plugin');
115
+
116
+ assert.equal(p.plugin_path, path.resolve(__dirname, 'installation', 'node_modules', 'test-plugin', 'package.json'));
117
+ assert.ok(p.hasPackageJson);
118
+ try {
119
+ p._compile();
120
+ assert.ok(true, "compiles OK");
121
+ }
122
+ catch (e) {
123
+ console.error(e.stack);
124
+ assert.ok(false, "compiles OK");
125
+ }
126
+ })
127
+
128
+ it('CORE package plugin: redis', () => {
129
+ const p = new plugin.Plugin('haraka-plugin-redis');
130
+
131
+ assert.equal(p.plugin_path, path.resolve(__dirname, '..', 'node_modules', 'haraka-plugin-redis', 'package.json'));
132
+ assert.ok(p.hasPackageJson);
133
+ })
134
+
135
+ it('plugins overrides node_modules', () => {
136
+ process.env.HARAKA = path.resolve(__dirname, '..', 'test', 'installation');
137
+
138
+ const p = new plugin.Plugin('load_first');
139
+
140
+ assert.equal(p.plugin_path, path.resolve(__dirname, 'installation', 'plugins', 'load_first.js'));
141
+ try {
142
+ p._compile();
143
+ assert.ok(true, "compiles OK");
144
+ }
145
+ catch (e) {
146
+ console.error(e.stack);
147
+ assert.ok(false, "compiles OK");
148
+ }
149
+ assert.ok(p.loaded_first);
150
+ })
151
+
152
+ it('INSTALLED plugins folder plugin: (folder_plugin)', () => {
153
+ process.env.HARAKA = path.resolve(__dirname, '..', 'test', 'installation');
154
+
155
+ const p = new plugin.Plugin('folder_plugin');
156
+
157
+ assert.equal(p.plugin_path, path.resolve(__dirname, 'installation', 'plugins', 'folder_plugin', 'package.json'));
158
+ assert.ok(p.hasPackageJson);
159
+ try {
160
+ p._compile();
161
+ assert.ok(true, "compiles OK");
162
+ }
163
+ catch (e) {
164
+ console.error(e.stack);
165
+ assert.ok(false, "compiles OK");
166
+ }
167
+ })
168
+
169
+ it('Inheritance: (inherits)', () => {
170
+ process.env.HARAKA = path.resolve(__dirname, '..', 'test', 'installation');
171
+
172
+ const p = new plugin.Plugin('inherits');
173
+
174
+ assert.equal(p.plugin_path, path.resolve(__dirname, 'installation', 'plugins', 'inherits.js'));
175
+ try {
176
+ p._compile();
177
+ assert.ok(true, "compiles OK");
178
+ }
179
+ catch (e) {
180
+ console.error(e.stack);
181
+ assert.ok(false, "compiles OK");
182
+ }
183
+ p.register();
184
+ assert.ok(p.base.base_plugin);
185
+ })
186
+ })
187
+
188
+ describe('plugin_config', () => {
189
+ beforeEach((done) => {
190
+ delete process.env.HARAKA;
191
+ done();
192
+ })
193
+
194
+ afterEach((done) => {
195
+ delete process.env.HARAKA;
196
+ done();
197
+ })
198
+
199
+ it('CORE plugin: (tls)', () => {
200
+ const p = new plugin.Plugin('tls');
201
+
202
+ assert.equal(p.config.root_path, path.resolve(__dirname, '..', 'config'));
203
+ assert.equal(p.config.overrides_path, undefined);
204
+ })
205
+
206
+ it('INSTALLED override: (tls)', () => {
207
+
208
+ process.env.HARAKA = path.resolve(__dirname, '..', 'test', 'installation');
209
+
210
+ const p = new plugin.Plugin('tls');
211
+
212
+ assert.equal(p.config.root_path, path.resolve(__dirname, '..', 'config'));
213
+ assert.equal(p.config.overrides_path, path.resolve(__dirname, 'installation', 'config'));
214
+ const tls_ini = p.config.get('tls.ini');
215
+ assert.equal(tls_ini.main.ciphers, 'test');
216
+ })
217
+
218
+ it('INSTALLED node_modules package plugin: (test-plugin)', () => {
219
+
220
+ process.env.HARAKA = path.resolve(__dirname, '..', 'test', 'installation');
221
+
222
+ const p = new plugin.Plugin('test-plugin');
223
+
224
+ assert.equal(p.config.root_path, path.resolve(__dirname, 'installation', 'node_modules', 'test-plugin', 'config'));
225
+ assert.equal(p.config.overrides_path, path.resolve(__dirname, 'installation', 'config'));
226
+ })
227
+ })
228
+ })
Binary file
Binary file
@@ -0,0 +1,73 @@
1
+ const assert = require('node:assert')
2
+
3
+ const { parse } = require('../rfc1869');
4
+
5
+ function _check (line, expected) {
6
+ const match = /^(MAIL|RCPT)\s+(.*)$/.exec(line);
7
+ const parsed = parse(match[1].toLowerCase(), match[2]);
8
+ assert.equal(parsed.length, expected.length);
9
+ for (let x = 0; x < expected.length; x++) {
10
+ assert.equal(parsed[x], expected[x]);
11
+ }
12
+ }
13
+
14
+ describe('rfc1869', () => {
15
+ it('MAIL FROM:<>', () => {
16
+ _check('MAIL FROM:<>', ['<>']);
17
+ })
18
+
19
+ it('MAIL FROM:', () => {
20
+ _check('MAIL FROM:', ['<>']);
21
+ })
22
+
23
+ it('MAIL FROM:<postmaster>', () => {
24
+ _check('MAIL FROM:<postmaster>', ['<postmaster>']);
25
+ })
26
+
27
+ it('MAIL FROM:user', () => {
28
+ _check('MAIL FROM:user', ['user']);
29
+ })
30
+
31
+ it('MAIL FROM:user size=1234', () => {
32
+ _check('MAIL FROM:user size=1234', ['user', 'size=1234']);
33
+ })
34
+
35
+ it('MAIL FROM:user@domain size=1234', () => {
36
+ _check('MAIL FROM:user@domain size=1234',
37
+ ['user@domain', 'size=1234']);
38
+ })
39
+
40
+ it('MAIL FROM:<user@domain> size=1234', () => {
41
+ _check('MAIL FROM:<user@domain> size=1234',
42
+ ['<user@domain>', 'size=1234']);
43
+ })
44
+
45
+ it('MAIL FROM:<user@domain> somekey', () => {
46
+ _check('MAIL FROM:<user@domain> somekey',
47
+ ['<user@domain>', 'somekey']);
48
+ })
49
+
50
+ it('MAIL FROM:<user@domain> somekey other=foo', () => {
51
+ _check('MAIL FROM:<user@domain> somekey other=foo',
52
+ ['<user@domain>', 'somekey', 'other=foo']);
53
+ })
54
+
55
+ it('RCPT TO ugly', () => {
56
+ _check('RCPT TO: 0@mailblog.biz 0=9 1=9',
57
+ ['<0@mailblog.biz>', '0=9', '1=9']);
58
+ })
59
+
60
+ it('RCPT TO:<r86x-ray@emailitin.com> state=1', () => {
61
+ _check('RCPT TO:<r86x-ray@emailitin.com> state=1',
62
+ ['<r86x-ray@emailitin.com>', 'state=1']);
63
+ })
64
+
65
+ it('RCPT TO:<user=name@domain.com> foo=bar', () => {
66
+ _check('RCPT TO:<user=name@domain.com> foo=bar',
67
+ ['<user=name@domain.com>', 'foo=bar']);
68
+ })
69
+
70
+ it('RCPT TO:<postmaster>', () => {
71
+ _check('RCPT TO:<postmaster>', ['<postmaster>']);
72
+ })
73
+ })