1 import * as Sequelize from 'sequelize'
3 import { logger } from '../../helpers'
5 import { addMethodsToModel } from '../utils'
6 import { OAuthTokenAttributes, OAuthTokenInfo, OAuthTokenInstance, OAuthTokenMethods } from './oauth-token-interface'
8 let OAuthToken: Sequelize.Model<OAuthTokenInstance, OAuthTokenAttributes>
9 let getByRefreshTokenAndPopulateClient: OAuthTokenMethods.GetByRefreshTokenAndPopulateClient
10 let getByTokenAndPopulateUser: OAuthTokenMethods.GetByTokenAndPopulateUser
11 let getByRefreshTokenAndPopulateUser: OAuthTokenMethods.GetByRefreshTokenAndPopulateUser
13 export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
14 OAuthToken = sequelize.define<OAuthTokenInstance, OAuthTokenAttributes>('OAuthToken',
17 type: DataTypes.STRING,
20 accessTokenExpiresAt: {
25 type: DataTypes.STRING,
28 refreshTokenExpiresAt: {
36 fields: [ 'refreshToken' ],
40 fields: [ 'accessToken' ],
47 fields: [ 'oAuthClientId' ]
53 const classMethods = [
56 getByRefreshTokenAndPopulateClient,
57 getByTokenAndPopulateUser,
58 getByRefreshTokenAndPopulateUser
60 addMethodsToModel(OAuthToken, classMethods)
65 // ---------------------------------------------------------------------------
67 function associate (models) {
68 OAuthToken.belongsTo(models.User, {
76 OAuthToken.belongsTo(models.OAuthClient, {
78 name: 'oAuthClientId',
85 getByRefreshTokenAndPopulateClient = function (refreshToken: string) {
88 refreshToken: refreshToken
90 include: [ OAuthToken['sequelize'].models.OAuthClient ]
93 return OAuthToken.findOne(query)
95 if (!token) return null
97 const tokenInfos: OAuthTokenInfo = {
98 refreshToken: token.refreshToken,
99 refreshTokenExpiresAt: token.refreshTokenExpiresAt,
101 id: token.oAuthClientId
111 logger.info('getRefreshToken error.', err)
116 getByTokenAndPopulateUser = function (bearerToken: string) {
119 accessToken: bearerToken
123 model: OAuthToken['sequelize'].models.User,
126 model: OAuthToken['sequelize'].models.Account,
134 return OAuthToken.findOne(query).then(token => {
135 if (token) token['user'] = token.User
141 getByRefreshTokenAndPopulateUser = function (refreshToken: string) {
144 refreshToken: refreshToken
148 model: OAuthToken['sequelize'].models.User,
151 model: OAuthToken['sequelize'].models.Account,
159 return OAuthToken.findOne(query).then(token => {
160 token['user'] = token.User