Webhookの作成可能数を設定可能に
This commit is contained in:
		
							parent
							
								
									f45059b7b1
								
							
						
					
					
						commit
						bcb5182e86
					
				
					 6 changed files with 46 additions and 0 deletions
				
			
		|  | @ -76,6 +76,7 @@ You should also include the user name that made the change. | ||||||
| - 非モデレーターでも、権限を持つロールをアサインされたユーザーはインスタンスの招待コードを発行できるように @syuilo | - 非モデレーターでも、権限を持つロールをアサインされたユーザーはインスタンスの招待コードを発行できるように @syuilo | ||||||
| - 非モデレーターでも、権限を持つロールをアサインされたユーザーはカスタム絵文字の追加、編集、削除を行えるように @syuilo | - 非モデレーターでも、権限を持つロールをアサインされたユーザーはカスタム絵文字の追加、編集、削除を行えるように @syuilo | ||||||
| - ハードワードミュートの最大文字数を設定可能に @syuilo | - ハードワードミュートの最大文字数を設定可能に @syuilo | ||||||
|  | - Webhookの作成可能数を設定可能に @syuilo | ||||||
| - Server: signToActivityPubGet is set to true by default @syuilo | - Server: signToActivityPubGet is set to true by default @syuilo | ||||||
| - Server: improve syslog performance @syuilo | - Server: improve syslog performance @syuilo | ||||||
| - Server: Use undici instead of node-fetch and got @tamaina | - Server: Use undici instead of node-fetch and got @tamaina | ||||||
|  |  | ||||||
|  | @ -963,6 +963,7 @@ _role: | ||||||
|     driveCapacity: "ドライブ容量" |     driveCapacity: "ドライブ容量" | ||||||
|     antennaMax: "アンテナの作成可能数" |     antennaMax: "アンテナの作成可能数" | ||||||
|     wordMuteMax: "ワードミュートの最大文字数" |     wordMuteMax: "ワードミュートの最大文字数" | ||||||
|  |     webhookMax: "Webhookの作成可能数" | ||||||
|   _condition: |   _condition: | ||||||
|     isLocal: "ローカルユーザー" |     isLocal: "ローカルユーザー" | ||||||
|     isRemote: "リモートユーザー" |     isRemote: "リモートユーザー" | ||||||
|  |  | ||||||
|  | @ -22,6 +22,7 @@ export type RoleOptions = { | ||||||
| 	driveCapacityMb: number; | 	driveCapacityMb: number; | ||||||
| 	antennaLimit: number; | 	antennaLimit: number; | ||||||
| 	wordMuteLimit: number; | 	wordMuteLimit: number; | ||||||
|  | 	webhookLimit: number; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export const DEFAULT_ROLE: RoleOptions = { | export const DEFAULT_ROLE: RoleOptions = { | ||||||
|  | @ -33,6 +34,7 @@ export const DEFAULT_ROLE: RoleOptions = { | ||||||
| 	driveCapacityMb: 100, | 	driveCapacityMb: 100, | ||||||
| 	antennaLimit: 5, | 	antennaLimit: 5, | ||||||
| 	wordMuteLimit: 200, | 	wordMuteLimit: 200, | ||||||
|  | 	webhookLimit: 3, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @Injectable() | @Injectable() | ||||||
|  | @ -203,6 +205,7 @@ export class RoleService implements OnApplicationShutdown { | ||||||
| 			driveCapacityMb: Math.max(...getOptionValues('driveCapacityMb')), | 			driveCapacityMb: Math.max(...getOptionValues('driveCapacityMb')), | ||||||
| 			antennaLimit: Math.max(...getOptionValues('antennaLimit')), | 			antennaLimit: Math.max(...getOptionValues('antennaLimit')), | ||||||
| 			wordMuteLimit: Math.max(...getOptionValues('wordMuteLimit')), | 			wordMuteLimit: Math.max(...getOptionValues('wordMuteLimit')), | ||||||
|  | 			webhookLimit: Math.max(...getOptionValues('webhookLimit')), | ||||||
| 		}; | 		}; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,6 +5,7 @@ import type { WebhooksRepository } from '@/models/index.js'; | ||||||
| import { webhookEventTypes } from '@/models/entities/Webhook.js'; | import { webhookEventTypes } from '@/models/entities/Webhook.js'; | ||||||
| import { GlobalEventService } from '@/core/GlobalEventService.js'; | import { GlobalEventService } from '@/core/GlobalEventService.js'; | ||||||
| import { DI } from '@/di-symbols.js'; | import { DI } from '@/di-symbols.js'; | ||||||
|  | import { RoleService } from '@/core/RoleService.js'; | ||||||
| 
 | 
 | ||||||
| export const meta = { | export const meta = { | ||||||
| 	tags: ['webhooks'], | 	tags: ['webhooks'], | ||||||
|  | @ -12,6 +13,14 @@ export const meta = { | ||||||
| 	requireCredential: true, | 	requireCredential: true, | ||||||
| 
 | 
 | ||||||
| 	kind: 'write:account', | 	kind: 'write:account', | ||||||
|  | 
 | ||||||
|  | 	errors: { | ||||||
|  | 		tooManyWebhooks: { | ||||||
|  | 			message: 'You cannot create webhook any more.', | ||||||
|  | 			code: 'TOO_MANY_WEBHOOKS', | ||||||
|  | 			id: '87a9bb19-111e-4e37-81d3-a3e7426453b0', | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
| } as const; | } as const; | ||||||
| 
 | 
 | ||||||
| export const paramDef = { | export const paramDef = { | ||||||
|  | @ -38,8 +47,16 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { | ||||||
| 
 | 
 | ||||||
| 		private idService: IdService, | 		private idService: IdService, | ||||||
| 		private globalEventService: GlobalEventService, | 		private globalEventService: GlobalEventService, | ||||||
|  | 		private roleService: RoleService, | ||||||
| 	) { | 	) { | ||||||
| 		super(meta, paramDef, async (ps, me) => { | 		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({ | 			const webhook = await this.webhooksRepository.insert({ | ||||||
| 				id: this.idService.genId(), | 				id: this.idService.genId(), | ||||||
| 				createdAt: new Date(), | 				createdAt: new Date(), | ||||||
|  |  | ||||||
|  | @ -140,6 +140,18 @@ | ||||||
| 					</MkInput> | 					</MkInput> | ||||||
| 				</div> | 				</div> | ||||||
| 			</MkFolder> | 			</MkFolder> | ||||||
|  | 
 | ||||||
|  | 			<MkFolder> | ||||||
|  | 				<template #label>{{ i18n.ts._role._options.webhookMax }}</template> | ||||||
|  | 				<template #suffix>{{ options_webhookLimit_useDefault ? i18n.ts._role.useBaseValue : (options_webhookLimit_value) }}</template> | ||||||
|  | 				<div class="_gaps"> | ||||||
|  | 					<MkSwitch v-model="options_webhookLimit_useDefault" :readonly="readonly"> | ||||||
|  | 						<template #label>{{ i18n.ts._role.useBaseValue }}</template> | ||||||
|  | 					</MkSwitch> | ||||||
|  | 					<MkInput v-model="options_webhookLimit_value" :disabled="options_webhookLimit_useDefault" type="number" :readonly="readonly"> | ||||||
|  | 					</MkInput> | ||||||
|  | 				</div> | ||||||
|  | 			</MkFolder> | ||||||
| 		</div> | 		</div> | ||||||
| 	</FormSlot> | 	</FormSlot> | ||||||
| 
 | 
 | ||||||
|  | @ -209,6 +221,8 @@ let options_antennaLimit_useDefault = $ref(role?.options?.antennaLimit?.useDefau | ||||||
| let options_antennaLimit_value = $ref(role?.options?.antennaLimit?.value ?? 0); | let options_antennaLimit_value = $ref(role?.options?.antennaLimit?.value ?? 0); | ||||||
| let options_wordMuteLimit_useDefault = $ref(role?.options?.wordMuteLimit?.useDefault ?? true); | let options_wordMuteLimit_useDefault = $ref(role?.options?.wordMuteLimit?.useDefault ?? true); | ||||||
| let options_wordMuteLimit_value = $ref(role?.options?.wordMuteLimit?.value ?? 0); | let options_wordMuteLimit_value = $ref(role?.options?.wordMuteLimit?.value ?? 0); | ||||||
|  | let options_webhookLimit_useDefault = $ref(role?.options?.webhookLimit?.useDefault ?? true); | ||||||
|  | let options_webhookLimit_value = $ref(role?.options?.webhookLimit?.value ?? 0); | ||||||
| 
 | 
 | ||||||
| if (_DEV_) { | if (_DEV_) { | ||||||
| 	watch($$(condFormula), () => { | 	watch($$(condFormula), () => { | ||||||
|  | @ -226,6 +240,7 @@ function getOptions() { | ||||||
| 		driveCapacityMb: { useDefault: options_driveCapacityMb_useDefault, value: options_driveCapacityMb_value }, | 		driveCapacityMb: { useDefault: options_driveCapacityMb_useDefault, value: options_driveCapacityMb_value }, | ||||||
| 		antennaLimit: { useDefault: options_antennaLimit_useDefault, value: options_antennaLimit_value }, | 		antennaLimit: { useDefault: options_antennaLimit_useDefault, value: options_antennaLimit_value }, | ||||||
| 		wordMuteLimit: { useDefault: options_wordMuteLimit_useDefault, value: options_wordMuteLimit_value }, | 		wordMuteLimit: { useDefault: options_wordMuteLimit_useDefault, value: options_wordMuteLimit_value }, | ||||||
|  | 		webhookLimit: { useDefault: options_webhookLimit_useDefault, value: options_webhookLimit_value }, | ||||||
| 	}; | 	}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -71,6 +71,13 @@ | ||||||
| 							</MkInput> | 							</MkInput> | ||||||
| 						</MkFolder> | 						</MkFolder> | ||||||
| 
 | 
 | ||||||
|  | 						<MkFolder> | ||||||
|  | 							<template #label>{{ i18n.ts._role._options.webhookMax }}</template> | ||||||
|  | 							<template #suffix>{{ options_webhookLimit }}</template> | ||||||
|  | 							<MkInput v-model="options_webhookLimit" type="number"> | ||||||
|  | 							</MkInput> | ||||||
|  | 						</MkFolder> | ||||||
|  | 
 | ||||||
| 						<MkButton primary rounded @click="updateBaseRole">{{ i18n.ts.save }}</MkButton> | 						<MkButton primary rounded @click="updateBaseRole">{{ i18n.ts.save }}</MkButton> | ||||||
| 					</div> | 					</div> | ||||||
| 				</MkFolder> | 				</MkFolder> | ||||||
|  | @ -111,6 +118,7 @@ let options_canManageCustomEmojis = $ref(instance.baseRole.canManageCustomEmojis | ||||||
| let options_driveCapacityMb = $ref(instance.baseRole.driveCapacityMb); | let options_driveCapacityMb = $ref(instance.baseRole.driveCapacityMb); | ||||||
| let options_antennaLimit = $ref(instance.baseRole.antennaLimit); | let options_antennaLimit = $ref(instance.baseRole.antennaLimit); | ||||||
| let options_wordMuteLimit = $ref(instance.baseRole.wordMuteLimit); | let options_wordMuteLimit = $ref(instance.baseRole.wordMuteLimit); | ||||||
|  | let options_webhookLimit = $ref(instance.baseRole.webhookLimit); | ||||||
| 
 | 
 | ||||||
| async function updateBaseRole() { | async function updateBaseRole() { | ||||||
| 	await os.apiWithDialog('admin/roles/update-default-role-override', { | 	await os.apiWithDialog('admin/roles/update-default-role-override', { | ||||||
|  | @ -123,6 +131,7 @@ async function updateBaseRole() { | ||||||
| 			driveCapacityMb: options_driveCapacityMb, | 			driveCapacityMb: options_driveCapacityMb, | ||||||
| 			antennaLimit: options_antennaLimit, | 			antennaLimit: options_antennaLimit, | ||||||
| 			wordMuteLimit: options_wordMuteLimit, | 			wordMuteLimit: options_wordMuteLimit, | ||||||
|  | 			webhookLimit: options_webhookLimit, | ||||||
| 		}, | 		}, | ||||||
| 	}); | 	}); | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue