From 1f2012fa43b7f23223ebc0d5708f49ded052727a Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:30:11 +0900 Subject: [PATCH 01/18] =?UTF-8?q?feat:=20=E3=82=B5=E3=83=BC=E3=83=90?= =?UTF-8?q?=E3=83=BC=E5=88=9D=E6=9C=9F=E8=A8=AD=E5=AE=9A=E6=99=82=E5=B0=82?= =?UTF-8?q?=E7=94=A8=E3=81=AE=E5=88=9D=E6=9C=9F=E3=83=91=E3=82=B9=E3=83=AF?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=82=92=E8=A8=AD=E5=AE=9A=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .config/example.yml | 13 ++++++++ cypress/e2e/basic.cy.ts | 1 + locales/index.d.ts | 10 +++++++ locales/ja-JP.yml | 3 ++ packages/backend/src/config.ts | 4 +++ .../api/endpoints/admin/accounts/create.ts | 30 ++++++++++++++++++- packages/frontend/src/pages/welcome.setup.vue | 26 +++++++++++++--- packages/misskey-js/src/autogen/types.ts | 1 + 8 files changed, 83 insertions(+), 5 deletions(-) diff --git a/.config/example.yml b/.config/example.yml index 7080159117ac..d66c00221c9a 100644 --- a/.config/example.yml +++ b/.config/example.yml @@ -59,6 +59,19 @@ # # publishTarballInsteadOfProvideRepositoryUrl: true +# ┌───────────────┐ +#───┘ Initial Setup Password └───────────────────────────────────────────────────── + +# Password to initiate setting up admin account. +# It will not be used after the initial setup is complete. +# +# Be sure to change this when you set up Misskey via the Internet. +# +# The provider of the service who sets up Misskey on behalf of the customer should +# set this value to something unique when generating the Misskey config file, +# and provide it to the customer. +initialPassword: example_password_please_change_this_or_you_will_get_hacked + # ┌─────┐ #───┘ URL └───────────────────────────────────────────────────── diff --git a/cypress/e2e/basic.cy.ts b/cypress/e2e/basic.cy.ts index d2525e0a7d05..e4baeacbf341 100644 --- a/cypress/e2e/basic.cy.ts +++ b/cypress/e2e/basic.cy.ts @@ -23,6 +23,7 @@ describe('Before setup instance', () => { cy.intercept('POST', '/api/admin/accounts/create').as('signup'); + cy.get('[data-cy-admin-initial-password] input').type('example_password_please_change_this_or_you_will_get_hacked'); cy.get('[data-cy-admin-username] input').type('admin'); cy.get('[data-cy-admin-password] input').type('admin1234'); cy.get('[data-cy-admin-ok]').click(); diff --git a/locales/index.d.ts b/locales/index.d.ts index 2a27eb3e15fa..50b14defa4d9 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -48,6 +48,16 @@ export interface Locale extends ILocale { * パスワード */ "password": string; + /** + * 初期設定開始用パスワード + */ + "initialPasswordForSetup": string; + /** + * Misskeyの動作環境を自分で構築した場合は、コンフィグファイルにパスワードが記載されています。 + * Misskeyの構築を自動で行うサービスなどを使用している場合は、(おそらく)その提供者から初期設定用のパスワードを入手できるはずです。 + * このパスワードをコンフィグファイルに設定していない場合は、空欄にしたまま続行してください。 + */ + "initialPasswordForSetupDescription": string; /** * パスワードを忘れた */ diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 80cd8dc7cc32..a576d3496a2f 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -8,6 +8,9 @@ search: "検索" notifications: "通知" username: "ユーザー名" password: "パスワード" +initialPasswordForSetup: "初期設定開始用パスワード" +initialPasswordIsIncorrect: "初期設定開始用のパスワードが違います。" +initialPasswordForSetupDescription: "Misskeyの動作環境を自分で構築した場合は、コンフィグファイルにパスワードが記載されています。\nMisskeyの構築を自動で行うサービスなどを使用している場合は、(おそらく)その提供者から初期設定用のパスワードを入手できるはずです。\nこのパスワードをコンフィグファイルに設定していない場合は、空欄にしたまま続行してください。" forgotPassword: "パスワードを忘れた" fetchingAsApObject: "連合に照会中" ok: "OK" diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts index 97ba79c5743b..b320ce5403d0 100644 --- a/packages/backend/src/config.ts +++ b/packages/backend/src/config.ts @@ -63,6 +63,8 @@ type Source = { publishTarballInsteadOfProvideRepositoryUrl?: boolean; + initialPassword?: string; + proxy?: string; proxySmtp?: string; proxyBypassHosts?: string[]; @@ -152,6 +154,7 @@ export type Config = { version: string; publishTarballInsteadOfProvideRepositoryUrl: boolean; + initialPassword: string | undefined; host: string; hostname: string; scheme: string; @@ -232,6 +235,7 @@ export function loadConfig(): Config { return { version, publishTarballInsteadOfProvideRepositoryUrl: !!config.publishTarballInsteadOfProvideRepositoryUrl, + initialPassword: config.initialPassword, url: url.origin, port: config.port ?? parseInt(process.env.PORT ?? '', 10), socket: config.socket, 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 a7e8a3b018cd..a9cc39922535 100644 --- a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts +++ b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts @@ -12,11 +12,27 @@ import { UserEntityService } from '@/core/entities/UserEntityService.js'; import { InstanceActorService } from '@/core/InstanceActorService.js'; import { localUsernameSchema, passwordSchema } from '@/models/User.js'; import { DI } from '@/di-symbols.js'; +import type { Config } from '@/config.js'; +import { ApiError } from '@/server/api/error.js'; import { Packed } from '@/misc/json-schema.js'; export const meta = { tags: ['admin'], + errors: { + accessDenied: { + message: 'Access denied.', + code: 'ACCESS_DENIED', + id: '1fb7cb09-d46a-4fff-b8df-057708cce513', + }, + + wrongInitialPassword: { + message: 'Initial password is wrong.', + code: 'WRONG_INITIAL_PASSWORD', + id: '1fb7cb09-d46a-4fff-b8df-057708cce514', + }, + }, + res: { type: 'object', optional: false, nullable: false, @@ -35,6 +51,7 @@ export const paramDef = { properties: { username: localUsernameSchema, password: passwordSchema, + initialPassword: { type: 'string', nullable: true }, }, required: ['username', 'password'], } as const; @@ -42,6 +59,9 @@ export const paramDef = { @Injectable() export default class extends Endpoint { // eslint-disable-line import/no-default-export constructor( + @Inject(DI.config) + private config: Config, + @Inject(DI.usersRepository) private usersRepository: UsersRepository, @@ -50,9 +70,17 @@ 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); + } + } + const me = _me ? await this.usersRepository.findOneByOrFail({ id: _me.id }) : null; const realUsers = await this.instanceActorService.realLocalUsersPresent(); - if ((realUsers && !me?.isRoot) || token !== null) throw new Error('access denied'); + if ((realUsers && !me?.isRoot) || token !== null) { + throw new ApiError(meta.errors.accessDenied); + } const { account, secret } = await this.signupService.signup({ username: ps.username, diff --git a/packages/frontend/src/pages/welcome.setup.vue b/packages/frontend/src/pages/welcome.setup.vue index a227c7c4bc16..bbf1391a1efa 100644 --- a/packages/frontend/src/pages/welcome.setup.vue +++ b/packages/frontend/src/pages/welcome.setup.vue @@ -14,6 +14,10 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.intro }}
+ + + + @@ -47,6 +51,7 @@ import MkAnimBg from '@/components/MkAnimBg.vue'; const username = ref(''); const password = ref(''); +const initialPassword = ref(''); const submitting = ref(false); function submit() { @@ -56,14 +61,27 @@ function submit() { misskeyApi('admin/accounts/create', { username: username.value, password: password.value, + initialPassword: initialPassword.value === '' ? null : initialPassword.value, }).then(res => { return login(res.token); - }).catch(() => { + }).catch((err) => { submitting.value = false; + let title = i18n.ts.somethingHappened; + let text = err.message + '\n' + err.id; + + if (err.code === 'ACCESS_DENIED') { + title = i18n.ts.permissionDeniedError; + text = i18n.ts.operationForbidden; + } else if (err.code === 'WRONG_INITIAL_PASSWORD') { + title = i18n.ts.permissionDeniedError; + text = i18n.ts.incorrectPassword; + } + os.alert({ type: 'error', - text: i18n.ts.somethingHappened, + title, + text, }); }); } @@ -74,8 +92,8 @@ function submit() { min-height: 100svh; padding: 32px 32px 64px 32px; box-sizing: border-box; -display: grid; -place-content: center; + display: grid; + place-content: center; } .form { diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index 5d5bc52956f3..7f388f7943ea 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -5588,6 +5588,7 @@ export type operations = { 'application/json': { username: string; password: string; + initialPassword?: string | null; }; }; }; From e4316d3ba47615fee879ad3d0179e0e764e2fdca Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:35:55 +0900 Subject: [PATCH 02/18] =?UTF-8?q?=E7=84=A1=E3=81=84=E3=81=AE=E3=81=AB?= =?UTF-8?q?=E5=85=A5=E5=8A=9B=E3=81=95=E3=82=8C=E3=81=9F=E5=A0=B4=E5=90=88?= =?UTF-8?q?=E3=82=82=E3=82=A8=E3=83=A9=E3=83=BC=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/src/server/api/endpoints/admin/accounts/create.ts | 4 ++++ 1 file changed, 4 insertions(+) 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 a9cc39922535..235cca4f3891 100644 --- a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts +++ b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts @@ -72,8 +72,12 @@ export default class extends Endpoint { // eslint- 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; From 21b4b7d72f56d57ff2816dd58ff370b6a2d7f420 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:36:36 +0900 Subject: [PATCH 03/18] :art: --- locales/index.d.ts | 6 +++++- locales/ja-JP.yml | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/locales/index.d.ts b/locales/index.d.ts index 50b14defa4d9..8e4499b28a5f 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -52,10 +52,14 @@ export interface Locale extends ILocale { * 初期設定開始用パスワード */ "initialPasswordForSetup": string; + /** + * 初期設定開始用のパスワードが違います。 + */ + "initialPasswordIsIncorrect": string; /** * Misskeyの動作環境を自分で構築した場合は、コンフィグファイルにパスワードが記載されています。 * Misskeyの構築を自動で行うサービスなどを使用している場合は、(おそらく)その提供者から初期設定用のパスワードを入手できるはずです。 - * このパスワードをコンフィグファイルに設定していない場合は、空欄にしたまま続行してください。 + * 初期設定用パスワードをコンフィグファイルに設定していない場合は、空欄にしたまま続行してください。 */ "initialPasswordForSetupDescription": string; /** diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index a576d3496a2f..3d5f86ccb3f2 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -10,7 +10,7 @@ username: "ユーザー名" password: "パスワード" initialPasswordForSetup: "初期設定開始用パスワード" initialPasswordIsIncorrect: "初期設定開始用のパスワードが違います。" -initialPasswordForSetupDescription: "Misskeyの動作環境を自分で構築した場合は、コンフィグファイルにパスワードが記載されています。\nMisskeyの構築を自動で行うサービスなどを使用している場合は、(おそらく)その提供者から初期設定用のパスワードを入手できるはずです。\nこのパスワードをコンフィグファイルに設定していない場合は、空欄にしたまま続行してください。" +initialPasswordForSetupDescription: "Misskeyの動作環境を自分で構築した場合は、コンフィグファイルにパスワードが記載されています。\nMisskeyの構築を自動で行うサービスなどを使用している場合は、(おそらく)その提供者から初期設定用のパスワードを入手できるはずです。\n初期設定用パスワードをコンフィグファイルに設定していない場合は、空欄にしたまま続行してください。" forgotPassword: "パスワードを忘れた" fetchingAsApObject: "連合に照会中" ok: "OK" From d6dee34b443f98f5e337ad6416caef34d885524b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:38:11 +0900 Subject: [PATCH 04/18] :art: --- .config/example.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/example.yml b/.config/example.yml index d66c00221c9a..fbc4cdff4b44 100644 --- a/.config/example.yml +++ b/.config/example.yml @@ -59,7 +59,7 @@ # # publishTarballInsteadOfProvideRepositoryUrl: true -# ┌───────────────┐ +# ┌────────────────────────┐ #───┘ Initial Setup Password └───────────────────────────────────────────────────── # Password to initiate setting up admin account. From 8076f07b005d1a44f5ac4aa9966490120ff11371 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:39:29 +0900 Subject: [PATCH 05/18] =?UTF-8?q?cypress-devcontainer=E3=81=AB=E3=82=82pas?= =?UTF-8?q?s=E3=82=92=E8=A8=AD=E5=AE=9A=EF=BC=88=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=81=8C=E5=A4=B1=E6=95=97=E3=81=99=E3=82=8B=E3=81=9F?= =?UTF-8?q?=E3=82=81=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .config/cypress-devcontainer.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.config/cypress-devcontainer.yml b/.config/cypress-devcontainer.yml index 91dce3515585..ef72ad28d074 100644 --- a/.config/cypress-devcontainer.yml +++ b/.config/cypress-devcontainer.yml @@ -2,6 +2,19 @@ # Misskey configuration #━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +# ┌───────────────┐ +#───┘ Initial Setup Password └───────────────────────────────────────────────────── + +# Password to initiate setting up admin account. +# It will not be used after the initial setup is complete. +# +# Be sure to change this when you set up Misskey via the Internet. +# +# The provider of the service who sets up Misskey on behalf of the customer should +# set this value to something unique when generating the Misskey config file, +# and provide it to the customer. +initialPassword: example_password_please_change_this_or_you_will_get_hacked + # ┌─────┐ #───┘ URL └───────────────────────────────────────────────────── From 910a743600dfb886a5380d6e532fd29d3628eff8 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:42:37 +0900 Subject: [PATCH 06/18] [ci skip] :art: --- .config/cypress-devcontainer.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/cypress-devcontainer.yml b/.config/cypress-devcontainer.yml index ef72ad28d074..64988aff66dc 100644 --- a/.config/cypress-devcontainer.yml +++ b/.config/cypress-devcontainer.yml @@ -2,7 +2,7 @@ # Misskey configuration #━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -# ┌───────────────┐ +# ┌────────────────────────┐ #───┘ Initial Setup Password └───────────────────────────────────────────────────── # Password to initiate setting up admin account. From 4d93fe6a13bba704e62deb24b9774dc6d8363070 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:51:56 +0900 Subject: [PATCH 07/18] :v: --- .../backend/src/server/api/endpoints/admin/accounts/create.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 235cca4f3891..ada3607519e7 100644 --- a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts +++ b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts @@ -29,7 +29,7 @@ export const meta = { wrongInitialPassword: { message: 'Initial password is wrong.', code: 'WRONG_INITIAL_PASSWORD', - id: '1fb7cb09-d46a-4fff-b8df-057708cce514', + id: '97147c55-1ae1-4f6f-91d6-e1c3e0e76d62', }, }, From 66b2b48f66830d2450d8cda03955c143feba76c7 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:53:10 +0900 Subject: [PATCH 08/18] test: please revert this commit before merge --- cypress/e2e/basic.cy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/e2e/basic.cy.ts b/cypress/e2e/basic.cy.ts index e4baeacbf341..5758aecaff85 100644 --- a/cypress/e2e/basic.cy.ts +++ b/cypress/e2e/basic.cy.ts @@ -23,7 +23,7 @@ describe('Before setup instance', () => { cy.intercept('POST', '/api/admin/accounts/create').as('signup'); - cy.get('[data-cy-admin-initial-password] input').type('example_password_please_change_this_or_you_will_get_hacked'); + cy.get('[data-cy-admin-initial-password] input').type('example_password_please_change_or_you_will_get_hacked'); cy.get('[data-cy-admin-username] input').type('admin'); cy.get('[data-cy-admin-password] input').type('admin1234'); cy.get('[data-cy-admin-ok]').click(); From 7f16f5b47f15349c9bf5d126d0832eb18731437e Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:58:23 +0900 Subject: [PATCH 09/18] Revert "test: please revert this commit before merge" This reverts commit 66b2b48f66830d2450d8cda03955c143feba76c7. --- cypress/e2e/basic.cy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/e2e/basic.cy.ts b/cypress/e2e/basic.cy.ts index 5758aecaff85..e4baeacbf341 100644 --- a/cypress/e2e/basic.cy.ts +++ b/cypress/e2e/basic.cy.ts @@ -23,7 +23,7 @@ describe('Before setup instance', () => { cy.intercept('POST', '/api/admin/accounts/create').as('signup'); - cy.get('[data-cy-admin-initial-password] input').type('example_password_please_change_or_you_will_get_hacked'); + cy.get('[data-cy-admin-initial-password] input').type('example_password_please_change_this_or_you_will_get_hacked'); cy.get('[data-cy-admin-username] input').type('admin'); cy.get('[data-cy-admin-password] input').type('admin1234'); cy.get('[data-cy-admin-ok]').click(); From 581d572fdbfea4e6f7ed60c255bab211639f76fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:59:30 +0900 Subject: [PATCH 10/18] Update locales/ja-JP.yml Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com> --- locales/ja-JP.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 3d5f86ccb3f2..a8ad1d6e0e26 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -10,7 +10,7 @@ username: "ユーザー名" password: "パスワード" initialPasswordForSetup: "初期設定開始用パスワード" initialPasswordIsIncorrect: "初期設定開始用のパスワードが違います。" -initialPasswordForSetupDescription: "Misskeyの動作環境を自分で構築した場合は、コンフィグファイルにパスワードが記載されています。\nMisskeyの構築を自動で行うサービスなどを使用している場合は、(おそらく)その提供者から初期設定用のパスワードを入手できるはずです。\n初期設定用パスワードをコンフィグファイルに設定していない場合は、空欄にしたまま続行してください。" +initialPasswordForSetupDescription: "Misskeyを自分でインストールした場合は、設定ファイルに入力したパスワードを使用してください。\nMisskeyのホスティングサービスなどを使用している場合は、提供されたパスワードを使用してください。\nパスワードを設定していない場合は、空欄にしたまま続行してください。" forgotPassword: "パスワードを忘れた" fetchingAsApObject: "連合に照会中" ok: "OK" From be6111e306fe24e6afe0ede6611daefaba498684 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 10:59:47 +0900 Subject: [PATCH 11/18] build assets --- locales/index.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locales/index.d.ts b/locales/index.d.ts index 8e4499b28a5f..3749697bac04 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -57,9 +57,9 @@ export interface Locale extends ILocale { */ "initialPasswordIsIncorrect": string; /** - * Misskeyの動作環境を自分で構築した場合は、コンフィグファイルにパスワードが記載されています。 - * Misskeyの構築を自動で行うサービスなどを使用している場合は、(おそらく)その提供者から初期設定用のパスワードを入手できるはずです。 - * 初期設定用パスワードをコンフィグファイルに設定していない場合は、空欄にしたまま続行してください。 + * Misskeyを自分でインストールした場合は、設定ファイルに入力したパスワードを使用してください。 + * Misskeyのホスティングサービスなどを使用している場合は、提供されたパスワードを使用してください。 + * パスワードを設定していない場合は、空欄にしたまま続行してください。 */ "initialPasswordForSetupDescription": string; /** From a2a74c146d8b69cfb1735324d32dddcb37435b38 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 11:09:14 +0900 Subject: [PATCH 12/18] Update Changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd43344b6a56..e8c5afa20bd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,14 @@ ## 2024.9.0 +### Note +- サーバー初期設定時に使用する初期パスワードを設定できるようになりました。今後Misskeyサーバーを新たに設置する際には、初回の起動前にコンフィグファイルの`initialPassword`を必ず変更してください。(すでに初期設定を完了しているサーバーについては、この変更に伴い対応する必要はありません) + ホスティングサービスを運営している場合は、コンフィグファイルを構築する際に`initialPassword`をランダムな値に設定し、ユーザーに通知するようにしてください。 + ### General - Feat: UserWebhookとSystemWebhookのテスト送信機能を追加 (#14445) - Feat: モデレーターはユーザーにかかわらずファイルが添付されているノートを検索できるように (Cherry-picked from https://github.com/MisskeyIO/misskey/pull/680) +- Feat: サーバー初期設定時に初期パスワードを設定できるように - Enhance: ユーザーによるコンテンツインポートの可否をロールポリシーで制御できるように ### Client From adcb84f6e7ac1a3b9013cca308880b5e4d73ad74 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 19:00:12 +0900 Subject: [PATCH 13/18] fix condition --- .../api/endpoints/admin/accounts/create.ts | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 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 ada3607519e7..5d58cd6fa283 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); } From e01d714a1d034cf12c4f52c7f700d603244797a5 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 19:01:19 +0900 Subject: [PATCH 14/18] fix condition --- .../src/server/api/endpoints/admin/accounts/create.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 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 5d58cd6fa283..19ba42e8f4ad 100644 --- a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts +++ b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts @@ -75,12 +75,13 @@ export default class extends Endpoint { // eslint- if (!realUsers && me == null && token == null) { // 初回セットアップの場合 - if (ps.initialPassword != null && this.config.initialPassword != null) { + if (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() !== '')) { + } else if (ps.initialPassword != null && ps.initialPassword.trim() !== '') { // 初期パスワードが設定されていないのに初期パスワードが入力された場合 throw new ApiError(meta.errors.wrongInitialPassword); } From 72c02b649004a778cd0f4989188b8109935e694b Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 25 Sep 2024 19:04:39 +0900 Subject: [PATCH 15/18] add comment --- .../backend/src/server/api/endpoints/admin/accounts/create.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 19ba42e8f4ad..5b046001e0e7 100644 --- a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts +++ b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts @@ -86,7 +86,7 @@ export default class extends Endpoint { // eslint- throw new ApiError(meta.errors.wrongInitialPassword); } } else if ((realUsers && !me?.isRoot) || token !== null) { - // 初回セットアップではなく、管理者でない場合 + // 初回セットアップではなく、管理者でない場合 or 外部トークンを使用している場合 throw new ApiError(meta.errors.accessDenied); } From 85eb2effb321588c0d7613bcaa457da2a969740d Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:35:28 +0900 Subject: [PATCH 16/18] change error code --- .../backend/src/server/api/endpoints/admin/accounts/create.ts | 4 ++-- packages/frontend/src/pages/welcome.setup.vue | 2 +- 2 files changed, 3 insertions(+), 3 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 5b046001e0e7..8d06ecfd445b 100644 --- a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts +++ b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts @@ -27,8 +27,8 @@ export const meta = { }, wrongInitialPassword: { - message: 'Initial password is wrong.', - code: 'WRONG_INITIAL_PASSWORD', + message: 'Initial password is incorrect.', + code: 'INITIAL_PASSWORD_INCORRECT', id: '97147c55-1ae1-4f6f-91d6-e1c3e0e76d62', }, }, diff --git a/packages/frontend/src/pages/welcome.setup.vue b/packages/frontend/src/pages/welcome.setup.vue index bbf1391a1efa..c824066bd39b 100644 --- a/packages/frontend/src/pages/welcome.setup.vue +++ b/packages/frontend/src/pages/welcome.setup.vue @@ -73,7 +73,7 @@ function submit() { if (err.code === 'ACCESS_DENIED') { title = i18n.ts.permissionDeniedError; text = i18n.ts.operationForbidden; - } else if (err.code === 'WRONG_INITIAL_PASSWORD') { + } else if (err.code === 'INITIAL_PASSWORD_INCORRECT') { title = i18n.ts.permissionDeniedError; text = i18n.ts.incorrectPassword; } From 73235e9d6a088f7dfd6512d432fca0f3f60e1309 Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Thu, 26 Sep 2024 12:36:33 +0900 Subject: [PATCH 17/18] =?UTF-8?q?=E4=BB=96=E3=81=AE=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E3=82=B3=E3=83=BC=E3=83=89=E3=81=A8=E5=90=88=E3=82=8F?= =?UTF-8?q?=E3=81=9B=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/src/server/api/endpoints/admin/accounts/create.ts | 2 +- packages/frontend/src/pages/welcome.setup.vue | 2 +- 2 files changed, 2 insertions(+), 2 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 8d06ecfd445b..bddf7f45d3cf 100644 --- a/packages/backend/src/server/api/endpoints/admin/accounts/create.ts +++ b/packages/backend/src/server/api/endpoints/admin/accounts/create.ts @@ -28,7 +28,7 @@ export const meta = { wrongInitialPassword: { message: 'Initial password is incorrect.', - code: 'INITIAL_PASSWORD_INCORRECT', + code: 'INCORRECT_INITIAL_PASSWORD', id: '97147c55-1ae1-4f6f-91d6-e1c3e0e76d62', }, }, diff --git a/packages/frontend/src/pages/welcome.setup.vue b/packages/frontend/src/pages/welcome.setup.vue index c824066bd39b..cb20cfc5fca0 100644 --- a/packages/frontend/src/pages/welcome.setup.vue +++ b/packages/frontend/src/pages/welcome.setup.vue @@ -73,7 +73,7 @@ function submit() { if (err.code === 'ACCESS_DENIED') { title = i18n.ts.permissionDeniedError; text = i18n.ts.operationForbidden; - } else if (err.code === 'INITIAL_PASSWORD_INCORRECT') { + } else if (err.code === 'INCORRECT_INITIAL_PASSWORD') { title = i18n.ts.permissionDeniedError; text = i18n.ts.incorrectPassword; } From aab74bff845b537a4d4e70135569998bf2beba46 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Thu, 3 Oct 2024 18:11:31 +0900 Subject: [PATCH 18/18] Update CHANGELOG.md --- CHANGELOG.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cc2a1cb4a5b..2e4893126728 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ ## 2024.10.0 +### Note +- サーバー初期設定時に使用する初期パスワードを設定できるようになりました。今後Misskeyサーバーを新たに設置する際には、初回の起動前にコンフィグファイルの`initialPassword`を必ず変更してください。(すでに初期設定を完了しているサーバーについては、この変更に伴い対応する必要はありません) + ホスティングサービスを運営している場合は、コンフィグファイルを構築する際に`initialPassword`をランダムな値に設定し、ユーザーに通知するようにしてください。 + ### General +- Feat: サーバー初期設定時に初期パスワードを設定できるように - Enhance: セキュリティ向上のため、サインイン時もCAPTCHAを求めるようになりました - Enhance: 依存関係の更新 - Enhance: l10nの更新 @@ -15,10 +20,6 @@ ## 2024.9.0 -### Note -- サーバー初期設定時に使用する初期パスワードを設定できるようになりました。今後Misskeyサーバーを新たに設置する際には、初回の起動前にコンフィグファイルの`initialPassword`を必ず変更してください。(すでに初期設定を完了しているサーバーについては、この変更に伴い対応する必要はありません) - ホスティングサービスを運営している場合は、コンフィグファイルを構築する際に`initialPassword`をランダムな値に設定し、ユーザーに通知するようにしてください。 - ### General - Feat: ノート単体・ユーザーのノート・クリップのノートの埋め込み機能 - 埋め込みコードやウェブサイトへの実装方法の詳細は https://misskey-hub.net/docs/for-users/features/embed/ をご覧ください @@ -29,7 +30,6 @@ - Feat: モデレーターはユーザーにかかわらずファイルが添付されているノートを検索できるように (Cherry-picked from https://github.com/MisskeyIO/misskey/pull/680) - Feat: データエクスポートが完了した際に通知を発行するように -- Feat: サーバー初期設定時に初期パスワードを設定できるように - Enhance: ユーザーによるコンテンツインポートの可否をロールポリシーで制御できるように - Enhance: 依存関係の更新 - Enhance: l10nの更新