summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/admin
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-11-14 07:58:18 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-11-14 07:58:18 +0900
commit2d2eefe3d44ad7118bbe39d5acb1301ed802522e (patch)
treed961b9b0ab3bed7eed1efe0470b61eb381add724 /packages/backend/src/server/api/endpoints/admin
parentdocs: Update Code of Conduct to version 2.1 (#12150) (diff)
downloadsharkey-2d2eefe3d44ad7118bbe39d5acb1301ed802522e.tar.gz
sharkey-2d2eefe3d44ad7118bbe39d5acb1301ed802522e.tar.bz2
sharkey-2d2eefe3d44ad7118bbe39d5acb1301ed802522e.zip
feat: メールアドレスを使用してユーザー名を割り出す機能
Resolve #10158
Diffstat (limited to 'packages/backend/src/server/api/endpoints/admin')
-rw-r--r--packages/backend/src/server/api/endpoints/admin/accounts/find-by-email.ts61
1 files changed, 61 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/endpoints/admin/accounts/find-by-email.ts b/packages/backend/src/server/api/endpoints/admin/accounts/find-by-email.ts
new file mode 100644
index 0000000000..686341582b
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/admin/accounts/find-by-email.ts
@@ -0,0 +1,61 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import type { UserProfilesRepository } from '@/models/_.js';
+import { DI } from '@/di-symbols.js';
+import { UserEntityService } from '@/core/entities/UserEntityService.js';
+import { ApiError } from '@/server/api/error.js';
+
+export const meta = {
+ tags: ['admin'],
+
+ requireCredential: true,
+ requireAdmin: true,
+
+ errors: {
+ userNotFound: {
+ message: 'No such user who has the email address.',
+ code: 'USER_NOT_FOUND',
+ id: 'cb865949-8af5-4062-a88c-ef55e8786d1d',
+ },
+ },
+} as const;
+
+export const paramDef = {
+ type: 'object',
+ properties: {
+ email: { type: 'string' },
+ },
+ required: ['email'],
+} as const;
+
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-disable-line import/no-default-export
+ constructor(
+ @Inject(DI.userProfilesRepository)
+ private userProfilesRepository: UserProfilesRepository,
+
+ private userEntityService: UserEntityService,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ const profile = await this.userProfilesRepository.findOne({
+ where: { email: ps.email },
+ relations: ['user'],
+ });
+
+ if (profile == null) {
+ throw new ApiError(meta.errors.userNotFound);
+ }
+
+ const res = await this.userEntityService.pack(profile.user!, null, {
+ detail: true,
+ });
+
+ return res;
+ });
+ }
+}