Add fallbackEmail to user data model

This commit is contained in:
Johannes Zellner
2018-01-21 14:25:39 +01:00
parent 00c1c42b58
commit 1e8aa209b1
4 changed files with 20 additions and 4 deletions
+2
View File
@@ -23,6 +23,8 @@ CREATE TABLE IF NOT EXISTS users(
modifiedAt VARCHAR(512) NOT NULL,
admin INTEGER NOT NULL,
displayName VARCHAR(512) DEFAULT '',
fallbackEmail VARCHAR(512) DEFAULT ""
PRIMARY KEY(id));
CREATE TABLE IF NOT EXISTS groups(
+4 -1
View File
@@ -55,6 +55,7 @@ function create(req, res, next) {
username: user.username,
displayName: user.displayName,
email: user.email,
fallbackEmail: user.fallbackEmail,
alternateEmail: user.alternateEmail,
admin: user.admin,
groupIds: [ ],
@@ -71,6 +72,7 @@ function update(req, res, next) {
assert.strictEqual(typeof req.body, 'object');
if ('email' in req.body && typeof req.body.email !== 'string') return next(new HttpError(400, 'email must be string'));
if ('fallbackEmail' in req.body && typeof req.body.fallbackEmail !== 'string') return next(new HttpError(400, 'fallbackEmail must be string'));
if ('displayName' in req.body && typeof req.body.displayName !== 'string') return next(new HttpError(400, 'displayName must be string'));
if ('username' in req.body && typeof req.body.username !== 'string') return next(new HttpError(400, 'username must be a string'));
@@ -91,7 +93,7 @@ function list(req, res, next) {
if (error) return next(new HttpError(500, error));
var users = results.map(function (result) {
return _.pick(result, 'id', 'username', 'email', 'alternateEmail', 'displayName', 'groupIds', 'admin');
return _.pick(result, 'id', 'username', 'email', 'fallbackEmail', 'alternateEmail', 'displayName', 'groupIds', 'admin');
});
next(new HttpSuccess(200, { users: users }));
@@ -113,6 +115,7 @@ function get(req, res, next) {
username: result.username,
displayName: result.displayName,
email: result.email,
fallbackEmail: result.fallbackEmail,
alternateEmail: result.alternateEmail,
admin: result.admin,
groupIds: result.groupIds
+7
View File
@@ -166,6 +166,7 @@ function createUser(username, password, email, displayName, auditSource, options
id: 'uid-' + uuid.v4(),
username: username,
email: email,
fallbackEmail: email, // for new users the fallbackEmail is also the default email
password: new Buffer(derivedKey, 'binary').toString('hex'),
salt: salt.toString('hex'),
createdAt: now,
@@ -399,6 +400,12 @@ function updateUser(userId, data, auditSource, callback) {
if (error) return callback(error);
}
if (data.fallbackEmail) {
data.fallbackEmail = data.fallbackEmail.toLowerCase();
error = validateEmail(data.fallbackEmail);
if (error) return callback(error);
}
userdb.get(userId, function (error) {
if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new UserError(UserError.NOT_FOUND));
if (error) return callback(new UserError(UserError.INTERNAL_ERROR, error));
+7 -3
View File
@@ -25,7 +25,7 @@ var assert = require('assert'),
DatabaseError = require('./databaseerror'),
mailboxdb = require('./mailboxdb.js');
var USERS_FIELDS = [ 'id', 'username', 'email', 'password', 'salt', 'createdAt', 'modifiedAt', 'resetToken', 'displayName' ].join(',');
var USERS_FIELDS = [ 'id', 'username', 'email', 'fallbackEmail', 'password', 'salt', 'createdAt', 'modifiedAt', 'resetToken', 'displayName' ].join(',');
function postProcess(result) {
assert.strictEqual(typeof result, 'object');
@@ -132,6 +132,7 @@ function add(userId, user, callback) {
assert(user.username === null || typeof user.username === 'string');
assert.strictEqual(typeof user.password, 'string');
assert.strictEqual(typeof user.email, 'string');
assert.strictEqual(typeof user.fallbackEmail, 'string');
assert.strictEqual(typeof user.salt, 'string');
assert.strictEqual(typeof user.createdAt, 'string');
assert.strictEqual(typeof user.modifiedAt, 'string');
@@ -141,8 +142,8 @@ function add(userId, user, callback) {
var queries = [];
queries.push({
query: 'INSERT INTO users (id, username, password, email, salt, createdAt, modifiedAt, resetToken, displayName) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)',
args: [ userId, user.username, user.password, user.email, user.salt, user.createdAt, user.modifiedAt, user.resetToken, user.displayName ]
query: 'INSERT INTO users (id, username, password, email, fallbackEmail, salt, createdAt, modifiedAt, resetToken, displayName) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
args: [ userId, user.username, user.password, user.email, user.fallbackEmail, user.salt, user.createdAt, user.modifiedAt, user.resetToken, user.displayName ]
});
if (user.username) {
queries.push({
@@ -227,6 +228,9 @@ function update(userId, user, callback) {
} else if (k === 'email') {
assert.strictEqual(typeof user.email, 'string');
args.push(user.email);
} else if (k === 'fallbackEmail') {
assert.strictEqual(typeof user.fallbackEmail, 'string');
args.push(user.fallbackEmail);
} else {
args.push(user[k]);
}