From a4a1b8bb8b9db72e7be45bf44fd19b36fa8e81f4 Mon Sep 17 00:00:00 2001 From: Mar0xy Date: Wed, 18 Oct 2023 13:34:16 +0200 Subject: add: isSilenced handling to user and timeline --- .../src/server/api/endpoints/admin/silence-user.ts | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 packages/backend/src/server/api/endpoints/admin/silence-user.ts (limited to 'packages/backend/src/server/api/endpoints/admin/silence-user.ts') diff --git a/packages/backend/src/server/api/endpoints/admin/silence-user.ts b/packages/backend/src/server/api/endpoints/admin/silence-user.ts new file mode 100644 index 0000000000..ed1141da43 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/admin/silence-user.ts @@ -0,0 +1,46 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import type { UsersRepository } from '@/models/_.js'; +import { DI } from '@/di-symbols.js'; +import { RoleService } from '@/core/RoleService.js'; + +export const meta = { + tags: ['admin'], + + requireCredential: true, + requireModerator: true, +} as const; + +export const paramDef = { + type: 'object', + properties: { + userId: { type: 'string', format: 'misskey:id' }, + }, + required: ['userId'], +} as const; + +@Injectable() +export default class extends Endpoint { // eslint-disable-line import/no-default-export + constructor( + @Inject(DI.usersRepository) + private usersRepository: UsersRepository, + + private roleService: RoleService, + ) { + super(meta, paramDef, async (ps, me) => { + const user = await this.usersRepository.findOneBy({ id: ps.userId }); + + if (user == null) { + throw new Error('user not found'); + } + + if (await this.roleService.isModerator(user)) { + throw new Error('cannot silence moderator account'); + } + + await this.usersRepository.update(user.id, { + isSilenced: true, + }); + }); + } +} -- cgit v1.2.3-freya