diff options
author | MCMXC <16797721+mcmxcdev@users.noreply.github.com> | 2024-02-10 18:37:40 -0700 |
---|---|---|
committer | Vijay A <vraravam@users.noreply.github.com> | 2024-02-17 21:54:14 +0530 |
commit | fb4d4f7781f2e0830897e1599535c83526b4c286 (patch) | |
tree | 78ed8d88587bba40396b1ae5f88bbf26a53a80dc /app/Models/User.ts | |
parent | refactor: project maintenance (diff) | |
download | ferdium-server-fb4d4f7781f2e0830897e1599535c83526b4c286.tar.gz ferdium-server-fb4d4f7781f2e0830897e1599535c83526b4c286.tar.zst ferdium-server-fb4d4f7781f2e0830897e1599535c83526b4c286.zip |
updates
Diffstat (limited to 'app/Models/User.ts')
-rw-r--r-- | app/Models/User.ts | 78 |
1 files changed, 41 insertions, 37 deletions
diff --git a/app/Models/User.ts b/app/Models/User.ts index cc2c553..d292b3a 100644 --- a/app/Models/User.ts +++ b/app/Models/User.ts | |||
@@ -1,70 +1,70 @@ | |||
1 | import { DateTime } from 'luxon' | 1 | import { DateTime } from 'luxon'; |
2 | import { BaseModel, beforeSave, column, hasMany } from '@adonisjs/lucid/orm' | 2 | import { BaseModel, beforeSave, column, hasMany } from '@adonisjs/lucid/orm'; |
3 | import hash from '@adonisjs/core/services/hash' | 3 | import hash from '@adonisjs/core/services/hash'; |
4 | import emitter from '@adonisjs/core/services/emitter' | 4 | import emitter from '@adonisjs/core/services/emitter'; |
5 | import moment from 'moment' | 5 | import moment from 'moment'; |
6 | import Encryption from '@ioc:Adonis/Core/Encryption' | 6 | import Encryption from '@ioc:Adonis/Core/Encryption'; |
7 | import randtoken from 'rand-token' | 7 | import randtoken from 'rand-token'; |
8 | import Token from './Token.js' | 8 | import Token from './Token.js'; |
9 | import Workspace from './Workspace.js' | 9 | import Workspace from './Workspace.js'; |
10 | import Service from './Service.js' | 10 | import Service from './Service.js'; |
11 | import mail from '@adonisjs/mail/services/main' | 11 | import mail from '@adonisjs/mail/services/main'; |
12 | import { url } from '#config/app' | 12 | import { url } from '#config/app'; |
13 | import { mailFrom } from '#config/dashboard' | 13 | import { mailFrom } from '#config/dashboard'; |
14 | import { HasMany } from '@adonisjs/lucid/types/relations' | 14 | import { HasMany } from '@adonisjs/lucid/types/relations'; |
15 | 15 | ||
16 | export default class User extends BaseModel { | 16 | export default class User extends BaseModel { |
17 | @column({ isPrimary: true }) | 17 | @column({ isPrimary: true }) |
18 | public id: number | 18 | public id: number; |
19 | 19 | ||
20 | @column() | 20 | @column() |
21 | public email: string | 21 | public email: string; |
22 | 22 | ||
23 | @column() | 23 | @column() |
24 | public username: string | 24 | public username: string; |
25 | 25 | ||
26 | @column() | 26 | @column() |
27 | public password: string | 27 | public password: string; |
28 | 28 | ||
29 | @column() | 29 | @column() |
30 | public lastname: string | 30 | public lastname: string; |
31 | 31 | ||
32 | // TODO: Type the settings object. | 32 | // TODO: Type the settings object. |
33 | @column() | 33 | @column() |
34 | public settings: object | 34 | public settings: object; |
35 | 35 | ||
36 | @column.dateTime({ autoCreate: true }) | 36 | @column.dateTime({ autoCreate: true }) |
37 | public created_at: DateTime | 37 | public created_at: DateTime; |
38 | 38 | ||
39 | @column.dateTime({ autoCreate: true, autoUpdate: true }) | 39 | @column.dateTime({ autoCreate: true, autoUpdate: true }) |
40 | public updated_at: DateTime | 40 | public updated_at: DateTime; |
41 | 41 | ||
42 | @beforeSave() | 42 | @beforeSave() |
43 | public static async hashPassword(user: User) { | 43 | public static async hashPassword(user: User) { |
44 | if (user.$dirty.password) { | 44 | if (user.$dirty.password) { |
45 | user.password = await hash.make(user.password) | 45 | user.password = await hash.make(user.password); |
46 | } | 46 | } |
47 | } | 47 | } |
48 | 48 | ||
49 | @hasMany(() => Token, { | 49 | @hasMany(() => Token, { |
50 | foreignKey: 'user_id', | 50 | foreignKey: 'user_id', |
51 | }) | 51 | }) |
52 | public tokens: HasMany<typeof Token> | 52 | public tokens: HasMany<typeof Token>; |
53 | 53 | ||
54 | @hasMany(() => Service, { | 54 | @hasMany(() => Service, { |
55 | foreignKey: 'userId', | 55 | foreignKey: 'userId', |
56 | }) | 56 | }) |
57 | public services: HasMany<typeof Service> | 57 | public services: HasMany<typeof Service>; |
58 | 58 | ||
59 | @hasMany(() => Workspace, { | 59 | @hasMany(() => Workspace, { |
60 | foreignKey: 'userId', | 60 | foreignKey: 'userId', |
61 | }) | 61 | }) |
62 | public workspaces: HasMany<typeof Workspace> | 62 | public workspaces: HasMany<typeof Workspace>; |
63 | 63 | ||
64 | public async forgotPassword(): Promise<void> { | 64 | public async forgotPassword(): Promise<void> { |
65 | const token = await this.generateToken(this, 'forgot_password') | 65 | const token = await this.generateToken(this, 'forgot_password'); |
66 | 66 | ||
67 | await mail.send((message) => { | 67 | await mail.send(message => { |
68 | message | 68 | message |
69 | .from(mailFrom) | 69 | .from(mailFrom) |
70 | .to(this.email) | 70 | .to(this.email) |
@@ -73,13 +73,13 @@ export default class User extends BaseModel { | |||
73 | username: this.username, | 73 | username: this.username, |
74 | appUrl: url, | 74 | appUrl: url, |
75 | token: token, | 75 | token: token, |
76 | }) | 76 | }); |
77 | }) | 77 | }); |
78 | 78 | ||
79 | await emitter.emit('forgot:password', { | 79 | await emitter.emit('forgot:password', { |
80 | user: this, | 80 | user: this, |
81 | token, | 81 | token, |
82 | }) | 82 | }); |
83 | } | 83 | } |
84 | 84 | ||
85 | private async generateToken(user: User, type: string): Promise<string> { | 85 | private async generateToken(user: User, type: string): Promise<string> { |
@@ -88,17 +88,21 @@ export default class User extends BaseModel { | |||
88 | .query() | 88 | .query() |
89 | .where('type', type) | 89 | .where('type', type) |
90 | .where('is_revoked', false) | 90 | .where('is_revoked', false) |
91 | .where('updated_at', '>=', moment().subtract(24, 'hours').format('YYYY-MM-DD HH:mm:ss')) | 91 | .where( |
92 | 'updated_at', | ||
93 | '>=', | ||
94 | moment().subtract(24, 'hours').format('YYYY-MM-DD HH:mm:ss'), | ||
95 | ); | ||
92 | 96 | ||
93 | const row = await query.first() | 97 | const row = await query.first(); |
94 | if (row) { | 98 | if (row) { |
95 | return row.token | 99 | return row.token; |
96 | } | 100 | } |
97 | 101 | ||
98 | const token = Encryption.encrypt(randtoken.generate(16)) | 102 | const token = Encryption.encrypt(randtoken.generate(16)); |
99 | 103 | ||
100 | await user.related('tokens').create({ type, token }) | 104 | await user.related('tokens').create({ type, token }); |
101 | 105 | ||
102 | return token | 106 | return token; |
103 | } | 107 | } |
104 | } | 108 | } |