tokens: async'ify

This commit is contained in:
Girish Ramakrishnan
2021-06-04 09:28:40 -07:00
parent 593038907c
commit 7bee7b9ef8
16 changed files with 517 additions and 727 deletions

View File

@@ -25,7 +25,7 @@ exports = module.exports = {
syncDnsRecords
};
let assert = require('assert'),
const assert = require('assert'),
auditSource = require('../auditsource.js'),
BoxError = require('../boxerror.js'),
cloudron = require('../cloudron.js'),
@@ -34,16 +34,16 @@ let assert = require('assert'),
externalLdap = require('../externalldap.js'),
HttpError = require('connect-lastmile').HttpError,
HttpSuccess = require('connect-lastmile').HttpSuccess,
safe = require('safetydance'),
sysinfo = require('../sysinfo.js'),
system = require('../system.js'),
tokendb = require('../tokendb.js'),
tokens = require('../tokens.js'),
translation = require('../translation.js'),
updater = require('../updater.js'),
users = require('../users.js'),
updateChecker = require('../updatechecker.js');
function login(req, res, next) {
async function login(req, res, next) {
assert.strictEqual(typeof req.user, 'object');
if ('type' in req.body && typeof req.body.type !== 'string') return next(new HttpError(400, 'type must be a string'));
@@ -53,26 +53,27 @@ function login(req, res, next) {
const userAgent = req.headers['user-agent'] || '';
const auditSource = { authType: 'basic', ip: ip };
const error = tokens.validateTokenType(type);
let error = tokens.validateTokenType(type);
if (error) return next(new HttpError(400, error.message));
tokens.add(type, req.user.id, Date.now() + constants.DEFAULT_TOKEN_EXPIRATION_MSECS, {}, function (error, token) {
if (error) return next(new HttpError(500, error));
let token;
[error, token] = await safe(tokens.add({ clientId: type, identifier: req.user.id, expires: Date.now() + constants.DEFAULT_TOKEN_EXPIRATION_MSECS }));
if (error) return next(new HttpError(500, error));
eventlog.add(eventlog.ACTION_USER_LOGIN, auditSource, { userId: req.user.id, user: users.removePrivateFields(req.user) });
eventlog.add(eventlog.ACTION_USER_LOGIN, auditSource, { userId: req.user.id, user: users.removePrivateFields(req.user) });
users.checkLoginLocation(req.user, ip, userAgent);
users.checkLoginLocation(req.user, ip, userAgent);
next(new HttpSuccess(200, token));
});
next(new HttpSuccess(200, token));
}
function logout(req, res) {
async function logout(req, res) {
assert.strictEqual(typeof req.access_token, 'string');
eventlog.add(eventlog.ACTION_USER_LOGOUT, auditSource.fromRequest(req), { userId: req.user.id, user: users.removePrivateFields(req.user) });
tokendb.delByAccessToken(req.access_token, function () { res.redirect('/login.html'); });
await safe(tokens.delByAccessToken(req.access_token));
res.redirect('/login.html');
}
function passwordResetRequest(req, res, next) {
@@ -99,15 +100,15 @@ function passwordReset(req, res, next) {
if (!userObject.username) return next(new HttpError(409, 'No username set'));
// setPassword clears the resetToken
users.setPassword(userObject, req.body.password, function (error) {
users.setPassword(userObject, req.body.password, async function (error) {
if (error && error.reason === BoxError.BAD_FIELD) return next(new HttpError(400, error.message));
if (error) return next(BoxError.toHttpError(error));
tokens.add(tokens.ID_WEBADMIN, userObject.id, Date.now() + constants.DEFAULT_TOKEN_EXPIRATION_MSECS, {}, function (error, result) {
if (error) return next(BoxError.toHttpError(error));
let result;
[error, result] = await safe(tokens.add({ clientId: tokens.ID_WEBADMIN, identifer: userObject.id, expires: Date.now() + constants.DEFAULT_TOKEN_EXPIRATION_MSECS }));
if (error) return next(BoxError.toHttpError(error));
next(new HttpSuccess(202, { accessToken: result.accessToken }));
});
next(new HttpSuccess(202, { accessToken: result.accessToken }));
});
});
}