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 ada3607519..5d58cd6fa2 100644 --- a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts +++ b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts @@ -70,19 +70,22 @@ export default class extends Endpoint { // eslint- private instanceActorService: InstanceActorService, ) { super(meta, paramDef, async (ps, _me, token) => { - if (ps.initialPassword != null && this.config.initialPassword != null) { - if (ps.initialPassword !== this.config.initialPassword) { - // 初期パスワードが違う場合 - throw new ApiError(meta.errors.wrongInitialPassword); - } - } else if (this.config.initialPassword == null && (ps.initialPassword != null && ps.initialPassword.trim() !== '')) { - // 初期パスワードが設定されていないのに初期パスワードが入力された場合 - throw new ApiError(meta.errors.wrongInitialPassword); - } - const me = _me ? await this.usersRepository.findOneByOrFail({ id: _me.id }) : null; const realUsers = await this.instanceActorService.realLocalUsersPresent(); - if ((realUsers && !me?.isRoot) || token !== null) { + + if (!realUsers && me == null && token == null) { + // 初回セットアップの場合 + if (ps.initialPassword != null && this.config.initialPassword != null) { + if (ps.initialPassword !== this.config.initialPassword) { + // 初期パスワードが違う場合 + throw new ApiError(meta.errors.wrongInitialPassword); + } + } else if (this.config.initialPassword == null && (ps.initialPassword != null && ps.initialPassword.trim() !== '')) { + // 初期パスワードが設定されていないのに初期パスワードが入力された場合 + throw new ApiError(meta.errors.wrongInitialPassword); + } + } else if ((realUsers && !me?.isRoot) || token !== null) { + // 初回セットアップではなく、管理者でない場合 throw new ApiError(meta.errors.accessDenied); }