emailengine-app 2.61.1 → 2.61.3

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 (136) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/data/google-crawlers.json +1 -1
  3. package/lib/account/account-state.js +248 -0
  4. package/lib/account.js +45 -193
  5. package/lib/api-routes/account-routes.js +1023 -0
  6. package/lib/api-routes/message-routes.js +1377 -0
  7. package/lib/consts.js +12 -2
  8. package/lib/email-client/base-client.js +282 -771
  9. package/lib/email-client/gmail/gmail-api.js +243 -0
  10. package/lib/email-client/gmail-client.js +145 -53
  11. package/lib/email-client/imap/mailbox.js +24 -698
  12. package/lib/email-client/imap/sync-operations.js +812 -0
  13. package/lib/email-client/imap-client.js +1 -1
  14. package/lib/email-client/message-builder.js +566 -0
  15. package/lib/email-client/notification-handler.js +314 -0
  16. package/lib/email-client/outlook/graph-api.js +326 -0
  17. package/lib/email-client/outlook-client.js +159 -113
  18. package/lib/email-client/smtp-pool-manager.js +196 -0
  19. package/lib/imapproxy/imap-server.js +3 -12
  20. package/lib/oauth/gmail.js +4 -4
  21. package/lib/oauth/mail-ru.js +30 -5
  22. package/lib/oauth/outlook.js +57 -3
  23. package/lib/oauth/pubsub/google.js +30 -11
  24. package/lib/oauth/scope-checker.js +202 -0
  25. package/lib/oauth2-apps.js +8 -4
  26. package/lib/redis-operations.js +484 -0
  27. package/lib/routes-ui.js +283 -2582
  28. package/lib/tools.js +4 -196
  29. package/lib/ui-routes/account-routes.js +1931 -0
  30. package/lib/ui-routes/admin-config-routes.js +1233 -0
  31. package/lib/ui-routes/admin-entities-routes.js +2367 -0
  32. package/lib/ui-routes/oauth-routes.js +992 -0
  33. package/lib/utils/network.js +237 -0
  34. package/package.json +10 -10
  35. package/sbom.json +1 -1
  36. package/static/js/app.js +5 -5
  37. package/static/licenses.html +79 -19
  38. package/translations/de.mo +0 -0
  39. package/translations/de.po +97 -86
  40. package/translations/en.mo +0 -0
  41. package/translations/en.po +80 -75
  42. package/translations/et.mo +0 -0
  43. package/translations/et.po +96 -86
  44. package/translations/fr.mo +0 -0
  45. package/translations/fr.po +97 -86
  46. package/translations/ja.mo +0 -0
  47. package/translations/ja.po +96 -86
  48. package/translations/messages.pot +105 -91
  49. package/translations/nl.mo +0 -0
  50. package/translations/nl.po +98 -86
  51. package/translations/pl.mo +0 -0
  52. package/translations/pl.po +96 -86
  53. package/views/account/security.hbs +4 -4
  54. package/views/accounts/account.hbs +13 -13
  55. package/views/accounts/register/imap-server.hbs +12 -12
  56. package/views/config/document-store/pre-processing/index.hbs +4 -2
  57. package/views/config/oauth/app.hbs +6 -7
  58. package/views/config/oauth/index.hbs +2 -2
  59. package/views/config/service.hbs +3 -4
  60. package/views/dashboard.hbs +5 -7
  61. package/views/error.hbs +22 -7
  62. package/views/gateways/gateway.hbs +2 -2
  63. package/views/partials/add_account_modal.hbs +7 -10
  64. package/views/partials/document_store_header.hbs +1 -1
  65. package/views/partials/editor_scope_info.hbs +0 -1
  66. package/views/partials/oauth_config_header.hbs +1 -1
  67. package/views/partials/side_menu.hbs +3 -3
  68. package/views/partials/webhook_form.hbs +2 -2
  69. package/views/templates/index.hbs +1 -1
  70. package/views/templates/template.hbs +8 -8
  71. package/views/tokens/index.hbs +6 -6
  72. package/views/tokens/new.hbs +1 -1
  73. package/views/webhooks/index.hbs +4 -4
  74. package/views/webhooks/webhook.hbs +7 -7
  75. package/workers/api.js +148 -2436
  76. package/workers/smtp.js +2 -1
  77. package/lib/imapproxy/imap-core/test/client.js +0 -46
  78. package/lib/imapproxy/imap-core/test/fixtures/append.eml +0 -1196
  79. package/lib/imapproxy/imap-core/test/fixtures/chunks.js +0 -44
  80. package/lib/imapproxy/imap-core/test/fixtures/fix1.eml +0 -6
  81. package/lib/imapproxy/imap-core/test/fixtures/fix2.eml +0 -599
  82. package/lib/imapproxy/imap-core/test/fixtures/fix3.eml +0 -32
  83. package/lib/imapproxy/imap-core/test/fixtures/fix4.eml +0 -6
  84. package/lib/imapproxy/imap-core/test/fixtures/mimetorture.eml +0 -599
  85. package/lib/imapproxy/imap-core/test/fixtures/mimetorture.js +0 -2740
  86. package/lib/imapproxy/imap-core/test/fixtures/mimetorture.json +0 -1411
  87. package/lib/imapproxy/imap-core/test/fixtures/mimetree.js +0 -85
  88. package/lib/imapproxy/imap-core/test/fixtures/nodemailer.eml +0 -582
  89. package/lib/imapproxy/imap-core/test/fixtures/ryan_finnie_mime_torture.eml +0 -599
  90. package/lib/imapproxy/imap-core/test/fixtures/simple.eml +0 -42
  91. package/lib/imapproxy/imap-core/test/fixtures/simple.json +0 -164
  92. package/lib/imapproxy/imap-core/test/imap-compile-stream-test.js +0 -671
  93. package/lib/imapproxy/imap-core/test/imap-compiler-test.js +0 -272
  94. package/lib/imapproxy/imap-core/test/imap-indexer-test.js +0 -236
  95. package/lib/imapproxy/imap-core/test/imap-parser-test.js +0 -922
  96. package/lib/imapproxy/imap-core/test/memory-notifier.js +0 -129
  97. package/lib/imapproxy/imap-core/test/prepare.sh +0 -74
  98. package/lib/imapproxy/imap-core/test/protocol-test.js +0 -1756
  99. package/lib/imapproxy/imap-core/test/search-test.js +0 -1356
  100. package/lib/imapproxy/imap-core/test/test-client.js +0 -152
  101. package/lib/imapproxy/imap-core/test/test-server.js +0 -623
  102. package/lib/imapproxy/imap-core/test/tools-test.js +0 -22
  103. package/test/api-test.js +0 -899
  104. package/test/autoreply-test.js +0 -327
  105. package/test/bounce-test.js +0 -151
  106. package/test/complaint-test.js +0 -256
  107. package/test/fixtures/autoreply/LICENSE +0 -27
  108. package/test/fixtures/autoreply/rfc3834-01.eml +0 -23
  109. package/test/fixtures/autoreply/rfc3834-02.eml +0 -24
  110. package/test/fixtures/autoreply/rfc3834-03.eml +0 -26
  111. package/test/fixtures/autoreply/rfc3834-04.eml +0 -48
  112. package/test/fixtures/autoreply/rfc3834-05.eml +0 -19
  113. package/test/fixtures/autoreply/rfc3834-06.eml +0 -59
  114. package/test/fixtures/bounces/163.eml +0 -2521
  115. package/test/fixtures/bounces/fastmail.eml +0 -242
  116. package/test/fixtures/bounces/gmail.eml +0 -252
  117. package/test/fixtures/bounces/hotmail.eml +0 -655
  118. package/test/fixtures/bounces/mailru.eml +0 -121
  119. package/test/fixtures/bounces/outlook.eml +0 -1107
  120. package/test/fixtures/bounces/postfix.eml +0 -101
  121. package/test/fixtures/bounces/rambler.eml +0 -116
  122. package/test/fixtures/bounces/workmail.eml +0 -142
  123. package/test/fixtures/bounces/yahoo.eml +0 -139
  124. package/test/fixtures/bounces/zoho.eml +0 -83
  125. package/test/fixtures/bounces/zonemta.eml +0 -100
  126. package/test/fixtures/complaints/LICENSE +0 -27
  127. package/test/fixtures/complaints/amazonses.eml +0 -72
  128. package/test/fixtures/complaints/dmarc.eml +0 -59
  129. package/test/fixtures/complaints/hotmail.eml +0 -49
  130. package/test/fixtures/complaints/optout.eml +0 -40
  131. package/test/fixtures/complaints/standard-arf.eml +0 -68
  132. package/test/fixtures/complaints/yahoo.eml +0 -68
  133. package/test/oauth2-apps-test.js +0 -301
  134. package/test/sendonly-test.js +0 -160
  135. package/test/test-config.js +0 -34
  136. package/test/webhooks-server.js +0 -39
