]>
Commit | Line | Data |
---|---|---|
e02643f3 C |
1 | import * as Sequelize from 'sequelize' |
2 | ||
65fcc311 | 3 | import { logger } from '../helpers' |
2f372a86 | 4 | |
e02643f3 C |
5 | import { addMethodsToModel } from './utils' |
6 | import { | |
7 | OAuthTokenClass, | |
8 | OAuthTokenInstance, | |
9 | OAuthTokenAttributes, | |
10 | ||
69818c93 C |
11 | OAuthTokenMethods, |
12 | OAuthTokenInfo | |
e02643f3 C |
13 | } from './oauth-token-interface' |
14 | ||
15 | let OAuthToken: Sequelize.Model<OAuthTokenInstance, OAuthTokenAttributes> | |
16 | let getByRefreshTokenAndPopulateClient: OAuthTokenMethods.GetByRefreshTokenAndPopulateClient | |
17 | let getByTokenAndPopulateUser: OAuthTokenMethods.GetByTokenAndPopulateUser | |
18 | let getByRefreshTokenAndPopulateUser: OAuthTokenMethods.GetByRefreshTokenAndPopulateUser | |
19 | let removeByUserId: OAuthTokenMethods.RemoveByUserId | |
69b0a27c | 20 | |
127944aa C |
21 | export 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 | 76 | function 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 | 94 | getByRefreshTokenAndPopulateClient = 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 | 122 | getByTokenAndPopulateUser = 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 | 137 | getByRefreshTokenAndPopulateUser = 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 | 152 | removeByUserId = 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 | } |