67 lines
2.0 KiB
TypeScript
67 lines
2.0 KiB
TypeScript
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<ILoginToken>({
|
|
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<boolean> {
|
|
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; |