]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame_incremental - server/models/oauth/oauth-token.ts
Destroy user token when changing its role
[github/Chocobozzz/PeerTube.git] / server / models / oauth / oauth-token.ts
... / ...
CommitLineData
1import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, Model, Scopes, Table, UpdatedAt } from 'sequelize-typescript'
2import { logger } from '../../helpers/logger'
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}
17
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})
37@Table({
38 tableName: 'oAuthToken',
39 indexes: [
40 {
41 fields: [ 'refreshToken' ],
42 unique: true
43 },
44 {
45 fields: [ 'accessToken' ],
46 unique: true
47 },
48 {
49 fields: [ 'userId' ]
50 },
51 {
52 fields: [ 'oAuthClientId' ]
53 }
54 ]
55})
56export class OAuthTokenModel extends Model<OAuthTokenModel> {
57
58 @AllowNull(false)
59 @Column
60 accessToken: string
61
62 @AllowNull(false)
63 @Column
64 accessTokenExpiresAt: Date
65
66 @AllowNull(false)
67 @Column
68 refreshToken: string
69
70 @AllowNull(false)
71 @Column
72 refreshTokenExpiresAt: Date
73
74 @CreatedAt
75 createdAt: Date
76
77 @UpdatedAt
78 updatedAt: Date
79
80 @ForeignKey(() => UserModel)
81 @Column
82 userId: number
83
84 @BelongsTo(() => UserModel, {
85 foreignKey: {
86 allowNull: false
87 },
88 onDelete: 'cascade'
89 })
90 User: UserModel
91
92 @ForeignKey(() => OAuthClientModel)
93 @Column
94 oAuthClientId: number
95
96 @BelongsTo(() => OAuthClientModel, {
97 foreignKey: {
98 allowNull: false
99 },
100 onDelete: 'cascade'
101 })
102 OAuthClients: OAuthClientModel[]
103
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 })
131 }
132
133 static getByTokenAndPopulateUser (bearerToken: string) {
134 const query = {
135 where: {
136 accessToken: bearerToken
137 }
138 }
139
140 return OAuthTokenModel.scope(ScopeNames.WITH_ACCOUNT).findOne(query).then(token => {
141 if (token) token['user'] = token.User
142
143 return token
144 })
145 }
146
147 static getByRefreshTokenAndPopulateUser (refreshToken: string) {
148 const query = {
149 where: {
150 refreshToken: refreshToken
151 }
152 }
153
154 return OAuthTokenModel.scope(ScopeNames.WITH_ACCOUNT)
155 .findOne(query)
156 .then(token => {
157 token['user'] = token.User
158
159 return token
160 })
161 }
162
163 static deleteUserToken (userId: number) {
164 const query = {
165 where: {
166 userId
167 }
168 }
169
170 return OAuthTokenModel.destroy(query)
171 }
172}