1 import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, Model, Scopes, Table, UpdatedAt } from 'sequelize-typescript'
2 import { logger } from '../../helpers/logger'
3 import { AccountModel } from '../account/account'
4 import { UserModel } from '../account/user'
5 import { OAuthClientModel } from './oauth-client'
7 export type OAuthTokenInfo = {
9 refreshTokenExpiresAt: Date,
19 WITH_ACCOUNT = 'WITH_ACCOUNT'
23 [ScopeNames.WITH_ACCOUNT]: {
26 model: () => UserModel,
29 model: () => AccountModel,
38 tableName: 'oAuthToken',
41 fields: [ 'refreshToken' ],
45 fields: [ 'accessToken' ],
52 fields: [ 'oAuthClientId' ]
56 export class OAuthTokenModel extends Model<OAuthTokenModel> {
64 accessTokenExpiresAt: Date
72 refreshTokenExpiresAt: Date
80 @ForeignKey(() => UserModel)
84 @BelongsTo(() => UserModel, {
92 @ForeignKey(() => OAuthClientModel)
96 @BelongsTo(() => OAuthClientModel, {
102 OAuthClients: OAuthClientModel[]
104 static getByRefreshTokenAndPopulateClient (refreshToken: string) {
107 refreshToken: refreshToken
109 include: [ OAuthClientModel ]
112 return OAuthTokenModel.findOne(query)
114 if (!token) return null
117 refreshToken: token.refreshToken,
118 refreshTokenExpiresAt: token.refreshTokenExpiresAt,
120 id: token.oAuthClientId
128 logger.info('getRefreshToken error.', err)
133 static getByTokenAndPopulateUser (bearerToken: string) {
136 accessToken: bearerToken
140 return OAuthTokenModel.scope(ScopeNames.WITH_ACCOUNT).findOne(query).then(token => {
141 if (token) token['user'] = token.User
147 static getByRefreshTokenAndPopulateUser (refreshToken: string) {
150 refreshToken: refreshToken
154 return OAuthTokenModel.scope(ScopeNames.WITH_ACCOUNT)
157 token['user'] = token.User
163 static deleteUserToken (userId: number) {
170 return OAuthTokenModel.destroy(query)