79 lines
2.7 KiB
TypeScript
79 lines
2.7 KiB
TypeScript
import LoginToken, { ILoginToken } from "../../../models/login_token";
|
|
import moment = require("moment");
|
|
|
|
// export async function unlockToken() {
|
|
// let { type, code, login, special } = req.body;
|
|
|
|
// let [login_t, special_t] = await Promise.all([LoginToken.findOne({ token: login }), LoginToken.findOne({ token: special })]);
|
|
|
|
// if ((login && !login_t) || (special && !special_t)) {
|
|
// res.json({ error: req.__("Token not found!") });
|
|
// } else {
|
|
// let atoken = special_t || login_t;
|
|
|
|
// let user = await User.findById(atoken.user);
|
|
|
|
// let tf = await TwoFactor.find({ user: user._id, valid: true })
|
|
|
|
// let valid = false;
|
|
// switch (type) {
|
|
// case TokenTypes.OTC: {
|
|
// let twofactor = await TwoFactor.findOne({ type, valid: true })
|
|
// if (twofactor) {
|
|
// valid = speakeasy.totp.verify({
|
|
// secret: twofactor.token,
|
|
// encoding: "base64",
|
|
// token: code
|
|
// })
|
|
// }
|
|
// break;
|
|
// }
|
|
|
|
// case TokenTypes.BACKUP_CODE: {
|
|
// let twofactor = await TwoFactor.findOne({ type, valid: true, token: code })
|
|
// if (twofactor) {
|
|
// twofactor.valid = false;
|
|
// await TwoFactor.save(twofactor);
|
|
// valid = true;
|
|
// }
|
|
// break;
|
|
// }
|
|
// case TokenTypes.APP_ALLOW:
|
|
// case TokenTypes.YUBI_KEY:
|
|
// default:
|
|
// res.json({ error: req.__("Invalid twofactor!") });
|
|
// return;
|
|
|
|
// }
|
|
|
|
// if (!valid) {
|
|
// res.json({ error: req.__("Invalid code!") });
|
|
// return;
|
|
// }
|
|
|
|
// let result: any = {};
|
|
// if (login_t) {
|
|
// login_t.validated = true
|
|
// await LoginToken.save(login_t)
|
|
// result.login = { token: login_t.token, expires: login_t.validTill.toUTCString() }
|
|
// }
|
|
|
|
// if (special_t) {
|
|
// special_t.validated = true;
|
|
// await LoginToken.save(special_t);
|
|
// result.special = { token: special_t.token, expires: special_t.validTill.toUTCString() }
|
|
// }
|
|
// res.json(result);
|
|
// }
|
|
// }
|
|
|
|
export async function upgradeToken(token: ILoginToken) {
|
|
token.data = undefined;
|
|
token.valid = true;
|
|
token.validated = true;
|
|
//TODO durations from config
|
|
let expires = (token.special ? moment().add(30, "minute") : moment().add(6, "months")).toDate();
|
|
token.validTill = expires;
|
|
await LoginToken.save(token);
|
|
return expires;
|
|
} |