-import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, Model, Scopes, Table, UpdatedAt } from 'sequelize-typescript'
+import {
+ AfterDestroy,
+ AfterUpdate,
+ AllowNull,
+ BelongsTo,
+ Column,
+ CreatedAt,
+ ForeignKey,
+ Model,
+ Scopes,
+ Table,
+ UpdatedAt
+} from 'sequelize-typescript'
import { logger } from '../../helpers/logger'
import { UserModel } from '../account/user'
import { OAuthClientModel } from './oauth-client'
import { Transaction } from 'sequelize'
import { AccountModel } from '../account/account'
import { ActorModel } from '../activitypub/actor'
+import { clearCacheByToken } from '../../lib/oauth-model'
+import * as Bluebird from 'bluebird'
+import { MOAuthTokenUser } from '@server/typings/models/oauth/oauth-token'
export type OAuthTokenInfo = {
refreshToken: string
WITH_USER = 'WITH_USER'
}
-@Scopes({
+@Scopes(() => ({
[ScopeNames.WITH_USER]: {
include: [
{
- model: () => UserModel.unscoped(),
+ model: UserModel.unscoped(),
required: true,
include: [
{
attributes: [ 'id' ],
- model: () => AccountModel.unscoped(),
+ model: AccountModel.unscoped(),
required: true,
include: [
{
- attributes: [ 'id' ],
- model: () => ActorModel.unscoped(),
+ attributes: [ 'id', 'url' ],
+ model: ActorModel.unscoped(),
required: true
}
]
}
]
}
-})
+}))
@Table({
tableName: 'oAuthToken',
indexes: [
})
OAuthClients: OAuthClientModel[]
+ @AfterUpdate
+ @AfterDestroy
+ static removeTokenCache (token: OAuthTokenModel) {
+ return clearCacheByToken(token.accessToken)
+ }
+
static getByRefreshTokenAndPopulateClient (refreshToken: string) {
const query = {
where: {
})
}
- static getByTokenAndPopulateUser (bearerToken: string) {
+ static getByTokenAndPopulateUser (bearerToken: string): Bluebird<MOAuthTokenUser> {
const query = {
where: {
accessToken: bearerToken
}
}
- return OAuthTokenModel.scope(ScopeNames.WITH_USER).findOne(query).then(token => {
- if (token) token['user'] = token.User
+ return OAuthTokenModel.scope(ScopeNames.WITH_USER)
+ .findOne(query)
+ .then(token => {
+ if (!token) return null
- return token
- })
+ return Object.assign(token, { user: token.User })
+ })
}
- static getByRefreshTokenAndPopulateUser (refreshToken: string) {
+ static getByRefreshTokenAndPopulateUser (refreshToken: string): Bluebird<MOAuthTokenUser> {
const query = {
where: {
refreshToken: refreshToken
return OAuthTokenModel.scope(ScopeNames.WITH_USER)
.findOne(query)
.then(token => {
- if (token) {
- token['user'] = token.User
- return token
- } else {
- return new OAuthTokenModel()
- }
+ if (!token) return new OAuthTokenModel()
+
+ return Object.assign(token, { user: token.User })
})
}