]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/models/oauth/oauth-client.ts
Stricter models typing
[github/Chocobozzz/PeerTube.git] / server / models / oauth / oauth-client.ts
1 import { AllowNull, Column, CreatedAt, DataType, HasMany, Model, Table, UpdatedAt } from 'sequelize-typescript'
2 import { AttributesOnly } from '@shared/core-utils'
3 import { OAuthTokenModel } from './oauth-token'
4
5 @Table({
6 tableName: 'oAuthClient',
7 indexes: [
8 {
9 fields: [ 'clientId' ],
10 unique: true
11 },
12 {
13 fields: [ 'clientId', 'clientSecret' ],
14 unique: true
15 }
16 ]
17 })
18 export class OAuthClientModel extends Model<Partial<AttributesOnly<OAuthClientModel>>> {
19
20 @AllowNull(false)
21 @Column
22 clientId: string
23
24 @AllowNull(false)
25 @Column
26 clientSecret: string
27
28 @Column(DataType.ARRAY(DataType.STRING))
29 grants: string[]
30
31 @Column(DataType.ARRAY(DataType.STRING))
32 redirectUris: string[]
33
34 @CreatedAt
35 createdAt: Date
36
37 @UpdatedAt
38 updatedAt: Date
39
40 @HasMany(() => OAuthTokenModel, {
41 onDelete: 'cascade'
42 })
43 OAuthTokens: OAuthTokenModel[]
44
45 static countTotal () {
46 return OAuthClientModel.count()
47 }
48
49 static loadFirstClient () {
50 return OAuthClientModel.findOne()
51 }
52
53 static getByIdAndSecret (clientId: string, clientSecret: string) {
54 const query = {
55 where: {
56 clientId: clientId,
57 clientSecret: clientSecret
58 }
59 }
60
61 return OAuthClientModel.findOne(query)
62 }
63 }