mirror of
https://github.com/nodemailer/wildduck.git
synced 2025-03-04 03:45:19 +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
|
||||
- **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
|
||||
- **emptyAddress** if true, then do not set up an address for the user
|
||||
- **name** is the name for the user
|
||||
- **forward** is an email address to where all messages are forwarded to
|
||||
- **targetUrl** is an URL to where all messages are uploaded to
|
||||
|
|
|
@ -144,6 +144,9 @@ module.exports = (db, server, userHandler) => {
|
|||
.required(),
|
||||
|
||||
address: Joi.string().email(),
|
||||
emptyAddress: Joi.boolean()
|
||||
.truthy(['Y', 'true', 'yes', 1])
|
||||
.default(false),
|
||||
|
||||
language: Joi.string()
|
||||
.min(2)
|
||||
|
|
|
@ -537,33 +537,46 @@ class UserHandler {
|
|||
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
|
||||
this.users.collection('addresses').insertOne({
|
||||
user: id,
|
||||
address,
|
||||
// dotless version
|
||||
addrview: address.substr(0, address.indexOf('@')).replace(/\./g, '') + address.substr(address.indexOf('@')),
|
||||
created: new Date()
|
||||
}, err => {
|
||||
if (err) {
|
||||
// try to rollback
|
||||
this.users.collection('users').deleteOne({ _id: id }, () => false);
|
||||
this.database.collection('mailboxes').deleteMany({ user: id }, () => false);
|
||||
// insert alias address to email address registry
|
||||
this.users.collection('addresses').insertOne({
|
||||
user: id,
|
||||
address,
|
||||
// dotless version
|
||||
addrview: address.substr(0, address.indexOf('@')).replace(/\./g, '') + address.substr(address.indexOf('@')),
|
||||
created: new Date()
|
||||
}, err => {
|
||||
if (err) {
|
||||
// try to rollback
|
||||
this.users.collection('users').deleteOne({ _id: 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;
|
||||
switch (err.code) {
|
||||
case 11000:
|
||||
response = 'Selected email address already exists';
|
||||
break;
|
||||
default:
|
||||
response = 'Database Error, failed to create user';
|
||||
let response;
|
||||
switch (err.code) {
|
||||
case 11000:
|
||||
response = 'Selected email address already exists';
|
||||
break;
|
||||
default:
|
||||
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
|
||||
|
@ -605,7 +618,7 @@ class UserHandler {
|
|||
() => callback(null, id)
|
||||
);
|
||||
|
||||
if (!this.messageHandler) {
|
||||
if (!this.messageHandler || data.emptyAddress) {
|
||||
return createSuccess();
|
||||
}
|
||||
|
||||
|
@ -613,7 +626,7 @@ class UserHandler {
|
|||
this.pushDefaultMessages(
|
||||
userData,
|
||||
{
|
||||
NAME: userData.name || address,
|
||||
NAME: userData.name || userData.username || address,
|
||||
FNAME: parsedName.firstName,
|
||||
LNAME: parsedName.lastName,
|
||||
DOMAIN: address.substr(address.indexOf('@') + 1),
|
||||
|
|
Loading…
Reference in a new issue