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