X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Foauth%2Foauth-token.ts;h=6bc6cf27c6fcf6bd5ef0f44c7565456eaeb13f2c;hb=b49f22d8f9a52ab75fd38db2d377249eb58fa678;hp=ecf846821012c492daa1482c6e96845475c1b353;hpb=ae28cdf327d782e629379eee1999096ca2a5d74b;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/oauth/oauth-token.ts b/server/models/oauth/oauth-token.ts index ecf846821..6bc6cf27c 100644 --- a/server/models/oauth/oauth-token.ts +++ b/server/models/oauth/oauth-token.ts @@ -1,5 +1,6 @@ +import { Transaction } from 'sequelize' import { - AfterDelete, + AfterDestroy, AfterUpdate, AllowNull, BelongsTo, @@ -11,44 +12,45 @@ import { Table, UpdatedAt } from 'sequelize-typescript' +import { MOAuthTokenUser } from '@server/types/models/oauth/oauth-token' import { logger } from '../../helpers/logger' -import { UserModel } from '../account/user' -import { OAuthClientModel } from './oauth-client' -import { Transaction } from 'sequelize' +import { clearCacheByToken } from '../../lib/oauth-model' import { AccountModel } from '../account/account' +import { UserModel } from '../account/user' import { ActorModel } from '../activitypub/actor' -import { clearCacheByToken } from '../../lib/oauth-model' +import { OAuthClientModel } from './oauth-client' export type OAuthTokenInfo = { refreshToken: string - refreshTokenExpiresAt: Date, + refreshTokenExpiresAt: Date client: { id: number - }, + } user: { id: number } + token: MOAuthTokenUser } enum ScopeNames { 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', 'url' ], - model: () => ActorModel.unscoped(), + model: ActorModel.unscoped(), required: true } ] @@ -57,7 +59,7 @@ enum ScopeNames { } ] } -}) +})) @Table({ tableName: 'oAuthToken', indexes: [ @@ -77,7 +79,7 @@ enum ScopeNames { } ] }) -export class OAuthTokenModel extends Model { +export class OAuthTokenModel extends Model { @AllowNull(false) @Column @@ -95,6 +97,9 @@ export class OAuthTokenModel extends Model { @Column refreshTokenExpiresAt: Date + @Column + authName: string + @CreatedAt createdAt: Date @@ -126,70 +131,77 @@ export class OAuthTokenModel extends Model { OAuthClients: OAuthClientModel[] @AfterUpdate - @AfterDelete + @AfterDestroy static removeTokenCache (token: OAuthTokenModel) { return clearCacheByToken(token.accessToken) } + static loadByRefreshToken (refreshToken: string) { + const query = { + where: { refreshToken } + } + + return OAuthTokenModel.findOne(query) + } + static getByRefreshTokenAndPopulateClient (refreshToken: string) { const query = { where: { - refreshToken: refreshToken + refreshToken }, include: [ OAuthClientModel ] } - return OAuthTokenModel.findOne(query) - .then(token => { - if (!token) return null - - return { - refreshToken: token.refreshToken, - refreshTokenExpiresAt: token.refreshTokenExpiresAt, - client: { - id: token.oAuthClientId - }, - user: { - id: token.userId - } - } as OAuthTokenInfo - }) - .catch(err => { - logger.error('getRefreshToken error.', { err }) - throw err - }) + return OAuthTokenModel.scope(ScopeNames.WITH_USER) + .findOne(query) + .then(token => { + if (!token) return null + + return { + refreshToken: token.refreshToken, + refreshTokenExpiresAt: token.refreshTokenExpiresAt, + client: { + id: token.oAuthClientId + }, + user: token.User, + token + } as OAuthTokenInfo + }) + .catch(err => { + logger.error('getRefreshToken error.', { err }) + throw err + }) } - static getByTokenAndPopulateUser (bearerToken: string) { + static getByTokenAndPopulateUser (bearerToken: string): Promise { 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): Promise { const query = { where: { - refreshToken: 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 undefined + + return Object.assign(token, { user: token.User }) }) }