From bcb5182e8686dcb517defe56a18324fb0ec72027 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 14 Jan 2023 10:48:11 +0900 Subject: Webhookの作成可能数を設定可能に MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/server/api/endpoints/i/webhooks/create.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'packages/backend/src/server/api/endpoints/i/webhooks') 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 { 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(), -- cgit v1.2.3-freya