node_modules: update

This commit is contained in:
Dawid Dziurla
2021-07-14 08:08:23 +02:00
parent a1ab281c6f
commit ceb614a2c5
33 changed files with 323 additions and 190 deletions

View File

@ -31,7 +31,7 @@ class MailComposer {
// Compose MIME tree
if (this.mail.raw) {
this.message = new MimeNode().setRaw(this.mail.raw);
this.message = new MimeNode('message/rfc822', { newline: this.mail.newline }).setRaw(this.mail.raw);
} else if (this._useMixed) {
this.message = this._createMixed();
} else if (this._useAlternative) {
@ -345,13 +345,15 @@ class MailComposer {
boundaryPrefix: this.mail.boundaryPrefix,
disableUrlAccess: this.mail.disableUrlAccess,
disableFileAccess: this.mail.disableFileAccess,
normalizeHeaderKey: this.mail.normalizeHeaderKey
normalizeHeaderKey: this.mail.normalizeHeaderKey,
newline: this.mail.newline
});
} else {
node = parentNode.createChild('multipart/mixed', {
disableUrlAccess: this.mail.disableUrlAccess,
disableFileAccess: this.mail.disableFileAccess,
normalizeHeaderKey: this.mail.normalizeHeaderKey
normalizeHeaderKey: this.mail.normalizeHeaderKey,
newline: this.mail.newline
});
}
@ -391,13 +393,15 @@ class MailComposer {
boundaryPrefix: this.mail.boundaryPrefix,
disableUrlAccess: this.mail.disableUrlAccess,
disableFileAccess: this.mail.disableFileAccess,
normalizeHeaderKey: this.mail.normalizeHeaderKey
normalizeHeaderKey: this.mail.normalizeHeaderKey,
newline: this.mail.newline
});
} else {
node = parentNode.createChild('multipart/alternative', {
disableUrlAccess: this.mail.disableUrlAccess,
disableFileAccess: this.mail.disableFileAccess,
normalizeHeaderKey: this.mail.normalizeHeaderKey
normalizeHeaderKey: this.mail.normalizeHeaderKey,
newline: this.mail.newline
});
}
@ -428,13 +432,15 @@ class MailComposer {
boundaryPrefix: this.mail.boundaryPrefix,
disableUrlAccess: this.mail.disableUrlAccess,
disableFileAccess: this.mail.disableFileAccess,
normalizeHeaderKey: this.mail.normalizeHeaderKey
normalizeHeaderKey: this.mail.normalizeHeaderKey,
newline: this.mail.newline
});
} else {
node = parentNode.createChild('multipart/related; type="text/html"', {
disableUrlAccess: this.mail.disableUrlAccess,
disableFileAccess: this.mail.disableFileAccess,
normalizeHeaderKey: this.mail.normalizeHeaderKey
normalizeHeaderKey: this.mail.normalizeHeaderKey,
newline: this.mail.newline
});
}
@ -470,7 +476,8 @@ class MailComposer {
boundaryPrefix: this.mail.boundaryPrefix,
disableUrlAccess: this.mail.disableUrlAccess,
disableFileAccess: this.mail.disableFileAccess,
normalizeHeaderKey: this.mail.normalizeHeaderKey
normalizeHeaderKey: this.mail.normalizeHeaderKey,
newline: this.mail.newline
});
} else {
node = parentNode.createChild(element.contentType, {
@ -478,7 +485,8 @@ class MailComposer {
textEncoding: this.mail.textEncoding,
disableUrlAccess: this.mail.disableUrlAccess,
disableFileAccess: this.mail.disableFileAccess,
normalizeHeaderKey: this.mail.normalizeHeaderKey
normalizeHeaderKey: this.mail.normalizeHeaderKey,
newline: this.mail.newline
});
}

View File

@ -16,6 +16,9 @@ const addressparser = require('../addressparser');
const fetch = require('../fetch');
const LastNewline = require('./last-newline');
const LeWindows = require('./le-windows');
const LeUnix = require('./le-unix');
/**
* Creates a new mime tree node. Assumes 'multipart/*' as the content type
* if it is a branch, anything else counts as leaf. If rootNode is missing from
@ -92,6 +95,11 @@ class MimeNode {
*/
this.hostname = options.hostname;
/**
* If set to 'win' then uses \r\n, if 'linux' then \n. If not set (or `raw` is used) then newlines are kept as is.
*/
this.newline = options.newline;
/**
* An array for possible child nodes
*/
@ -626,6 +634,15 @@ class MimeNode {
outputStream = transform(outputStream);
}
if (this.newline) {
const winbreak = ['win', 'windows', 'dos', '\r\n'].includes(this.newline.toString().toLowerCase());
const newlineTransform = winbreak ? new LeWindows() : new LeUnix();
const stream = outputStream.pipe(newlineTransform);
outputStream.on('error', err => stream.emit('error', err));
return stream;
}
return outputStream;
}
@ -1130,9 +1147,9 @@ class MimeNode {
address.address = this._normalizeAddress(address.address);
if (!address.name) {
values.push(address.address);
values.push(address.address.indexOf(' ') >= 0 ? `<${address.address}>` : `${address.address}`);
} else if (address.name) {
values.push(this._encodeAddressName(address.name) + ' <' + address.address + '>');
values.push(`${this._encodeAddressName(address.name)} <${address.address}>`);
}
if (address.address) {
@ -1141,9 +1158,8 @@ class MimeNode {
}
}
} else if (address.group) {
values.push(
this._encodeAddressName(address.name) + ':' + (address.group.length ? this._convertAddresses(address.group, uniqueList) : '').trim() + ';'
);
let groupListAddresses = (address.group.length ? this._convertAddresses(address.group, uniqueList) : '').trim();
values.push(`${this._encodeAddressName(address.name)}:${groupListAddresses};`);
}
});
@ -1157,13 +1173,17 @@ class MimeNode {
* @return {String} address string
*/
_normalizeAddress(address) {
address = (address || '').toString().trim();
address = (address || '')
.toString()
.replace(/[\x00-\x1F<>]+/g, ' ') // remove unallowed characters
.trim();
let lastAt = address.lastIndexOf('@');
if (lastAt < 0) {
// Bare username
return address;
}
let user = address.substr(0, lastAt);
let domain = address.substr(lastAt + 1);
@ -1172,7 +1192,24 @@ class MimeNode {
// 'jõgeva.ee' will be converted to 'xn--jgeva-dua.ee'
// non-unicode domains are left as is
return user + '@' + punycode.toASCII(domain.toLowerCase());
let encodedDomain;
try {
encodedDomain = punycode.toASCII(domain.toLowerCase());
} catch (err) {
// keep as is?
}
if (user.indexOf(' ') >= 0) {
if (user.charAt(0) !== '"') {
user = '"' + user;
}
if (user.substr(-1) !== '"') {
user = user + '"';
}
}
return `${user}@${encodedDomain}`;
}
/**

View File

@ -2,8 +2,6 @@
const spawn = require('child_process').spawn;
const packageData = require('../../package.json');
const LeWindows = require('./le-windows');
const LeUnix = require('./le-unix');
const shared = require('../shared');
/**
@ -68,7 +66,6 @@ class SendmailTransport {
let args;
let sendmail;
let returned;
let transform;
const hasInvalidAddresses = []
.concat(envelope.from || [])
@ -187,10 +184,8 @@ class SendmailTransport {
recipients.join(', ')
);
transform = this.winbreak ? new LeWindows() : new LeUnix();
let sourceStream = mail.message.createReadStream();
transform.once('error', err => {
sourceStream.once('error', err => {
this.logger.error(
{
err,
@ -205,8 +200,7 @@ class SendmailTransport {
callback(err);
});
sourceStream.once('error', err => transform.emit('error', err));
sourceStream.pipe(transform).pipe(sendmail.stdin);
sourceStream.pipe(sendmail.stdin);
} else {
return callback(new Error('sendmail was not found'));
}

View File

@ -3,7 +3,7 @@
const EventEmitter = require('events');
const packageData = require('../../package.json');
const shared = require('../shared');
const LeWindows = require('../sendmail-transport/le-windows');
const LeWindows = require('../mime-node/le-windows');
/**
* Generates a Transport object for AWS SES
@ -309,6 +309,23 @@ class SESTransport extends EventEmitter {
*/
verify(callback) {
let promise;
let ses = (this.ses.aws ? this.ses.ses : this.ses) || {};
let aws = this.ses.aws || {};
const sesMessage = {
RawMessage: {
// required
Data: 'From: invalid@invalid\r\nTo: invalid@invalid\r\n Subject: Invalid\r\n\r\nInvalid'
},
Source: 'invalid@invalid',
Destinations: ['invalid@invalid']
};
const cb = err => {
if (err && err.code !== 'InvalidParameterValue') {
return callback(err);
}
return callback(null, true);
};
if (!callback) {
promise = new Promise((resolve, reject) => {
@ -316,22 +333,13 @@ class SESTransport extends EventEmitter {
});
}
this.ses.sendRawEmail(
{
RawMessage: {
// required
Data: 'From: invalid@invalid\r\nTo: invalid@invalid\r\n Subject: Invalid\r\n\r\nInvalid'
},
Source: 'invalid@invalid',
Destinations: ['invalid@invalid']
},
err => {
if (err && err.code !== 'InvalidParameterValue') {
return callback(err);
}
return callback(null, true);
}
);
if (typeof ses.send === 'function' && aws.SendRawEmailCommand) {
// v3 API
ses.send(new aws.SendRawEmailCommand(sesMessage), cb);
} else {
// v2 API
ses.sendRawEmail(sesMessage, cb).promise();
}
return promise;
}

View File

@ -327,7 +327,11 @@ module.exports.resolveContent = (data, key, callback) => {
}
// we can't stream twice the same content, so we need
// to replace the stream object with the streaming result
data[key] = value;
if (data[key].content) {
data[key].content = value;
} else {
data[key] = value;
}
callback(null, value);
});
} else if (/^https?:\/\//i.test(content.path || content.href)) {

View File

@ -873,16 +873,21 @@ class SMTPConnection extends EventEmitter {
});
this.upgrading = true;
this._socket = tls.connect(opts, () => {
this.secure = true;
this.upgrading = false;
this._socket.on('data', this._onSocketData);
// tls.connect is not an asynchronous function however it may still throw errors and requires to be wrapped with try/catch
try {
this._socket = tls.connect(opts, () => {
this.secure = true;
this.upgrading = false;
this._socket.on('data', this._onSocketData);
socketPlain.removeListener('close', this._onSocketClose);
socketPlain.removeListener('end', this._onSocketEnd);
socketPlain.removeListener('close', this._onSocketClose);
socketPlain.removeListener('end', this._onSocketEnd);
return callback(null, true);
});
return callback(null, true);
});
} catch (err) {
return callback(err);
}
this._socket.on('error', this._onSocketError);
this._socket.once('close', this._onSocketClose);

View File

@ -2,8 +2,6 @@
const packageData = require('../../package.json');
const shared = require('../shared');
const LeWindows = require('../sendmail-transport/le-windows');
const LeUnix = require('../sendmail-transport/le-unix');
/**
* Generates a Transport object for streaming
@ -61,15 +59,10 @@ class StreamTransport {
);
setImmediate(() => {
let sourceStream;
let stream;
let transform;
try {
transform = this.winbreak ? new LeWindows() : new LeUnix();
sourceStream = mail.message.createReadStream();
stream = sourceStream.pipe(transform);
sourceStream.on('error', err => stream.emit('error', err));
stream = mail.message.createReadStream();
} catch (E) {
this.logger.error(
{