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