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