mailauth 4.6.5 → 4.6.7
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.
- package/.ncurc.js +4 -1
- package/CHANGELOG.md +14 -0
- package/bin/mailauth.js +4 -4
- package/lib/arc/index.js +2 -1
- package/lib/bimi/index.js +3 -2
- package/lib/commands/bodyhash.js +1 -1
- package/lib/commands/report.js +2 -2
- package/lib/commands/seal.js +2 -2
- package/lib/commands/sign.js +1 -1
- package/lib/commands/spf.js +2 -2
- package/lib/commands/vmc.js +1 -1
- package/lib/dkim/body/relaxed.js +2 -1
- package/lib/dkim/body/simple.js +2 -1
- package/lib/dkim/dkim-signer.js +1 -1
- package/lib/dkim/dkim-verifier.js +5 -3
- package/lib/dkim/header/relaxed.js +1 -0
- package/lib/dkim/header/simple.js +1 -0
- package/lib/dkim/message-parser.js +2 -1
- package/lib/dkim/mime-structure-start-finder.js +2 -0
- package/lib/dmarc/get-dmarc-record.js +3 -3
- package/lib/dmarc/verify.js +4 -4
- package/lib/gatherer-stream.js +2 -1
- package/lib/mailauth.js +1 -1
- package/lib/mta-sts.js +4 -3
- package/lib/spf/index.js +2 -2
- package/lib/spf/macro.js +1 -1
- package/lib/spf/spf-verify.js +2 -2
- package/lib/tools.js +9 -8
- package/man/mailauth.1 +1 -1
- package/package.json +15 -17
package/.ncurc.js
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [4.6.7](https://github.com/postalsys/mailauth/compare/v4.6.6...v4.6.7) (2024-05-30)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **psl:** Replaced psl module with tldts for up to date public suffix list ([cab894b](https://github.com/postalsys/mailauth/commit/cab894b54a3544b33a641f377783db67a43bec0e))
|
|
9
|
+
|
|
10
|
+
## [4.6.6](https://github.com/postalsys/mailauth/compare/v4.6.5...v4.6.6) (2024-05-13)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **deps:** Bumped deps to clear out security warnings ([4ca35fe](https://github.com/postalsys/mailauth/commit/4ca35fef37e37ae715c420b8a52c7cb202e4b360))
|
|
16
|
+
|
|
3
17
|
## [4.6.5](https://github.com/postalsys/mailauth/compare/v4.6.4...v4.6.5) (2024-02-12)
|
|
4
18
|
|
|
5
19
|
|
package/bin/mailauth.js
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
const yargs = require('yargs/yargs');
|
|
6
6
|
const { hideBin } = require('yargs/helpers');
|
|
7
|
-
const os = require('os');
|
|
8
|
-
const assert = require('assert');
|
|
7
|
+
const os = require('node:os');
|
|
8
|
+
const assert = require('node:assert');
|
|
9
9
|
|
|
10
10
|
const commandReport = require('../lib/commands/report');
|
|
11
11
|
const commandSign = require('../lib/commands/sign');
|
|
@@ -14,8 +14,8 @@ const commandSpf = require('../lib/commands/spf');
|
|
|
14
14
|
const commandVmc = require('../lib/commands/vmc');
|
|
15
15
|
const commandBodyhash = require('../lib/commands/bodyhash');
|
|
16
16
|
|
|
17
|
-
const fs = require('fs');
|
|
18
|
-
const pathlib = require('path');
|
|
17
|
+
const fs = require('node:fs');
|
|
18
|
+
const pathlib = require('node:path');
|
|
19
19
|
|
|
20
20
|
const argv = yargs(hideBin(process.argv))
|
|
21
21
|
.command(
|
package/lib/arc/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const { Buffer } = require('node:buffer');
|
|
3
4
|
const {
|
|
4
5
|
parseDkimHeaders,
|
|
5
6
|
formatRelaxedLine,
|
|
@@ -9,7 +10,7 @@ const {
|
|
|
9
10
|
writeToStream,
|
|
10
11
|
validateAlgorithm
|
|
11
12
|
} = require('../../lib/tools');
|
|
12
|
-
const crypto = require('crypto');
|
|
13
|
+
const crypto = require('node:crypto');
|
|
13
14
|
const { DkimSigner } = require('../dkim/dkim-signer');
|
|
14
15
|
|
|
15
16
|
const verifyAS = async (chain, opts) => {
|
package/lib/bimi/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const
|
|
3
|
+
const { Buffer } = require('node:buffer');
|
|
4
|
+
const crypto = require('node:crypto');
|
|
5
|
+
const dns = require('node:dns');
|
|
5
6
|
const { formatAuthHeaderRow, parseDkimHeaders, formatDomain, getAlignment } = require('../tools');
|
|
6
7
|
const Joi = require('joi');
|
|
7
8
|
//const packageData = require('../../package.json');
|
package/lib/commands/bodyhash.js
CHANGED
package/lib/commands/report.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const { authenticate } = require('../mailauth');
|
|
4
|
-
const fs = require('fs');
|
|
5
|
-
const { resolve } = require('dns').promises;
|
|
4
|
+
const fs = require('node:fs');
|
|
5
|
+
const { resolve } = require('node:dns').promises;
|
|
6
6
|
|
|
7
7
|
const cmd = async argv => {
|
|
8
8
|
let source = argv.email;
|
package/lib/commands/seal.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const { authenticate } = require('../mailauth');
|
|
4
|
-
const fs = require('fs');
|
|
4
|
+
const fs = require('node:fs');
|
|
5
5
|
const { GathererStream } = require('../gatherer-stream');
|
|
6
|
-
const { resolve } = require('dns').promises;
|
|
6
|
+
const { resolve } = require('node:dns').promises;
|
|
7
7
|
|
|
8
8
|
const cmd = async argv => {
|
|
9
9
|
let source = argv.email;
|
package/lib/commands/sign.js
CHANGED
package/lib/commands/spf.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const { spf } = require('../spf');
|
|
4
|
-
const fs = require('fs');
|
|
5
|
-
const { resolve } = require('dns').promises;
|
|
4
|
+
const fs = require('node:fs');
|
|
5
|
+
const { resolve } = require('node:dns').promises;
|
|
6
6
|
|
|
7
7
|
const cmd = async argv => {
|
|
8
8
|
let address = argv.sender;
|
package/lib/commands/vmc.js
CHANGED
package/lib/dkim/body/relaxed.js
CHANGED
package/lib/dkim/body/simple.js
CHANGED
package/lib/dkim/dkim-signer.js
CHANGED
|
@@ -11,7 +11,7 @@ const {
|
|
|
11
11
|
const { MessageParser } = require('./message-parser');
|
|
12
12
|
const { dkimBody } = require('./body');
|
|
13
13
|
const { generateCanonicalizedHeader } = require('./header');
|
|
14
|
-
const crypto = require('crypto');
|
|
14
|
+
const crypto = require('node:crypto');
|
|
15
15
|
|
|
16
16
|
class DkimSigner extends MessageParser {
|
|
17
17
|
constructor(options) {
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const { Buffer } = require('node:buffer');
|
|
3
4
|
const { getSigningHeaderLines, getPublicKey, parseDkimHeaders, formatAuthHeaderRow, getAlignment, getCurTime } = require('../../lib/tools');
|
|
4
5
|
const { MessageParser } = require('./message-parser');
|
|
5
6
|
const { dkimBody } = require('./body');
|
|
6
7
|
const { generateCanonicalizedHeader } = require('./header');
|
|
7
8
|
const { getARChain } = require('../arc');
|
|
8
9
|
const addressparser = require('nodemailer/lib/addressparser');
|
|
9
|
-
const crypto = require('crypto');
|
|
10
|
+
const crypto = require('node:crypto');
|
|
10
11
|
const { v4: uuidv4 } = require('uuid');
|
|
11
12
|
const libmime = require('libmime');
|
|
12
13
|
|
|
@@ -324,8 +325,9 @@ class DkimVerifier extends MessageParser {
|
|
|
324
325
|
signatureHeader.sourceBodyLength = this.bodyHashes.get(signatureHeader.bodyHashKey)?.byteLength;
|
|
325
326
|
|
|
326
327
|
if (typeof signatureHeader.maxBodyLength === 'number' && signatureHeader.maxBodyLength !== signatureHeader.bodyHashedBytes) {
|
|
327
|
-
|
|
328
|
-
status.
|
|
328
|
+
console.log('TOTAL', signatureHeader.bodyHashedBytes, 'EXPECTING', signatureHeader.maxBodyLength);
|
|
329
|
+
//status.result = 'fail';
|
|
330
|
+
//status.comment = `invalid body length ${signatureHeader.bodyHashedBytes}`;
|
|
329
331
|
}
|
|
330
332
|
|
|
331
333
|
let result = {
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
// Calculates relaxed body hash for a message body stream
|
|
4
4
|
|
|
5
|
+
const { Buffer } = require('node:buffer');
|
|
5
6
|
const { parseHeaders } = require('../../lib/tools');
|
|
6
|
-
const Writable = require('stream').Writable;
|
|
7
|
+
const Writable = require('node:stream').Writable;
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Class for separating header from body
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const dns = require('dns').promises;
|
|
3
|
+
const tldts = require('tldts');
|
|
4
|
+
const dns = require('node:dns').promises;
|
|
5
5
|
|
|
6
6
|
const resolveTxt = async (domain, resolver) => {
|
|
7
7
|
try {
|
|
@@ -33,7 +33,7 @@ const getDmarcRecord = async (domain, resolver) => {
|
|
|
33
33
|
let isOrgRecord = false;
|
|
34
34
|
|
|
35
35
|
if (!txt) {
|
|
36
|
-
let orgDomain =
|
|
36
|
+
let orgDomain = tldts.getDomain(domain);
|
|
37
37
|
if (orgDomain !== domain) {
|
|
38
38
|
// try org domain as well
|
|
39
39
|
txt = await resolveTxt(orgDomain, resolver);
|
package/lib/dmarc/verify.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const dns = require('dns').promises;
|
|
4
|
-
const punycode = require('punycode
|
|
5
|
-
const
|
|
3
|
+
const dns = require('node:dns').promises;
|
|
4
|
+
const punycode = require('punycode.js');
|
|
5
|
+
const tldts = require('tldts');
|
|
6
6
|
const { formatAuthHeaderRow, getAlignment } = require('../tools');
|
|
7
7
|
const getDmarcRecord = require('./get-dmarc-record');
|
|
8
8
|
|
|
@@ -41,7 +41,7 @@ const verifyDmarc = async opts => {
|
|
|
41
41
|
return response;
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
-
let orgDomain =
|
|
44
|
+
let orgDomain = tldts.getDomain(domain);
|
|
45
45
|
|
|
46
46
|
let status = {
|
|
47
47
|
result: 'neutral',
|
package/lib/gatherer-stream.js
CHANGED
package/lib/mailauth.js
CHANGED
|
@@ -9,7 +9,7 @@ const { validateSvg: validateBimiSvg } = require('./bimi/validate-svg');
|
|
|
9
9
|
const { parseReceived } = require('./parse-received');
|
|
10
10
|
const { sealMessage } = require('./arc');
|
|
11
11
|
const libmime = require('libmime');
|
|
12
|
-
const os = require('os');
|
|
12
|
+
const os = require('node:os');
|
|
13
13
|
const { isIP } = require('net');
|
|
14
14
|
|
|
15
15
|
/**
|
package/lib/mta-sts.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const
|
|
3
|
+
const { Buffer } = require('node:buffer');
|
|
4
|
+
const punycode = require('punycode.js');
|
|
5
|
+
const dns = require('node:dns');
|
|
5
6
|
const parseDkimHeaders = require('./parse-dkim-headers');
|
|
6
|
-
const https = require('https');
|
|
7
|
+
const https = require('node:https');
|
|
7
8
|
|
|
8
9
|
const HTTP_REQUEST_TIMEOUT = 15 * 1000;
|
|
9
10
|
|
package/lib/spf/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const { spfVerify } = require('./spf-verify');
|
|
4
|
-
const os = require('os');
|
|
5
|
-
const dns = require('dns');
|
|
4
|
+
const os = require('node:os');
|
|
5
|
+
const dns = require('node:dns');
|
|
6
6
|
const libmime = require('libmime');
|
|
7
7
|
const Joi = require('joi');
|
|
8
8
|
const domainSchema = Joi.string().domain({ allowUnicode: false, tlds: false });
|
package/lib/spf/macro.js
CHANGED
package/lib/spf/spf-verify.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const punycode = require('punycode
|
|
3
|
+
const punycode = require('punycode.js');
|
|
4
4
|
const net = require('net');
|
|
5
5
|
const macro = require('./macro');
|
|
6
|
-
const dns = require('dns').promises;
|
|
6
|
+
const dns = require('node:dns').promises;
|
|
7
7
|
const ipaddr = require('ipaddr.js');
|
|
8
8
|
const { getPtrHostname, formatDomain } = require('../tools');
|
|
9
9
|
|
package/lib/tools.js
CHANGED
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
5
|
-
const
|
|
5
|
+
const { Buffer } = require('node:buffer');
|
|
6
|
+
const punycode = require('punycode.js');
|
|
6
7
|
const libmime = require('libmime');
|
|
7
|
-
const dns = require('dns').promises;
|
|
8
|
-
const crypto = require('crypto');
|
|
9
|
-
const https = require('https');
|
|
8
|
+
const dns = require('node:dns').promises;
|
|
9
|
+
const crypto = require('node:crypto');
|
|
10
|
+
const https = require('node:https');
|
|
10
11
|
const packageData = require('../package');
|
|
11
12
|
const parseDkimHeaders = require('./parse-dkim-headers');
|
|
12
|
-
const
|
|
13
|
+
const tldts = require('tldts');
|
|
13
14
|
const Joi = require('joi');
|
|
14
15
|
const base64Schema = Joi.string().base64({ paddingRequired: false });
|
|
15
16
|
|
|
@@ -482,7 +483,7 @@ const getAlignment = (fromDomain, domainList, strict) => {
|
|
|
482
483
|
if (strict) {
|
|
483
484
|
fromDomain = formatDomain(fromDomain);
|
|
484
485
|
for (let entry of domainList) {
|
|
485
|
-
let domain = formatDomain(
|
|
486
|
+
let domain = formatDomain(tldts.getDomain(entry.domain) || entry.domain);
|
|
486
487
|
if (formatDomain(domain) === fromDomain) {
|
|
487
488
|
return entry;
|
|
488
489
|
}
|
|
@@ -490,9 +491,9 @@ const getAlignment = (fromDomain, domainList, strict) => {
|
|
|
490
491
|
}
|
|
491
492
|
|
|
492
493
|
// match org domains
|
|
493
|
-
fromDomain = formatDomain(
|
|
494
|
+
fromDomain = formatDomain(tldts.getDomain(fromDomain) || fromDomain);
|
|
494
495
|
for (let entry of domainList) {
|
|
495
|
-
let domain = formatDomain(
|
|
496
|
+
let domain = formatDomain(tldts.getDomain(entry.domain) || entry.domain);
|
|
496
497
|
if (domain === fromDomain) {
|
|
497
498
|
return entry;
|
|
498
499
|
}
|
package/man/mailauth.1
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mailauth",
|
|
3
|
-
"version": "4.6.
|
|
3
|
+
"version": "4.6.7",
|
|
4
4
|
"description": "Email authentication library for Node.js",
|
|
5
5
|
"main": "lib/mailauth.js",
|
|
6
6
|
"scripts": {
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"build-source": "rm -rf node_modules package-lock.json && npm install && npm run man && npm run licenses && rm -rf node_modules package-lock.json && npm install --production && rm -rf package-lock.json",
|
|
11
11
|
"build-dist": "npx pkg --compress Brotli package.json && rm -rf package-lock.json && npm install",
|
|
12
12
|
"licenses": "license-report --only=prod --output=table --config license-report-config.json > licenses.txt",
|
|
13
|
-
"update": "rm -rf node_modules package-lock.json && ncu -u && npm install"
|
|
13
|
+
"update": "rm -rf node_modules package-lock.json && npx ncu -u && npm install"
|
|
14
14
|
},
|
|
15
15
|
"repository": {
|
|
16
16
|
"type": "git",
|
|
@@ -42,20 +42,18 @@
|
|
|
42
42
|
"marked": "0.7.0",
|
|
43
43
|
"marked-man": "0.7.0",
|
|
44
44
|
"mbox-reader": "1.1.5",
|
|
45
|
-
"mocha": "10.
|
|
46
|
-
"npm-check-updates": "16.14.14",
|
|
47
|
-
"pkg": "5.8.1"
|
|
45
|
+
"mocha": "10.4.0"
|
|
48
46
|
},
|
|
49
47
|
"dependencies": {
|
|
50
48
|
"@postalsys/vmc": "1.0.8",
|
|
51
|
-
"fast-xml-parser": "4.
|
|
52
|
-
"ipaddr.js": "2.
|
|
53
|
-
"joi": "17.
|
|
54
|
-
"libmime": "5.
|
|
55
|
-
"nodemailer": "6.9.
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"undici": "5.28.
|
|
49
|
+
"fast-xml-parser": "4.4.0",
|
|
50
|
+
"ipaddr.js": "2.2.0",
|
|
51
|
+
"joi": "17.13.1",
|
|
52
|
+
"libmime": "5.3.5",
|
|
53
|
+
"nodemailer": "6.9.13",
|
|
54
|
+
"punycode.js": "2.3.1",
|
|
55
|
+
"tldts": "6.1.23",
|
|
56
|
+
"undici": "5.28.4",
|
|
59
57
|
"uuid": "9.0.1",
|
|
60
58
|
"yargs": "17.7.2"
|
|
61
59
|
},
|
|
@@ -75,10 +73,10 @@
|
|
|
75
73
|
"LICENSE.txt"
|
|
76
74
|
],
|
|
77
75
|
"targets": [
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
76
|
+
"latest-linux-x64",
|
|
77
|
+
"latest-macos-x64",
|
|
78
|
+
"latest-macos-arm64",
|
|
79
|
+
"latest-win-x64"
|
|
82
80
|
],
|
|
83
81
|
"outputPath": "ee-dist"
|
|
84
82
|
}
|