import DB from "../database"; import { ModelDataBase } from "@hibas123/safe_mongo/lib/model"; import { ObjectID } from "mongodb"; import moment = require("moment"); export interface ILoginToken extends ModelDataBase { token: string; special: boolean; user: ObjectID; validTill: Date; valid: boolean; validated: boolean; data: any; ip: string; browser: string; } const LoginToken = DB.addModel({ name: "login_token", versions: [ { migration: () => {}, schema: { token: { type: String }, special: { type: Boolean, default: () => false }, user: { type: ObjectID }, validTill: { type: Date }, valid: { type: Boolean }, }, }, { migration: (doc: ILoginToken) => { doc.validated = true; }, schema: { token: { type: String }, special: { type: Boolean, default: () => false }, user: { type: ObjectID }, validTill: { type: Date }, valid: { type: Boolean }, validated: { type: Boolean, default: false }, }, }, { migration: (doc: ILoginToken) => { doc.validated = true; }, schema: { token: { type: String }, special: { type: Boolean, default: () => false }, user: { type: ObjectID }, validTill: { type: Date }, valid: { type: Boolean }, validated: { type: Boolean, default: false }, data: { type: "any", optional: true }, ip: { type: String, optional: true }, browser: { type: String, optional: true }, }, }, ], }); export async function CheckToken( token: ILoginToken, validated: boolean = true ): Promise { if (!token || !token.valid) return false; if (validated && !token.validated) return false; if (moment().isAfter(token.validTill)) { token.valid = false; await LoginToken.save(token); return false; } return true; } export default LoginToken;