Files
cloudron-box/src/routes/developer.js
T

35 lines
1.2 KiB
JavaScript
Raw Normal View History

'use strict';
exports = module.exports = {
2017-11-02 10:31:11 -07:00
login: login
};
2018-05-01 13:40:25 -07:00
var clients = require('../clients.js'),
passport = require('passport'),
HttpError = require('connect-lastmile').HttpError,
2018-04-26 20:10:46 +02:00
HttpSuccess = require('connect-lastmile').HttpSuccess,
speakeasy = require('speakeasy');
function login(req, res, next) {
passport.authenticate('local', function (error, user) {
if (error) return next(new HttpError(500, error));
if (!user) return next(new HttpError(401, 'Invalid credentials'));
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress || null;
2018-04-26 20:10:46 +02:00
if (user.twoFactorAuthenticationEnabled) {
if (!req.body.totpToken) return next(new HttpError(401, 'A totpToken must be provided'));
let verified = speakeasy.totp.verify({ secret: user.twoFactorAuthenticationSecret, encoding: 'base32', token: req.body.totpToken });
if (!verified) return next(new HttpError(401, 'Invalid totpToken'));
}
2018-05-01 13:40:25 -07:00
clients.issueDeveloperToken(user, ip, function (error, result) {
if (error) return next(new HttpError(500, error));
2018-05-01 13:40:25 -07:00
next(new HttpSuccess(200, result));
});
2018-05-01 13:58:13 -07:00
})(req, res, next);
}