@@ -1,129 +0,0 @@
1
- 'use strict';
2
-
3
- let EventEmitter = require('events').EventEmitter;
4
-
5
- // Expects that the folder listing is a Map
6
-
7
- class MemoryNotifier extends EventEmitter {
8
- constructor(options) {
9
- super();
10
- this.folders = options.folders || new Map();
11
-
12
- let logfunc = (...args) => {
13
- let level = args.shift() || 'DEBUG';
14
- let message = args.shift() || '';
15
-
16
- console.log([level].concat(message || '').join(' '), ...args);
17
- };
18
-
19
- this.logger = options.logger || {
20
- info: logfunc.bind(null, 'INFO'),
21
- debug: logfunc.bind(null, 'DEBUG'),
22
- error: logfunc.bind(null, 'ERROR')
23
- };
24
-
25
- this._listeners = new EventEmitter();
26
- this._listeners.setMaxListeners(0);
27
-
28
- EventEmitter.call(this);
29
- }
30
-
31
- /**
32
- * Registers an event handler for mailbox:username events
33
- *
34
- * @param {String} username
35
- * @param {String} mailbox
36
- * @param {Function} handler Function to run once there are new entries in the journal
37
- */
38
- addListener(session, handler) {
39
- this._listeners.addListener(session.user.id.toString(), handler);
40
- }
41
-
42
- /**
43
- * Unregisters an event handler for mailbox:username events
44
- *
45
- * @param {String} username
46
- * @param {String} mailbox
47
- * @param {Function} handler Function to run once there are new entries in the journal
48
- */
49
- removeListener(session, handler) {
50
- this._listeners.removeListener(session.user.id.toString(), handler);
51
- }
52
-
53
- /**
54
- * Stores multiple journal entries to db
55
- *
56
- * @param {String} username
57
- * @param {String} mailbox
58
- * @param {Array|Object} entries An array of entries to be journaled
59
- * @param {Function} callback Runs once the entry is either stored or an error occurred
60
- */
61
- addEntries(mailbox, entries, callback) {
62
- let folder = this.folders.get(mailbox);
63
-
64
- if (!folder) {
65
- return callback(null, new Error('Selected mailbox does not exist'));
66
- }
67
-
68
- if (entries && !Array.isArray(entries)) {
69
- entries = [entries];
70
- } else if (!entries || !entries.length) {
71
- return callback(null, false);
72
- }
73
-
74
- // store entries in the folder object
75
- if (!folder.journal) {
76
- folder.journal = [];
77
- }
78
-
79
- entries.forEach(entry => {
80
- entry.modseq = ++folder.modifyIndex;
81
- folder.journal.push(entry);
82
- });
83
-
84
- setImmediate(callback);
85
- }
86
-
87
- /**
88
- * Sends a notification that there are new updates in the selected mailbox
89
- *
90
- * @param {String} username
91
- * @param {String} mailbox
92
- */
93
- fire(username, payload) {
94
- setImmediate(() => {
95
- this._listeners.emit(username, payload);
96
- });
97
- }
98
-
99
- /**
100
- * Returns all entries from the journal that have higher than provided modification index
101
- *
102
- * @param {String} username
103
- * @param {String} mailbox
104
- * @param {Number} modifyIndex Last known modification id
105
- * @param {Function} callback Returns update entries as an array
106
- */
107
- getUpdates(mailbox, modifyIndex, callback) {
108
- modifyIndex = Number(modifyIndex) || 0;
109
-
110
- if (!this.folders.has(mailbox)) {
111
- return callback(null, 'NONEXISTENT');
112
- }
113
-
114
- let folder = this.folders.get(mailbox);
115
- let minIndex = folder.journal.length;
116
-
117
- for (let i = folder.journal.length - 1; i >= 0; i--) {
118
- if (folder.journal[i].modseq > modifyIndex) {
119
- minIndex = i;
120
- } else {
121
- break;
122
- }
123
- }
124
-
125
- return callback(null, folder.journal.slice(minIndex));
126
- }
127
- }
128
-
129
- module.exports = MemoryNotifier;
@@ -1,74 +0,0 @@
1
- #!/bin/bash
2
-
3
- DBNAME="$1"
4
-
5
- echo "Clearing DB"
6
- mongo "$DBNAME" --eval "db.getCollectionNames().forEach(function(key){db[key].deleteMany({});})" > /dev/null
7
-
8
- echo "Creating user"
9
- USERRESPONSE=`curl --silent -XPOST http://127.0.0.1:8080/users \
10
- -H 'Content-type: application/json' \
11
- -d '{
12
- "username": "testuser",
13
- "password": "pass",
14
- "name": "Test User"
15
- }'`
16
- echo "UR: $USERRESPONSE"
17
- USERID=`echo "$USERRESPONSE" | jq -r '.id'`
18
-
19
- echo "Reading Mailbox ID"
20
- MAILBOXLIST=`curl --silent "http://127.0.0.1:8080/users/$USERID/mailboxes"`
21
- echo "ML: $MAILBOXLIST"
22
- echo "$MAILBOXLIST" | jq
23
- INBOXID=`echo "$MAILBOXLIST" | jq -r '.results[0].id'`
24
- SENTID=`echo "$MAILBOXLIST" | jq -r '.results[3].id'`
25
-
26
- curl --silent -XPUT "http://127.0.0.1:8080/users/$USERID/mailboxes/$SENTID" \
27
- -H 'Content-type: application/json' \
28
- -d '{
29
- "path": "[Gmail]/Sent Mail"
30
- }'
31
-
32
- MAILBOXLIST=`curl --silent "http://127.0.0.1:8080/users/$USERID/mailboxes"`
33
- echo "$MAILBOXLIST" | jq
34
-
35
- curl --silent -XPOST "http://127.0.0.1:8080/users/$USERID/mailboxes/$INBOXID/messages?date=14-Sep-2013%2021%3A22%3A28%20-0300&unseen=true" \
36
- -H 'Content-type: message/rfc822' \
37
- --data-binary "@fixtures/fix1.eml"
38
-
39
- curl --silent -XPOST "http://127.0.0.1:8080/users/$USERID/mailboxes/$INBOXID/messages?unseen=false" \
40
- -H 'Content-type: message/rfc822' \
41
- --data-binary "@fixtures/fix2.eml"
42
-
43
- curl --silent -XPOST "http://127.0.0.1:8080/users/$USERID/mailboxes/$INBOXID/messages?unseen=false" \
44
- -H 'Content-type: message/rfc822' \
45
- --data-binary "@fixtures/fix3.eml"
46
-
47
- curl --silent -XPOST "http://127.0.0.1:8080/users/$USERID/mailboxes/$INBOXID/messages?unseen=true" \
48
- -H 'Content-type: message/rfc822' \
49
- --data-binary "@fixtures/fix4.eml"
50
-
51
- curl --silent -XPOST "http://127.0.0.1:8080/users/$USERID/mailboxes/$INBOXID/messages?unseen=true" \
52
- -H 'Content-type: message/rfc822' \
53
- --data-binary "from: sender@example.com
54
- to: receiver@example.com
55
- subject: test5
56
-
57
- hello 5
58
- "
59
-
60
- curl --silent -XPOST "http://127.0.0.1:8080/users/$USERID/mailboxes/$INBOXID/messages?unseen=true" \
61
- -H 'Content-type: message/rfc822' \
62
- --data-binary "from: sender@example.com
63
- to: receiver@example.com
64
- subject: test6
65
-
66
- hello 6
67
- "
68
-
69
- mongo "$DBNAME" --eval "db.mailboxes.updateOne({_id: ObjectId('$INBOXID')}, {\$set:{modifyIndex: 5000, uidNext: 1000}});
70
- db.messages.updateOne({mailbox: ObjectId('$INBOXID'), uid:1}, {\$set:{modseq: 100}});
71
- db.messages.updateOne({mailbox: ObjectId('$INBOXID'), uid:2}, {\$set:{modseq: 5000}});
72
- db.messages.updateMany({}, {\$inc:{uid: 100}});" > /dev/null
73
-
74
- # curl --silent "http://127.0.0.1:8080/users/$USERID/mailboxes/$INBOXID/messages" | jq