mirror of
https://github.com/nodemailer/wildduck.git
synced 2024-09-20 15:26:03 +08:00
send untagged CAPABILITY after successful auth
This commit is contained in:
parent
c600140a00
commit
ebab1f7b22
|
@ -1,5 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
const imapTools = require('../imap-tools');
|
||||
|
||||
module.exports = {
|
||||
state: 'Not Authenticated',
|
||||
|
||||
|
@ -132,6 +134,7 @@ function authenticate(connection, token, requireClientToken, callback) {
|
|||
connection.setUser(response.user);
|
||||
connection.state = 'Authenticated';
|
||||
connection.setupNotificationListener();
|
||||
imapTools.sendCapabilityResponse(connection);
|
||||
|
||||
callback(null, {
|
||||
response: 'OK',
|
||||
|
|
|
@ -1,58 +1,10 @@
|
|||
'use strict';
|
||||
|
||||
const imapTools = require('../imap-tools');
|
||||
|
||||
module.exports = {
|
||||
handler(command, callback) {
|
||||
let capabilities = [];
|
||||
|
||||
if (!this.secure) {
|
||||
if (!this._server.options.disableSTARTTLS) {
|
||||
capabilities.push('STARTTLS');
|
||||
if (!this._server.options.ignoreSTARTTLS) {
|
||||
capabilities.push('LOGINDISABLED');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.state === 'Not Authenticated') {
|
||||
capabilities.push('AUTH=PLAIN');
|
||||
capabilities.push('AUTH=PLAIN-CLIENTTOKEN');
|
||||
capabilities.push('SASL-IR');
|
||||
capabilities.push('ENABLE');
|
||||
|
||||
capabilities.push('ID');
|
||||
capabilities.push('UNSELECT');
|
||||
capabilities.push('IDLE');
|
||||
capabilities.push('NAMESPACE');
|
||||
capabilities.push('QUOTA');
|
||||
capabilities.push('XLIST');
|
||||
capabilities.push('CHILDREN');
|
||||
} else {
|
||||
capabilities.push('ID');
|
||||
capabilities.push('UNSELECT');
|
||||
capabilities.push('IDLE');
|
||||
capabilities.push('NAMESPACE');
|
||||
capabilities.push('QUOTA');
|
||||
capabilities.push('XLIST');
|
||||
capabilities.push('CHILDREN');
|
||||
|
||||
capabilities.push('SPECIAL-USE');
|
||||
capabilities.push('UIDPLUS');
|
||||
capabilities.push('UNSELECT');
|
||||
capabilities.push('ENABLE');
|
||||
capabilities.push('CONDSTORE');
|
||||
capabilities.push('UTF8=ACCEPT');
|
||||
|
||||
capabilities.push('MOVE');
|
||||
capabilities.push('COMPRESS=DEFLATE');
|
||||
|
||||
if (this._server.options.maxMessage) {
|
||||
capabilities.push('APPENDLIMIT=' + this._server.options.maxMessage);
|
||||
}
|
||||
}
|
||||
|
||||
capabilities.sort((a, b) => a.localeCompare(b));
|
||||
|
||||
this.send('* CAPABILITY ' + ['IMAP4rev1'].concat(capabilities).join(' '));
|
||||
imapTools.sendCapabilityResponse(this);
|
||||
|
||||
callback(null, {
|
||||
response: 'OK'
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
const imapTools = require('../imap-tools');
|
||||
|
||||
module.exports = {
|
||||
state: 'Not Authenticated',
|
||||
|
||||
|
@ -117,6 +119,7 @@ module.exports = {
|
|||
this.setUser(response.user);
|
||||
this.state = 'Authenticated';
|
||||
this.setupNotificationListener();
|
||||
imapTools.sendCapabilityResponse(this);
|
||||
|
||||
callback(null, {
|
||||
response: 'OK',
|
||||
|
|
|
@ -690,3 +690,62 @@ module.exports.getQueryResponse = function(query, message, options) {
|
|||
|
||||
return values;
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds and emits an untagged CAPABILITY response depending on current state
|
||||
*
|
||||
* @param {Object} connection IMAP connection object
|
||||
*/
|
||||
module.exports.sendCapabilityResponse = connection => {
|
||||
let capabilities = [];
|
||||
|
||||
if (!connection.secure) {
|
||||
if (!connection._server.options.disableSTARTTLS) {
|
||||
capabilities.push('STARTTLS');
|
||||
if (!connection._server.options.ignoreSTARTTLS) {
|
||||
capabilities.push('LOGINDISABLED');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (connection.state === 'Not Authenticated') {
|
||||
capabilities.push('AUTH=PLAIN');
|
||||
capabilities.push('AUTH=PLAIN-CLIENTTOKEN');
|
||||
capabilities.push('SASL-IR');
|
||||
capabilities.push('ENABLE');
|
||||
|
||||
capabilities.push('ID');
|
||||
capabilities.push('UNSELECT');
|
||||
capabilities.push('IDLE');
|
||||
capabilities.push('NAMESPACE');
|
||||
capabilities.push('QUOTA');
|
||||
capabilities.push('XLIST');
|
||||
capabilities.push('CHILDREN');
|
||||
} else {
|
||||
capabilities.push('ID');
|
||||
capabilities.push('UNSELECT');
|
||||
capabilities.push('IDLE');
|
||||
capabilities.push('NAMESPACE');
|
||||
capabilities.push('QUOTA');
|
||||
capabilities.push('XLIST');
|
||||
capabilities.push('CHILDREN');
|
||||
|
||||
capabilities.push('SPECIAL-USE');
|
||||
capabilities.push('UIDPLUS');
|
||||
capabilities.push('UNSELECT');
|
||||
capabilities.push('ENABLE');
|
||||
capabilities.push('CONDSTORE');
|
||||
capabilities.push('UTF8=ACCEPT');
|
||||
|
||||
capabilities.push('MOVE');
|
||||
capabilities.push('COMPRESS=DEFLATE');
|
||||
|
||||
if (connection._server.options.maxMessage) {
|
||||
capabilities.push('APPENDLIMIT=' + connection._server.options.maxMessage);
|
||||
}
|
||||
}
|
||||
|
||||
capabilities.sort((a, b) => a.localeCompare(b));
|
||||
|
||||
connection.send('* CAPABILITY ' + ['IMAP4rev1'].concat(capabilities).join(' '));
|
||||
};
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
"apidoc": "0.17.7",
|
||||
"browserbox": "0.9.1",
|
||||
"chai": "4.2.0",
|
||||
"eslint": "5.10.0",
|
||||
"eslint": "5.11.1",
|
||||
"eslint-config-nodemailer": "1.2.0",
|
||||
"eslint-config-prettier": "3.3.0",
|
||||
"grunt": "1.0.3",
|
||||
|
@ -64,7 +64,7 @@
|
|||
"node-forge": "0.7.6",
|
||||
"nodemailer": "4.7.0",
|
||||
"npmlog": "4.1.2",
|
||||
"openpgp": "4.3.0",
|
||||
"openpgp": "4.4.1",
|
||||
"pem": "1.13.2",
|
||||
"pwnedpasswords": "1.0.4",
|
||||
"qrcode": "1.3.2",
|
||||
|
|
Loading…
Reference in a new issue