]>
Commit | Line | Data |
---|---|---|
2f372a86 C |
1 | const logger = require('../helpers/logger') |
2 | ||
69b0a27c C |
3 | // --------------------------------------------------------------------------- |
4 | ||
feb4bdfd C |
5 | module.exports = function (sequelize, DataTypes) { |
6 | const OAuthToken = sequelize.define('OAuthToken', | |
7 | { | |
8 | accessToken: { | |
9 | type: DataTypes.STRING | |
10 | }, | |
11 | accessTokenExpiresAt: { | |
12 | type: DataTypes.DATE | |
13 | }, | |
14 | refreshToken: { | |
15 | type: DataTypes.STRING | |
16 | }, | |
17 | refreshTokenExpiresAt: { | |
18 | type: DataTypes.DATE | |
19 | } | |
20 | }, | |
21 | { | |
22 | classMethods: { | |
23 | associate, | |
24 | ||
25 | getByRefreshTokenAndPopulateClient, | |
26 | getByTokenAndPopulateUser, | |
27 | getByRefreshTokenAndPopulateUser, | |
28 | removeByUserId | |
29 | } | |
30 | } | |
31 | ) | |
32 | ||
33 | return OAuthToken | |
69b0a27c C |
34 | } |
35 | ||
feb4bdfd C |
36 | // TODO: validation |
37 | // OAuthTokenSchema.path('accessToken').required(true) | |
38 | // OAuthTokenSchema.path('client').required(true) | |
39 | // OAuthTokenSchema.path('user').required(true) | |
69b0a27c C |
40 | |
41 | // --------------------------------------------------------------------------- | |
42 | ||
feb4bdfd C |
43 | function associate (models) { |
44 | this.belongsTo(models.User, { | |
45 | foreignKey: { | |
46 | name: 'userId', | |
47 | allowNull: false | |
48 | }, | |
49 | onDelete: 'cascade' | |
50 | }) | |
51 | } | |
52 | ||
2f372a86 | 53 | function getByRefreshTokenAndPopulateClient (refreshToken) { |
feb4bdfd C |
54 | const query = { |
55 | where: { | |
56 | refreshToken: refreshToken | |
57 | }, | |
58 | include: [ this.associations.OAuthClient ] | |
59 | } | |
60 | ||
61 | return this.findOne(query).then(function (token) { | |
2f372a86 C |
62 | if (!token) return token |
63 | ||
64 | const tokenInfos = { | |
65 | refreshToken: token.refreshToken, | |
66 | refreshTokenExpiresAt: token.refreshTokenExpiresAt, | |
67 | client: { | |
feb4bdfd | 68 | id: token.client.id |
2f372a86 | 69 | }, |
371fa093 C |
70 | user: { |
71 | id: token.user | |
72 | } | |
2f372a86 C |
73 | } |
74 | ||
75 | return tokenInfos | |
76 | }).catch(function (err) { | |
77 | logger.info('getRefreshToken error.', { error: err }) | |
78 | }) | |
69b0a27c C |
79 | } |
80 | ||
2f372a86 | 81 | function getByTokenAndPopulateUser (bearerToken) { |
feb4bdfd C |
82 | const query = { |
83 | where: { | |
84 | accessToken: bearerToken | |
85 | }, | |
86 | include: [ this.sequelize.models.User ] | |
87 | } | |
88 | ||
89 | return this.findOne(query).then(function (token) { | |
90 | if (token) token.user = token.User | |
91 | ||
92 | return token | |
93 | }) | |
69b0a27c | 94 | } |
2f372a86 | 95 | |
bf2fc85c | 96 | function getByRefreshTokenAndPopulateUser (refreshToken) { |
feb4bdfd C |
97 | const query = { |
98 | where: { | |
99 | refreshToken: refreshToken | |
100 | }, | |
101 | include: [ this.sequelize.models.User ] | |
102 | } | |
103 | ||
104 | return this.findOne(query).then(function (token) { | |
105 | token.user = token.User | |
106 | ||
107 | return token | |
108 | }) | |
2f372a86 | 109 | } |
b81929a0 C |
110 | |
111 | function removeByUserId (userId, callback) { | |
feb4bdfd C |
112 | const query = { |
113 | where: { | |
114 | userId: userId | |
115 | } | |
116 | } | |
117 | ||
118 | return this.destroy(query).asCallback(callback) | |
b81929a0 | 119 | } |