diff options
Diffstat (limited to 'server/models/oauth')
-rw-r--r-- | server/models/oauth/oauth-token.ts | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/server/models/oauth/oauth-token.ts b/server/models/oauth/oauth-token.ts index 4c53848dc..ef9592c04 100644 --- a/server/models/oauth/oauth-token.ts +++ b/server/models/oauth/oauth-token.ts | |||
@@ -1,9 +1,23 @@ | |||
1 | import { AllowNull, BelongsTo, Column, CreatedAt, ForeignKey, Model, Scopes, Table, UpdatedAt } from 'sequelize-typescript' | 1 | import { |
2 | AfterDelete, | ||
3 | AfterUpdate, | ||
4 | AllowNull, | ||
5 | BelongsTo, | ||
6 | Column, | ||
7 | CreatedAt, | ||
8 | ForeignKey, | ||
9 | Model, | ||
10 | Scopes, | ||
11 | Table, | ||
12 | UpdatedAt | ||
13 | } from 'sequelize-typescript' | ||
2 | import { logger } from '../../helpers/logger' | 14 | import { logger } from '../../helpers/logger' |
3 | import { AccountModel } from '../account/account' | ||
4 | import { UserModel } from '../account/user' | 15 | import { UserModel } from '../account/user' |
5 | import { OAuthClientModel } from './oauth-client' | 16 | import { OAuthClientModel } from './oauth-client' |
6 | import { Transaction } from 'sequelize' | 17 | import { Transaction } from 'sequelize' |
18 | import { AccountModel } from '../account/account' | ||
19 | import { ActorModel } from '../activitypub/actor' | ||
20 | import { clearCacheByToken } from '../../lib/oauth-model' | ||
7 | 21 | ||
8 | export type OAuthTokenInfo = { | 22 | export type OAuthTokenInfo = { |
9 | refreshToken: string | 23 | refreshToken: string |
@@ -17,18 +31,27 @@ export type OAuthTokenInfo = { | |||
17 | } | 31 | } |
18 | 32 | ||
19 | enum ScopeNames { | 33 | enum ScopeNames { |
20 | WITH_ACCOUNT = 'WITH_ACCOUNT' | 34 | WITH_USER = 'WITH_USER' |
21 | } | 35 | } |
22 | 36 | ||
23 | @Scopes({ | 37 | @Scopes({ |
24 | [ScopeNames.WITH_ACCOUNT]: { | 38 | [ScopeNames.WITH_USER]: { |
25 | include: [ | 39 | include: [ |
26 | { | 40 | { |
27 | model: () => UserModel, | 41 | model: () => UserModel.unscoped(), |
42 | required: true, | ||
28 | include: [ | 43 | include: [ |
29 | { | 44 | { |
30 | model: () => AccountModel, | 45 | attributes: [ 'id' ], |
31 | required: true | 46 | model: () => AccountModel.unscoped(), |
47 | required: true, | ||
48 | include: [ | ||
49 | { | ||
50 | attributes: [ 'id' ], | ||
51 | model: () => ActorModel.unscoped(), | ||
52 | required: true | ||
53 | } | ||
54 | ] | ||
32 | } | 55 | } |
33 | ] | 56 | ] |
34 | } | 57 | } |
@@ -102,6 +125,12 @@ export class OAuthTokenModel extends Model<OAuthTokenModel> { | |||
102 | }) | 125 | }) |
103 | OAuthClients: OAuthClientModel[] | 126 | OAuthClients: OAuthClientModel[] |
104 | 127 | ||
128 | @AfterUpdate | ||
129 | @AfterDelete | ||
130 | static removeTokenCache (token: OAuthTokenModel) { | ||
131 | return clearCacheByToken(token.accessToken) | ||
132 | } | ||
133 | |||
105 | static getByRefreshTokenAndPopulateClient (refreshToken: string) { | 134 | static getByRefreshTokenAndPopulateClient (refreshToken: string) { |
106 | const query = { | 135 | const query = { |
107 | where: { | 136 | where: { |
@@ -138,7 +167,7 @@ export class OAuthTokenModel extends Model<OAuthTokenModel> { | |||
138 | } | 167 | } |
139 | } | 168 | } |
140 | 169 | ||
141 | return OAuthTokenModel.scope(ScopeNames.WITH_ACCOUNT).findOne(query).then(token => { | 170 | return OAuthTokenModel.scope(ScopeNames.WITH_USER).findOne(query).then(token => { |
142 | if (token) token['user'] = token.User | 171 | if (token) token['user'] = token.User |
143 | 172 | ||
144 | return token | 173 | return token |
@@ -152,7 +181,7 @@ export class OAuthTokenModel extends Model<OAuthTokenModel> { | |||
152 | } | 181 | } |
153 | } | 182 | } |
154 | 183 | ||
155 | return OAuthTokenModel.scope(ScopeNames.WITH_ACCOUNT) | 184 | return OAuthTokenModel.scope(ScopeNames.WITH_USER) |
156 | .findOne(query) | 185 | .findOne(query) |
157 | .then(token => { | 186 | .then(token => { |
158 | if (token) { | 187 | if (token) { |