summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/admin/accounts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2022-09-18 03:27:08 +0900
committerGitHub <noreply@github.com>2022-09-18 03:27:08 +0900
commitb75184ec8e3436200bacdcd832e3324702553d20 (patch)
tree8b7e316f29e95df921db57289c8b8da476d18f07 /packages/backend/src/server/api/endpoints/admin/accounts
parentUpdate ROADMAP.md (diff)
downloadmisskey-b75184ec8e3436200bacdcd832e3324702553d20.tar.gz
misskey-b75184ec8e3436200bacdcd832e3324702553d20.tar.bz2
misskey-b75184ec8e3436200bacdcd832e3324702553d20.zip
なんかもうめっちゃ変えた
Diffstat (limited to 'packages/backend/src/server/api/endpoints/admin/accounts')
-rw-r--r--packages/backend/src/server/api/endpoints/admin/accounts/create.ts59
-rw-r--r--packages/backend/src/server/api/endpoints/admin/accounts/delete.ts82
2 files changed, 85 insertions, 56 deletions
diff --git a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts
index 5f89219991..1b173379a0 100644
--- a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts
+++ b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts
@@ -1,7 +1,11 @@
-import define from '../../../define.js';
-import { Users } from '@/models/index.js';
-import { signup } from '../../../common/signup.js';
+import { Inject, Injectable } from '@nestjs/common';
import { IsNull } from 'typeorm';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { UsersRepository } from '@/models/index.js';
+import { SignupService } from '@/core/SignupService.js';
+import { UserEntityService } from '@/core/entities/UserEntityService.js';
+import { localUsernameSchema, passwordSchema } from '@/models/entities/User.js';
+import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
@@ -22,31 +26,42 @@ export const meta = {
export const paramDef = {
type: 'object',
properties: {
- username: Users.localUsernameSchema,
- password: Users.passwordSchema,
+ username: localUsernameSchema,
+ password: passwordSchema,
},
required: ['username', 'password'],
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps, _me) => {
- const me = _me ? await Users.findOneByOrFail({ id: _me.id }) : null;
- const noUsers = (await Users.countBy({
- host: IsNull(),
- })) === 0;
- if (!noUsers && !me?.isAdmin) throw new Error('access denied');
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.usersRepository)
+ private usersRepository: UsersRepository,
- const { account, secret } = await signup({
- username: ps.username,
- password: ps.password,
- });
+ private userEntityService: UserEntityService,
+ private signupService: SignupService,
+ ) {
+ super(meta, paramDef, async (ps, _me) => {
+ const me = _me ? await this.usersRepository.findOneByOrFail({ id: _me.id }) : null;
+ const noUsers = (await this.usersRepository.countBy({
+ host: IsNull(),
+ })) === 0;
+ if (!noUsers && !me?.isAdmin) throw new Error('access denied');
- const res = await Users.pack(account, account, {
- detail: true,
- includeSecrets: true,
- });
+ const { account, secret } = await this.signupService.signup({
+ username: ps.username,
+ password: ps.password,
+ });
- (res as any).token = secret;
+ const res = await this.userEntityService.pack(account, account, {
+ detail: true,
+ includeSecrets: true,
+ });
- return res;
-});
+ (res as any).token = secret;
+
+ return res;
+ });
+ }
+}
diff --git a/packages/backend/src/server/api/endpoints/admin/accounts/delete.ts b/packages/backend/src/server/api/endpoints/admin/accounts/delete.ts
index 629d700582..2e0222f0c6 100644
--- a/packages/backend/src/server/api/endpoints/admin/accounts/delete.ts
+++ b/packages/backend/src/server/api/endpoints/admin/accounts/delete.ts
@@ -1,8 +1,10 @@
-import define from '../../../define.js';
-import { Users } from '@/models/index.js';
-import { doPostSuspend } from '@/services/suspend-user.js';
-import { publishUserEvent } from '@/services/stream.js';
-import { createDeleteAccountJob } from '@/queue/index.js';
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { UsersRepository } from '@/models/index.js';
+import { QueueService } from '@/core/QueueService.js';
+import { GlobalEventService } from '@/core/GlobalEventService.js';
+import { UserSuspendService } from '@/core/UserSuspendService.js';
+import { DI } from '@/di-symbols.js';
export const meta = {
tags: ['admin'],
@@ -20,40 +22,52 @@ export const paramDef = {
} as const;
// eslint-disable-next-line import/no-default-export
-export default define(meta, paramDef, async (ps, me) => {
- const user = await Users.findOneBy({ id: ps.userId });
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> {
+ constructor(
+ @Inject(DI.usersRepository)
+ private usersRepository: UsersRepository,
- if (user == null) {
- throw new Error('user not found');
- }
+ private queueService: QueueService,
+ private globalEventService: GlobalEventService,
+ private userSuspendService: UserSuspendService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const user = await this.usersRepository.findOneBy({ id: ps.userId });
- if (user.isAdmin) {
- throw new Error('cannot suspend admin');
- }
+ if (user == null) {
+ throw new Error('user not found');
+ }
- if (user.isModerator) {
- throw new Error('cannot suspend moderator');
- }
+ if (user.isAdmin) {
+ throw new Error('cannot suspend admin');
+ }
- if (Users.isLocalUser(user)) {
- // 物理削除する前にDelete activityを送信する
- await doPostSuspend(user).catch(e => {});
+ if (user.isModerator) {
+ throw new Error('cannot suspend moderator');
+ }
- createDeleteAccountJob(user, {
- soft: false,
- });
- } else {
- createDeleteAccountJob(user, {
- soft: true, // リモートユーザーの削除は、完全にDBから物理削除してしまうと再度連合してきてアカウントが復活する可能性があるため、soft指定する
- });
- }
+ if (this.userEntityService.isLocalUser(user)) {
+ // 物理削除する前にDelete activityを送信する
+ await this.userSuspendService.doPostSuspend(user).catch(err => {});
- await Users.update(user.id, {
- isDeleted: true,
- });
+ this.queueService.createDeleteAccountJob(user, {
+ soft: false,
+ });
+ } else {
+ this.queueService.createDeleteAccountJob(user, {
+ soft: true, // リモートユーザーの削除は、完全にDBから物理削除してしまうと再度連合してきてアカウントが復活する可能性があるため、soft指定する
+ });
+ }
- if (Users.isLocalUser(user)) {
- // Terminate streaming
- publishUserEvent(user.id, 'terminate', {});
+ await this.usersRepository.update(user.id, {
+ isDeleted: true,
+ });
+
+ if (this.userEntityService.isLocalUser(user)) {
+ // Terminate streaming
+ this.globalEventService.publishUserEvent(user.id, 'terminate', {});
+ }
+ });
}
-});
+}