diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-01-14 10:48:11 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-01-14 10:48:11 +0900 |
| commit | bcb5182e8686dcb517defe56a18324fb0ec72027 (patch) | |
| tree | 960207df78c2b5ddbff0a30dfcdcd631a54256dc /packages/backend/src | |
| parent | fix (diff) | |
| download | misskey-bcb5182e8686dcb517defe56a18324fb0ec72027.tar.gz misskey-bcb5182e8686dcb517defe56a18324fb0ec72027.tar.bz2 misskey-bcb5182e8686dcb517defe56a18324fb0ec72027.zip | |
Webhookの作成可能数を設定可能に
Diffstat (limited to 'packages/backend/src')
| -rw-r--r-- | packages/backend/src/core/RoleService.ts | 3 | ||||
| -rw-r--r-- | packages/backend/src/server/api/endpoints/i/webhooks/create.ts | 17 |
2 files changed, 20 insertions, 0 deletions
diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts index e7821ebd78..c639786ec6 100644 --- a/packages/backend/src/core/RoleService.ts +++ b/packages/backend/src/core/RoleService.ts @@ -22,6 +22,7 @@ export type RoleOptions = { driveCapacityMb: number; antennaLimit: number; wordMuteLimit: number; + webhookLimit: number; }; export const DEFAULT_ROLE: RoleOptions = { @@ -33,6 +34,7 @@ export const DEFAULT_ROLE: RoleOptions = { driveCapacityMb: 100, antennaLimit: 5, wordMuteLimit: 200, + webhookLimit: 3, }; @Injectable() @@ -203,6 +205,7 @@ export class RoleService implements OnApplicationShutdown { driveCapacityMb: Math.max(...getOptionValues('driveCapacityMb')), antennaLimit: Math.max(...getOptionValues('antennaLimit')), wordMuteLimit: Math.max(...getOptionValues('wordMuteLimit')), + webhookLimit: Math.max(...getOptionValues('webhookLimit')), }; } diff --git a/packages/backend/src/server/api/endpoints/i/webhooks/create.ts b/packages/backend/src/server/api/endpoints/i/webhooks/create.ts index 584c2ba6a4..45cfd8161c 100644 --- a/packages/backend/src/server/api/endpoints/i/webhooks/create.ts +++ b/packages/backend/src/server/api/endpoints/i/webhooks/create.ts @@ -5,6 +5,7 @@ import type { WebhooksRepository } from '@/models/index.js'; import { webhookEventTypes } from '@/models/entities/Webhook.js'; import { GlobalEventService } from '@/core/GlobalEventService.js'; import { DI } from '@/di-symbols.js'; +import { RoleService } from '@/core/RoleService.js'; export const meta = { tags: ['webhooks'], @@ -12,6 +13,14 @@ export const meta = { requireCredential: true, kind: 'write:account', + + errors: { + tooManyWebhooks: { + message: 'You cannot create webhook any more.', + code: 'TOO_MANY_WEBHOOKS', + id: '87a9bb19-111e-4e37-81d3-a3e7426453b0', + }, + }, } as const; export const paramDef = { @@ -38,8 +47,16 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { private idService: IdService, private globalEventService: GlobalEventService, + private roleService: RoleService, ) { super(meta, paramDef, async (ps, me) => { + const currentWebhooksCount = await this.webhooksRepository.countBy({ + userId: me.id, + }); + if (currentWebhooksCount > (await this.roleService.getUserRoleOptions(me.id)).webhookLimit) { + throw new ApiError(meta.errors.tooManyWebhooks); + } + const webhook = await this.webhooksRepository.insert({ id: this.idService.genId(), createdAt: new Date(), |