13 } from 'sequelize-typescript'
14 import { logger } from '../../helpers/logger'
15 import { UserModel } from '../account/user'
16 import { OAuthClientModel } from './oauth-client'
17 import { Transaction } from 'sequelize'
18 import { AccountModel } from '../account/account'
19 import { ActorModel } from '../activitypub/actor'
20 import { clearCacheByToken } from '../../lib/oauth-model'
22 export type OAuthTokenInfo = {
24 refreshTokenExpiresAt: Date,
34 WITH_USER = 'WITH_USER'
38 [ScopeNames.WITH_USER]: {
41 model: () => UserModel.unscoped(),
46 model: () => AccountModel.unscoped(),
50 attributes: [ 'id', 'url' ],
51 model: () => ActorModel.unscoped(),
62 tableName: 'oAuthToken',
65 fields: [ 'refreshToken' ],
69 fields: [ 'accessToken' ],
76 fields: [ 'oAuthClientId' ]
80 export class OAuthTokenModel extends Model<OAuthTokenModel> {
88 accessTokenExpiresAt: Date
96 refreshTokenExpiresAt: Date
104 @ForeignKey(() => UserModel)
108 @BelongsTo(() => UserModel, {
116 @ForeignKey(() => OAuthClientModel)
118 oAuthClientId: number
120 @BelongsTo(() => OAuthClientModel, {
126 OAuthClients: OAuthClientModel[]
130 static removeTokenCache (token: OAuthTokenModel) {
131 return clearCacheByToken(token.accessToken)
134 static getByRefreshTokenAndPopulateClient (refreshToken: string) {
137 refreshToken: refreshToken
139 include: [ OAuthClientModel ]
142 return OAuthTokenModel.findOne(query)
144 if (!token) return null
147 refreshToken: token.refreshToken,
148 refreshTokenExpiresAt: token.refreshTokenExpiresAt,
150 id: token.oAuthClientId
158 logger.error('getRefreshToken error.', { err })
163 static getByTokenAndPopulateUser (bearerToken: string) {
166 accessToken: bearerToken
170 return OAuthTokenModel.scope(ScopeNames.WITH_USER).findOne(query).then(token => {
171 if (token) token['user'] = token.User
177 static getByRefreshTokenAndPopulateUser (refreshToken: string) {
180 refreshToken: refreshToken
184 return OAuthTokenModel.scope(ScopeNames.WITH_USER)
188 token['user'] = token.User
191 return new OAuthTokenModel()
196 static deleteUserToken (userId: number, t?: Transaction) {
204 return OAuthTokenModel.destroy(query)