More preparations for 2 factor authentication

This commit is contained in:
Fabian Stamm
2018-11-10 15:12:38 +01:00
parent 7389c25312
commit 0633311ba1
11 changed files with 62 additions and 119 deletions

View File

@ -1,5 +1,5 @@
import { Request, Response } from "express"
import User, { IUser } from "../../models/user";
import User, { IUser, TokenTypes } from "../../models/user";
import { randomBytes } from "crypto";
import moment = require("moment");
import LoginToken from "../../models/login_token";
@ -19,14 +19,16 @@ const Login = promiseMiddleware(async (req: Request, res: Response) => {
return;
}
const sendToken = async (user: IUser) => {
const sendToken = async (user: IUser, tfa?: TokenTypes[]) => {
let token_str = randomBytes(16).toString("hex");
let tfa_exp = moment().add(5, "minutes").toDate()
let token_exp = moment().add(6, "months").toDate()
let token = LoginToken.new({
token: token_str,
valid: true,
validTill: token_exp,
user: user._id
validTill: tfa ? tfa_exp : token_exp,
user: user._id,
validated: tfa ? false : true
});
await LoginToken.save(token);
@ -35,15 +37,17 @@ const Login = promiseMiddleware(async (req: Request, res: Response) => {
let special = LoginToken.new({
token: special_str,
valid: true,
validTill: special_exp,
validTill: tfa ? tfa_exp : special_exp,
special: true,
user: user._id
user: user._id,
validated: tfa ? false : true
});
await LoginToken.save(special);
res.json({
login: { token: token_str, expires: token_exp.toUTCString() },
special: { token: special_str, expires: special_exp.toUTCString() }
login: { token: token_str, expires: token.validTill.toUTCString() },
special: { token: special_str, expires: special.validTill.toUTCString() },
tfa
});
}
@ -61,12 +65,8 @@ const Login = promiseMiddleware(async (req: Request, res: Response) => {
} else {
if (user.twofactor && user.twofactor.length > 0) {
let types = user.twofactor.map(f => {
return { type: f.type };
})
res.json({
types: types
});
let types = user.twofactor.filter(f => f.valid).map(f => f.type)
await sendToken(user, types);
} else {
await sendToken(user);
}