import { Router } from "express"; import YubiKeyRoute from "./yubikey"; import { GetUserMiddleware } from "../../middlewares/user"; import Stacker from "../../middlewares/stacker"; import TwoFactor from "../../../models/twofactor"; import * as moment from "moment" import RequestError, { HttpStatusCode } from "../../../helper/request_error"; const TwoFactorRouter = Router(); TwoFactorRouter.get("/", Stacker(GetUserMiddleware(true, true), async (req, res) => { let twofactor = await TwoFactor.find({ user: req.user._id, valid: true }) let expired = twofactor.filter(e => e.expires ? moment().isAfter(moment(e.expires)) : false) await Promise.all(expired.map(e => { e.valid = false; return TwoFactor.save(e); })); twofactor = twofactor.filter(e => e.valid); let tfa = twofactor.map(e => { return { id: e._id, name: e.name, type: e.type } }) res.json({ methods: tfa }); })); TwoFactorRouter.delete("/", Stacker(GetUserMiddleware(true, true), async (req, res) => { let { id } = req.query; let tfa = await TwoFactor.findById(id); if (!tfa || !tfa.user.equals(req.user._id)) { throw new RequestError("Invalid id", HttpStatusCode.BAD_REQUEST); } tfa.valid = false; await TwoFactor.save(tfa); res.json({ success: true }); })); TwoFactorRouter.use("/yubikey", YubiKeyRoute); export default TwoFactorRouter;