]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/models/oauth/oauth-token.ts
Use sequelize scopes
[github/Chocobozzz/PeerTube.git] / server / models / oauth / oauth-token.ts
CommitLineData
d48ff09d 1import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, Model, Scopes, Table, UpdatedAt } from 'sequelize-typescript'
74889a71 2import { logger } from '../../helpers'
3fd3ab2d
C
3import { AccountModel } from '../account/account'
4import { UserModel } from '../account/user'
5import { OAuthClientModel } from './oauth-client'
6
7export type OAuthTokenInfo = {
8 refreshToken: string
9 refreshTokenExpiresAt: Date,
10 client: {
11 id: number
12 },
13 user: {
14 id: number
15 }
16}
2f372a86 17
d48ff09d
C
18enum ScopeNames {
19 WITH_ACCOUNT = 'WITH_ACCOUNT'
20}
21
22@Scopes({
23 [ScopeNames.WITH_ACCOUNT]: {
24 include: [
25 {
26 model: () => UserModel,
27 include: [
28 {
29 model: () => AccountModel,
30 required: true
31 }
32 ]
33 }
34 ]
35 }
36})
3fd3ab2d
C
37@Table({
38 tableName: 'oAuthToken',
39 indexes: [
feb4bdfd 40 {
3fd3ab2d
C
41 fields: [ 'refreshToken' ],
42 unique: true
feb4bdfd
C
43 },
44 {
3fd3ab2d
C
45 fields: [ 'accessToken' ],
46 unique: true
47 },
48 {
49 fields: [ 'userId' ]
50 },
51 {
52 fields: [ 'oAuthClientId' ]
feb4bdfd 53 }
3fd3ab2d
C
54 ]
55})
56export class OAuthTokenModel extends Model<OAuthTokenModel> {
feb4bdfd 57
3fd3ab2d
C
58 @AllowNull(false)
59 @Column
60 accessToken: string
e02643f3 61
3fd3ab2d
C
62 @AllowNull(false)
63 @Column
64 accessTokenExpiresAt: Date
e02643f3 65
3fd3ab2d
C
66 @AllowNull(false)
67 @Column
68 refreshToken: string
69b0a27c 69
3fd3ab2d
C
70 @AllowNull(false)
71 @Column
72 refreshTokenExpiresAt: Date
69b0a27c 73
3fd3ab2d
C
74 @CreatedAt
75 createdAt: Date
76
77 @UpdatedAt
78 updatedAt: Date
79
80 @ForeignKey(() => UserModel)
81 @Column
82 userId: number
83
84 @BelongsTo(() => UserModel, {
feb4bdfd 85 foreignKey: {
feb4bdfd
C
86 allowNull: false
87 },
88 onDelete: 'cascade'
89 })
3fd3ab2d 90 User: UserModel
319d072e 91
3fd3ab2d
C
92 @ForeignKey(() => OAuthClientModel)
93 @Column
94 oAuthClientId: number
95
96 @BelongsTo(() => OAuthClientModel, {
319d072e 97 foreignKey: {
319d072e
C
98 allowNull: false
99 },
100 onDelete: 'cascade'
101 })
3fd3ab2d 102 OAuthClients: OAuthClientModel[]
feb4bdfd 103
3fd3ab2d
C
104 static getByRefreshTokenAndPopulateClient (refreshToken: string) {
105 const query = {
106 where: {
107 refreshToken: refreshToken
108 },
109 include: [ OAuthClientModel ]
110 }
111
112 return OAuthTokenModel.findOne(query)
113 .then(token => {
114 if (!token) return null
115
116 return {
117 refreshToken: token.refreshToken,
118 refreshTokenExpiresAt: token.refreshTokenExpiresAt,
119 client: {
120 id: token.oAuthClientId
121 },
122 user: {
123 id: token.userId
124 }
125 } as OAuthTokenInfo
126 })
127 .catch(err => {
128 logger.info('getRefreshToken error.', err)
129 throw err
130 })
feb4bdfd
C
131 }
132
3fd3ab2d
C
133 static getByTokenAndPopulateUser (bearerToken: string) {
134 const query = {
135 where: {
136 accessToken: bearerToken
d48ff09d 137 }
3fd3ab2d 138 }
2f372a86 139
d48ff09d 140 return OAuthTokenModel.scope(ScopeNames.WITH_ACCOUNT).findOne(query).then(token => {
3fd3ab2d 141 if (token) token['user'] = token.User
69b0a27c 142
3fd3ab2d
C
143 return token
144 })
feb4bdfd
C
145 }
146
3fd3ab2d
C
147 static getByRefreshTokenAndPopulateUser (refreshToken: string) {
148 const query = {
149 where: {
150 refreshToken: refreshToken
d48ff09d 151 }
3fd3ab2d 152 }
feb4bdfd 153
d48ff09d
C
154 return OAuthTokenModel.scope(ScopeNames.WITH_ACCOUNT)
155 .findOne(query)
156 .then(token => {
157 token['user'] = token.User
2f372a86 158
d48ff09d
C
159 return token
160 })
feb4bdfd 161 }
2f372a86 162}