1 import * as Sequelize from 'sequelize'
3 import { logger } from '../helpers'
5 import { addMethodsToModel } from './utils'
13 } from './oauth-token-interface'
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
21 export default function (sequelize, DataTypes) {
22 OAuthToken = sequelize.define('OAuthToken',
25 type: DataTypes.STRING,
28 accessTokenExpiresAt: {
33 type: DataTypes.STRING,
36 refreshTokenExpiresAt: {
44 fields: [ 'refreshToken' ],
48 fields: [ 'accessToken' ],
55 fields: [ 'oAuthClientId' ]
61 const classMethods = [
64 getByRefreshTokenAndPopulateClient,
65 getByTokenAndPopulateUser,
66 getByRefreshTokenAndPopulateUser,
69 addMethodsToModel(OAuthToken, classMethods)
74 // ---------------------------------------------------------------------------
76 function associate (models) {
77 OAuthToken.belongsTo(models.User, {
85 OAuthToken.belongsTo(models.OAuthClient, {
87 name: 'oAuthClientId',
94 getByRefreshTokenAndPopulateClient = function (refreshToken: string) {
97 refreshToken: refreshToken
99 include: [ OAuthToken['sequelize'].models.OAuthClient ]
102 return OAuthToken.findOne(query).then(function (token) {
103 if (!token) return null
105 const tokenInfos: OAuthTokenInfo = {
106 refreshToken: token.refreshToken,
107 refreshTokenExpiresAt: token.refreshTokenExpiresAt,
109 id: token['client'].id
117 }).catch(function (err) {
118 logger.info('getRefreshToken error.', { error: err })
122 getByTokenAndPopulateUser = function (bearerToken: string) {
125 accessToken: bearerToken
127 include: [ OAuthToken['sequelize'].models.User ]
130 return OAuthToken.findOne(query).then(function (token) {
131 if (token) token['user'] = token.User
137 getByRefreshTokenAndPopulateUser = function (refreshToken: string) {
140 refreshToken: refreshToken
142 include: [ OAuthToken['sequelize'].models.User ]
145 return OAuthToken.findOne(query).then(function (token) {
146 token['user'] = token.User
152 removeByUserId = function (userId, callback) {
159 return OAuthToken.destroy(query).asCallback(callback)