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