1 import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, Model, Scopes, Table, UpdatedAt } from 'sequelize-typescript'
2 import { logger } from '../../helpers/logger'
3 import { UserModel } from '../account/user'
4 import { OAuthClientModel } from './oauth-client'
5 import { Transaction } from 'sequelize'
6 import { AccountModel } from '../account/account'
7 import { ActorModel } from '../activitypub/actor'
9 export type OAuthTokenInfo = {
11 refreshTokenExpiresAt: Date,
21 WITH_USER = 'WITH_USER'
25 [ScopeNames.WITH_USER]: {
28 model: () => UserModel.unscoped(),
33 model: () => AccountModel.unscoped(),
38 model: () => ActorModel.unscoped(),
49 tableName: 'oAuthToken',
52 fields: [ 'refreshToken' ],
56 fields: [ 'accessToken' ],
63 fields: [ 'oAuthClientId' ]
67 export class OAuthTokenModel extends Model<OAuthTokenModel> {
75 accessTokenExpiresAt: Date
83 refreshTokenExpiresAt: Date
91 @ForeignKey(() => UserModel)
95 @BelongsTo(() => UserModel, {
103 @ForeignKey(() => OAuthClientModel)
105 oAuthClientId: number
107 @BelongsTo(() => OAuthClientModel, {
113 OAuthClients: OAuthClientModel[]
115 static getByRefreshTokenAndPopulateClient (refreshToken: string) {
118 refreshToken: refreshToken
120 include: [ OAuthClientModel ]
123 return OAuthTokenModel.findOne(query)
125 if (!token) return null
128 refreshToken: token.refreshToken,
129 refreshTokenExpiresAt: token.refreshTokenExpiresAt,
131 id: token.oAuthClientId
139 logger.error('getRefreshToken error.', { err })
144 static getByTokenAndPopulateUser (bearerToken: string) {
147 accessToken: bearerToken
151 return OAuthTokenModel.scope(ScopeNames.WITH_USER).findOne(query).then(token => {
152 if (token) token['user'] = token.User
158 static getByRefreshTokenAndPopulateUser (refreshToken: string) {
161 refreshToken: refreshToken
165 return OAuthTokenModel.scope(ScopeNames.WITH_USER)
169 token['user'] = token.User
172 return new OAuthTokenModel()
177 static deleteUserToken (userId: number, t?: Transaction) {
185 return OAuthTokenModel.destroy(query)