import DB from "../database"; import { ModelDataBase } from "@hibas123/safe_mongo/lib/model"; import { ObjectID } from "bson"; export enum TFATypes { OTC, BACKUP_CODE, U2F, APP_ALLOW, } export const TFANames = new Map(); TFANames.set(TFATypes.OTC, "Authenticator"); TFANames.set(TFATypes.BACKUP_CODE, "Backup Codes"); TFANames.set(TFATypes.U2F, "Security Key (U2F)"); TFANames.set(TFATypes.APP_ALLOW, "App Push"); export interface ITwoFactor extends ModelDataBase { user: ObjectID; valid: boolean; expires?: Date; name?: string; type: TFATypes; data: any; } export interface IOTC extends ITwoFactor { data: string; } export interface IYubiKey extends ITwoFactor { data: { registration?: any; publicKey: string; keyHandle: string; }; } export interface IU2F extends ITwoFactor { data: { challenge?: string; publicKey: string; keyHandle: string; registration?: string; }; } export interface IBackupCode extends ITwoFactor { data: string[]; } const TwoFactor = DB.addModel({ name: "twofactor", versions: [ { migration: (e) => {}, schema: { user: { type: ObjectID }, valid: { type: Boolean }, expires: { type: Date, optional: true }, name: { type: String, optional: true }, type: { type: Number }, data: { type: "any" }, }, }, ], }); export default TwoFactor;