1 const mongoose = require('mongoose')
3 const logger = require('../helpers/logger')
5 // ---------------------------------------------------------------------------
7 const OAuthTokenSchema = mongoose.Schema({
9 accessTokenExpiresAt: Date,
10 client: { type: mongoose.Schema.Types.ObjectId, ref: 'OAuthClient' },
12 refreshTokenExpiresAt: Date,
13 user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
16 OAuthTokenSchema.path('accessToken').required(true)
17 OAuthTokenSchema.path('client').required(true)
18 OAuthTokenSchema.path('user').required(true)
20 OAuthTokenSchema.statics = {
21 getByRefreshTokenAndPopulateClient: getByRefreshTokenAndPopulateClient,
22 getByTokenAndPopulateUser: getByTokenAndPopulateUser,
23 getByRefreshToken: getByRefreshToken
26 mongoose.model('OAuthToken', OAuthTokenSchema)
28 // ---------------------------------------------------------------------------
30 function getByRefreshTokenAndPopulateClient (refreshToken) {
31 return this.findOne({ refreshToken: refreshToken }).populate('client').exec().then(function (token) {
32 if (!token) return token
35 refreshToken: token.refreshToken,
36 refreshTokenExpiresAt: token.refreshTokenExpiresAt,
38 id: token.client._id.toString()
44 }).catch(function (err) {
45 logger.info('getRefreshToken error.', { error: err })
49 function getByTokenAndPopulateUser (bearerToken) {
50 return this.findOne({ accessToken: bearerToken }).populate('user').exec()
53 function getByRefreshToken (refreshToken) {
54 return this.findOne({ refreshToken: refreshToken }).exec()