1 import * as Sequelize from 'sequelize'
3 import { logger } from '../../helpers'
5 import { addMethodsToModel } from '../utils'
12 } from './oauth-token-interface'
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
20 export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
21 OAuthToken = sequelize.define<OAuthTokenInstance, OAuthTokenAttributes>('OAuthToken',
24 type: DataTypes.STRING,
27 accessTokenExpiresAt: {
32 type: DataTypes.STRING,
35 refreshTokenExpiresAt: {
43 fields: [ 'refreshToken' ],
47 fields: [ 'accessToken' ],
54 fields: [ 'oAuthClientId' ]
60 const classMethods = [
63 getByRefreshTokenAndPopulateClient,
64 getByTokenAndPopulateUser,
65 getByRefreshTokenAndPopulateUser,
68 addMethodsToModel(OAuthToken, classMethods)
73 // ---------------------------------------------------------------------------
75 function associate (models) {
76 OAuthToken.belongsTo(models.User, {
84 OAuthToken.belongsTo(models.OAuthClient, {
86 name: 'oAuthClientId',
93 getByRefreshTokenAndPopulateClient = function (refreshToken: string) {
96 refreshToken: refreshToken
98 include: [ OAuthToken['sequelize'].models.OAuthClient ]
101 return OAuthToken.findOne(query)
103 if (!token) return null
105 const tokenInfos: OAuthTokenInfo = {
106 refreshToken: token.refreshToken,
107 refreshTokenExpiresAt: token.refreshTokenExpiresAt,
109 id: token.oAuthClientId
119 logger.info('getRefreshToken error.', err)
124 getByTokenAndPopulateUser = function (bearerToken: string) {
127 accessToken: bearerToken
131 model: OAuthToken['sequelize'].models.User,
134 model: OAuthToken['sequelize'].models.Author,
142 return OAuthToken.findOne(query).then(token => {
143 if (token) token['user'] = token.User
149 getByRefreshTokenAndPopulateUser = function (refreshToken: string) {
152 refreshToken: refreshToken
156 model: OAuthToken['sequelize'].models.User,
159 model: OAuthToken['sequelize'].models.Author,
167 return OAuthToken.findOne(query).then(token => {
168 token['user'] = token.User
174 removeByUserId = function (userId: number) {
181 return OAuthToken.destroy(query)