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;