diff --git a/components/wizard/WizardAdminAccount.vue b/components/wizard/WizardAdminAccount.vue
new file mode 100644
index 00000000000..a442d88c1ca
--- /dev/null
+++ b/components/wizard/WizardAdminAccount.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+ (showPassword = !showPassword)"
+ >
+
+
+
+ (showPassword = !showPassword)"
+ >
+
+
+
+ {{ $t('previous') }}
+
+
+ {{ $t('next') }}
+
+
+
+
+
+
diff --git a/components/wizard/WizardLanguage.vue b/components/wizard/WizardLanguage.vue
new file mode 100644
index 00000000000..184903b796b
--- /dev/null
+++ b/components/wizard/WizardLanguage.vue
@@ -0,0 +1,81 @@
+
+
+
+
+ {{ $t('next') }}
+
+
+
+
+
diff --git a/components/wizard/WizardMetadata.vue b/components/wizard/WizardMetadata.vue
new file mode 100644
index 00000000000..bb0aa379302
--- /dev/null
+++ b/components/wizard/WizardMetadata.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+ {{ $t('previous') }}
+
+ {{
+ $t('next')
+ }}
+
+
+
+
diff --git a/components/wizard/WizardRemoteAccess.vue b/components/wizard/WizardRemoteAccess.vue
new file mode 100644
index 00000000000..de334213a84
--- /dev/null
+++ b/components/wizard/WizardRemoteAccess.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+ {{ $t('previous') }}
+
+
+ {{ $t('finish') }}
+
+
+
+
+
diff --git a/locales/en-US.json b/locales/en-US.json
index d76ab7b833b..4d42468f6f1 100644
--- a/locales/en-US.json
+++ b/locales/en-US.json
@@ -275,13 +275,33 @@
"usernameRequired": "Username is required",
"validation": {
"mustBeUrl": "This field must be a valid URL",
- "required": "This field is required"
+ "required": "This field is required",
+ "bothPasswordsSame": "Both passwords must be the save"
},
"version": "Version",
"video": "Video",
"videoTypes": "Video Types",
"viewDetails": "View details",
"vueClientVersion": "Vue client version",
+ "wizard": {
+ "confirmPassword": "Confirm password",
+ "setupWizard": "Setup wizard",
+ "setAdminError": "Unable to create an admin account.",
+ "setLanguageError": "Unable to set client language.",
+ "setMetadataError": "Unable to set metadata languages.",
+ "setRemoteError": "Unable to set remote access settings.",
+ "languageSuccessfullySet": "Language successfully set.",
+ "userSuccessfullySet": "User successfully set.",
+ "metadataLanguagesSet": "Metadata languages set.",
+ "remoteAccessSet": "Remote access set.",
+ "completeError": "Unable to complete startup wizard.",
+ "preferredMetadataLanguage": "Preferred metadata language",
+ "preferedLanguage": "Prefered language",
+ "languageLocale": "Language and locale",
+ "administratorAccount": "Administrator account",
+ "allowRemoteAccess": "Allow remote access to the server",
+ "remoteAccess": "Remote Access"
+ },
"writer": "Writer",
"writing": "Writing",
"year": "Year",
diff --git a/pages/wizard.vue b/pages/wizard.vue
new file mode 100644
index 00000000000..707c80a852f
--- /dev/null
+++ b/pages/wizard.vue
@@ -0,0 +1,156 @@
+
+
+
+
+ {{ heading }}
+
+
+
+ {{ $t('wizard.languageLocale') }}
+
+
+
+
+
+ {{ $t('wizard.administratorAccount') }}
+
+
+
+
+
+ {{ $t('wizard.preferredMetadataLanguage') }}
+
+
+
+
+
+ {{ $t('wizard.remoteAccess') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/veeValidate.ts b/plugins/veeValidate.ts
index df443bda56f..81e341ffca3 100644
--- a/plugins/veeValidate.ts
+++ b/plugins/veeValidate.ts
@@ -9,6 +9,15 @@ extend('mustBeUrl', (value: string): boolean => {
return /^https?:\/\/.+/.test(value);
});
+extend('bothPasswordsSame', {
+ params: ['target'],
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
+ validate(value, { target }) {
+ return value === target;
+ }
+});
+
const veeValidate: Plugin = ({ app }) => {
configure({
defaultMessage: (_field, values) => {
diff --git a/store/servers.ts b/store/servers.ts
index c7cbbc04c11..87d5f7018c2 100644
--- a/store/servers.ts
+++ b/store/servers.ts
@@ -51,7 +51,7 @@ export const actions: ActionTree = {
if (compareVersions.compare(data.Version || '', '10.7.0', '>=')) {
if (!data.StartupWizardCompleted) {
- // Redirect To Startup Wizard
+ this.$router.push('/wizard');
} else {
commit('SET_SERVER_USED', {
publicInfo: data,