64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
|
import { column, BaseModel, SnakeCaseNamingStrategy, belongsTo, BelongsTo } from '@ioc:Adonis/Lucid/Orm';
|
||
|
import User from './User';
|
||
|
import { DateTime } from 'luxon';
|
||
|
import dayjs from 'dayjs';
|
||
|
import Encryption from '@ioc:Adonis/Core/Encryption';
|
||
|
|
||
|
export default class TotpSecret extends BaseModel {
|
||
|
public static namingStrategy = new SnakeCaseNamingStrategy();
|
||
|
public static table = 'totp_secrets';
|
||
|
// public static fillable: string[] = ['value', 'label', 'type', 'relation'];
|
||
|
|
||
|
@column({
|
||
|
isPrimary: true,
|
||
|
})
|
||
|
public id: number;
|
||
|
|
||
|
@column({})
|
||
|
public user_id: number;
|
||
|
|
||
|
// @column()
|
||
|
// public twoFactorSecret: string;
|
||
|
@column({
|
||
|
serializeAs: null,
|
||
|
consume: (value: string) => (value ? JSON.parse(Encryption.decrypt(value) ?? '{}') : null),
|
||
|
prepare: (value: string) => Encryption.encrypt(JSON.stringify(value)),
|
||
|
})
|
||
|
public twoFactorSecret?: string | null;
|
||
|
|
||
|
// serializeAs: null removes the model properties from the serialized output.
|
||
|
@column({
|
||
|
serializeAs: null,
|
||
|
consume: (value: string) => (value ? JSON.parse(Encryption.decrypt(value) ?? '[]') : []),
|
||
|
prepare: (value: string[]) => Encryption.encrypt(JSON.stringify(value)),
|
||
|
})
|
||
|
public twoFactorRecoveryCodes?: string[] | null;
|
||
|
|
||
|
@column({})
|
||
|
public state: number;
|
||
|
|
||
|
@column.dateTime({
|
||
|
serialize: (value: Date | null) => {
|
||
|
// return value ? moment(value).format('MMMM Do YYYY, HH:mm:ss') : value;
|
||
|
return value ? dayjs(value).format('MMMM D YYYY HH:mm a') : value;
|
||
|
},
|
||
|
autoCreate: true,
|
||
|
})
|
||
|
public created_at: DateTime;
|
||
|
|
||
|
@column.dateTime({
|
||
|
serialize: (value: Date | null) => {
|
||
|
return value ? dayjs(value).format('MMMM D YYYY HH:mm a') : value;
|
||
|
},
|
||
|
autoCreate: true,
|
||
|
autoUpdate: true,
|
||
|
})
|
||
|
public updated_at: DateTime;
|
||
|
|
||
|
@belongsTo(() => User, {
|
||
|
foreignKey: 'user_id',
|
||
|
})
|
||
|
public user: BelongsTo<typeof User>;
|
||
|
|
||
|
}
|