More preparations for 2 factor authentication
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user