mirror of
https://github.com/nodemailer/wildduck.git
synced 2025-12-16 07:28:16 +08:00
allow creating users without an email address
This commit is contained in:
parent
9eed937c5a
commit
eb3c5cca67
3 changed files with 41 additions and 24 deletions
|
|
@ -248,6 +248,7 @@ Creates a new user, returns the ID upon success.
|
||||||
- **username** (required) is the username of the user. This is not an email address but authentication username, use only letters and numbers
|
- **username** (required) is the username of the user. This is not an email address but authentication username, use only letters and numbers
|
||||||
- **password** (required) is the password for the user
|
- **password** (required) is the password for the user
|
||||||
- **address** is the main email address for the user. If address is not set then a new one is generated based on the username and current domain name
|
- **address** is the main email address for the user. If address is not set then a new one is generated based on the username and current domain name
|
||||||
|
- **emptyAddress** if true, then do not set up an address for the user
|
||||||
- **name** is the name for the user
|
- **name** is the name for the user
|
||||||
- **forward** is an email address to where all messages are forwarded to
|
- **forward** is an email address to where all messages are forwarded to
|
||||||
- **targetUrl** is an URL to where all messages are uploaded to
|
- **targetUrl** is an URL to where all messages are uploaded to
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,9 @@ module.exports = (db, server, userHandler) => {
|
||||||
.required(),
|
.required(),
|
||||||
|
|
||||||
address: Joi.string().email(),
|
address: Joi.string().email(),
|
||||||
|
emptyAddress: Joi.boolean()
|
||||||
|
.truthy(['Y', 'true', 'yes', 1])
|
||||||
|
.default(false),
|
||||||
|
|
||||||
language: Joi.string()
|
language: Joi.string()
|
||||||
.min(2)
|
.min(2)
|
||||||
|
|
|
||||||
|
|
@ -537,33 +537,46 @@ class UserHandler {
|
||||||
return callback(new Error('Database Error, failed to create user'));
|
return callback(new Error('Database Error, failed to create user'));
|
||||||
}
|
}
|
||||||
|
|
||||||
let address = data.address ? data.address : data.username + '@' + (config.emailDomain || os.hostname()).toLowerCase();
|
let ensureAddress = done => {
|
||||||
|
if (data.emptyAddress) {
|
||||||
|
return done(null, '');
|
||||||
|
}
|
||||||
|
let address = data.address ? data.address : data.username + '@' + (config.emailDomain || os.hostname()).toLowerCase();
|
||||||
|
|
||||||
// insert alias address to email address registry
|
// insert alias address to email address registry
|
||||||
this.users.collection('addresses').insertOne({
|
this.users.collection('addresses').insertOne({
|
||||||
user: id,
|
user: id,
|
||||||
address,
|
address,
|
||||||
// dotless version
|
// dotless version
|
||||||
addrview: address.substr(0, address.indexOf('@')).replace(/\./g, '') + address.substr(address.indexOf('@')),
|
addrview: address.substr(0, address.indexOf('@')).replace(/\./g, '') + address.substr(address.indexOf('@')),
|
||||||
created: new Date()
|
created: new Date()
|
||||||
}, err => {
|
}, err => {
|
||||||
if (err) {
|
if (err) {
|
||||||
// try to rollback
|
// try to rollback
|
||||||
this.users.collection('users').deleteOne({ _id: id }, () => false);
|
this.users.collection('users').deleteOne({ _id: id }, () => false);
|
||||||
this.database.collection('mailboxes').deleteMany({ user: id }, () => false);
|
this.database.collection('mailboxes').deleteMany({ user: id }, () => false);
|
||||||
|
|
||||||
log.error('DB', 'CREATEFAIL username=%s error=%s', data.username, err.message);
|
log.error('DB', 'CREATEFAIL username=%s error=%s', data.username, err.message);
|
||||||
|
|
||||||
let response;
|
let response;
|
||||||
switch (err.code) {
|
switch (err.code) {
|
||||||
case 11000:
|
case 11000:
|
||||||
response = 'Selected email address already exists';
|
response = 'Selected email address already exists';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
response = 'Database Error, failed to create user';
|
response = 'Database Error, failed to create user';
|
||||||
|
}
|
||||||
|
|
||||||
|
return done(new Error(response));
|
||||||
}
|
}
|
||||||
|
|
||||||
return callback(new Error(response));
|
done(null, address);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
ensureAddress((err, address) => {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
// register this address as the default address for that user
|
// register this address as the default address for that user
|
||||||
|
|
@ -605,7 +618,7 @@ class UserHandler {
|
||||||
() => callback(null, id)
|
() => callback(null, id)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!this.messageHandler) {
|
if (!this.messageHandler || data.emptyAddress) {
|
||||||
return createSuccess();
|
return createSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -613,7 +626,7 @@ class UserHandler {
|
||||||
this.pushDefaultMessages(
|
this.pushDefaultMessages(
|
||||||
userData,
|
userData,
|
||||||
{
|
{
|
||||||
NAME: userData.name || address,
|
NAME: userData.name || userData.username || address,
|
||||||
FNAME: parsedName.firstName,
|
FNAME: parsedName.firstName,
|
||||||
LNAME: parsedName.lastName,
|
LNAME: parsedName.lastName,
|
||||||
DOMAIN: address.substr(address.indexOf('@') + 1),
|
DOMAIN: address.substr(address.indexOf('@') + 1),
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue