]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/models/oauth/oauth-token.ts
First upload step is ok
[github/Chocobozzz/PeerTube.git] / server / models / oauth / oauth-token.ts
CommitLineData
e02643f3
C
1import * as Sequelize from 'sequelize'
2
74889a71 3import { logger } from '../../helpers'
2f372a86 4
74889a71 5import { addMethodsToModel } from '../utils'
39445ead 6import { OAuthTokenAttributes, OAuthTokenInfo, OAuthTokenInstance, OAuthTokenMethods } from './oauth-token-interface'
e02643f3
C
7
8let OAuthToken: Sequelize.Model<OAuthTokenInstance, OAuthTokenAttributes>
9let getByRefreshTokenAndPopulateClient: OAuthTokenMethods.GetByRefreshTokenAndPopulateClient
10let getByTokenAndPopulateUser: OAuthTokenMethods.GetByTokenAndPopulateUser
11let getByRefreshTokenAndPopulateUser: OAuthTokenMethods.GetByRefreshTokenAndPopulateUser
69b0a27c 12
127944aa
C
13export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
14 OAuthToken = sequelize.define<OAuthTokenInstance, OAuthTokenAttributes>('OAuthToken',
feb4bdfd
C
15 {
16 accessToken: {
67bf9b96
C
17 type: DataTypes.STRING,
18 allowNull: false
feb4bdfd
C
19 },
20 accessTokenExpiresAt: {
67bf9b96
C
21 type: DataTypes.DATE,
22 allowNull: false
feb4bdfd
C
23 },
24 refreshToken: {
67bf9b96
C
25 type: DataTypes.STRING,
26 allowNull: false
feb4bdfd
C
27 },
28 refreshTokenExpiresAt: {
67bf9b96
C
29 type: DataTypes.DATE,
30 allowNull: false
feb4bdfd
C
31 }
32 },
33 {
319d072e
C
34 indexes: [
35 {
36 fields: [ 'refreshToken' ],
37 unique: true
38 },
39 {
40 fields: [ 'accessToken' ],
41 unique: true
42 },
43 {
44 fields: [ 'userId' ]
45 },
46 {
47 fields: [ 'oAuthClientId' ]
48 }
e02643f3 49 ]
feb4bdfd
C
50 }
51 )
52
e02643f3
C
53 const classMethods = [
54 associate,
55
56 getByRefreshTokenAndPopulateClient,
57 getByTokenAndPopulateUser,
39445ead 58 getByRefreshTokenAndPopulateUser
e02643f3
C
59 ]
60 addMethodsToModel(OAuthToken, classMethods)
61
feb4bdfd 62 return OAuthToken
69b0a27c
C
63}
64
69b0a27c
C
65// ---------------------------------------------------------------------------
66
feb4bdfd 67function associate (models) {
e02643f3 68 OAuthToken.belongsTo(models.User, {
feb4bdfd
C
69 foreignKey: {
70 name: 'userId',
71 allowNull: false
72 },
73 onDelete: 'cascade'
74 })
319d072e 75
e02643f3 76 OAuthToken.belongsTo(models.OAuthClient, {
319d072e
C
77 foreignKey: {
78 name: 'oAuthClientId',
79 allowNull: false
80 },
81 onDelete: 'cascade'
82 })
feb4bdfd
C
83}
84
69818c93 85getByRefreshTokenAndPopulateClient = function (refreshToken: string) {
feb4bdfd
C
86 const query = {
87 where: {
88 refreshToken: refreshToken
89 },
e02643f3 90 include: [ OAuthToken['sequelize'].models.OAuthClient ]
feb4bdfd
C
91 }
92
075f16ca
C
93 return OAuthToken.findOne(query)
94 .then(token => {
95 if (!token) return null
96
97 const tokenInfos: OAuthTokenInfo = {
98 refreshToken: token.refreshToken,
99 refreshTokenExpiresAt: token.refreshTokenExpiresAt,
100 client: {
f981dae8 101 id: token.oAuthClientId
075f16ca
C
102 },
103 user: {
f981dae8 104 id: token.userId
075f16ca 105 }
371fa093 106 }
2f372a86 107
075f16ca
C
108 return tokenInfos
109 })
110 .catch(err => {
111 logger.info('getRefreshToken error.', err)
112 throw err
113 })
69b0a27c
C
114}
115
69818c93 116getByTokenAndPopulateUser = function (bearerToken: string) {
feb4bdfd
C
117 const query = {
118 where: {
119 accessToken: bearerToken
120 },
72c7248b
C
121 include: [
122 {
123 model: OAuthToken['sequelize'].models.User,
124 include: [
125 {
38fa2065 126 model: OAuthToken['sequelize'].models.Account,
72c7248b
C
127 required: true
128 }
129 ]
130 }
131 ]
feb4bdfd
C
132 }
133
075f16ca 134 return OAuthToken.findOne(query).then(token => {
e02643f3 135 if (token) token['user'] = token.User
feb4bdfd
C
136
137 return token
138 })
69b0a27c 139}
2f372a86 140
69818c93 141getByRefreshTokenAndPopulateUser = function (refreshToken: string) {
feb4bdfd
C
142 const query = {
143 where: {
144 refreshToken: refreshToken
145 },
72c7248b
C
146 include: [
147 {
148 model: OAuthToken['sequelize'].models.User,
149 include: [
150 {
38fa2065 151 model: OAuthToken['sequelize'].models.Account,
72c7248b
C
152 required: true
153 }
154 ]
155 }
156 ]
feb4bdfd
C
157 }
158
075f16ca 159 return OAuthToken.findOne(query).then(token => {
e02643f3 160 token['user'] = token.User
feb4bdfd
C
161
162 return token
163 })
2f372a86 164}