diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2025-08-21 16:52:30 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-21 16:52:30 +0900 |
| commit | 7f6ba2e50128182258b92a8572700d14a05a9f8b (patch) | |
| tree | 03739b4016dd893d38e0c66c39511aae6c3b68ef /packages/backend/src/server/api/endpoints/verify-email.ts | |
| parent | Bump version to 2025.8.0-beta.2 (diff) | |
| download | misskey-7f6ba2e50128182258b92a8572700d14a05a9f8b.tar.gz misskey-7f6ba2e50128182258b92a8572700d14a05a9f8b.tar.bz2 misskey-7f6ba2e50128182258b92a8572700d14a05a9f8b.zip | |
enhance: verify-emailにフロントエンドUIを実装 (#16431)
* enhance: メールのverifyをAPIに変更
* enhance(frontend): メールのVerifyページを追加
* fix
* :art:
* :art:
* Update Changelog
* lint
Diffstat (limited to 'packages/backend/src/server/api/endpoints/verify-email.ts')
| -rw-r--r-- | packages/backend/src/server/api/endpoints/verify-email.ts | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/endpoints/verify-email.ts b/packages/backend/src/server/api/endpoints/verify-email.ts new file mode 100644 index 0000000000..e069ed59f2 --- /dev/null +++ b/packages/backend/src/server/api/endpoints/verify-email.ts @@ -0,0 +1,66 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * 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 { UserEntityService } from '@/core/entities/UserEntityService.js'; +import { DI } from '@/di-symbols.js'; +import { GlobalEventService } from '@/core/GlobalEventService.js'; +import { ApiError } from '../error.js'; + +export const meta = { + requireCredential: false, + + tags: ['account'], + + errors: { + noSuchCode: { + message: 'No such code.', + code: 'NO_SUCH_CODE', + id: '97c1f576-e4b8-4b8a-a6dc-9cb65e7f6f85', + }, + }, +} as const; + +export const paramDef = { + type: 'object', + properties: { + code: { type: 'string' }, + }, + required: ['code'], +} 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, + private globalEventService: GlobalEventService, + ) { + super(meta, paramDef, async (ps) => { + const profile = await this.userProfilesRepository.findOneBy({ + emailVerifyCode: ps.code, + }); + + if (profile == null) { + throw new ApiError(meta.errors.noSuchCode); + } + + await this.userProfilesRepository.update({ userId: profile.userId }, { + emailVerified: true, + emailVerifyCode: null, + }); + + this.globalEventService.publishMainStream(profile.userId, 'meUpdated', await this.userEntityService.pack(profile.userId, { id: profile.userId }, { + schema: 'MeDetailed', + includeSecrets: true, + })); + }); + } +} + |