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; }