From fc64614d7222866812b841d152358f714a5d302f Mon Sep 17 00:00:00 2001 From: peintnermax Date: Tue, 15 Oct 2024 16:01:08 +0200 Subject: [PATCH 01/12] fix: temporarily remove passkey setup to reduce decision complexity on the password page --- apps/login/src/components/password-form.tsx | 46 +++++++++++---------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/apps/login/src/components/password-form.tsx b/apps/login/src/components/password-form.tsx index f3adecbd..f25cbf60 100644 --- a/apps/login/src/components/password-form.tsx +++ b/apps/login/src/components/password-form.tsx @@ -175,27 +175,31 @@ export function PasswordForm({ // TODO: provide a way to setup passkeys on mfa page? return router.push(`/mfa/set?` + params); - } else if ( - submitted.factors && - !submitted.factors.webAuthN && // if session was not verified with a passkey - promptPasswordless && // if explicitly prompted due policy - !isAlternative // escaped if password was used as an alternative method - ) { - const params = new URLSearchParams({ - loginName: submitted.factors.user.loginName, - prompt: "true", - }); - - if (authRequestId) { - params.append("authRequestId", authRequestId); - } - - if (organization) { - params.append("organization", organization); - } - - return router.push(`/passkey/set?` + params); - } else if (authRequestId && submitted.sessionId) { + } + // TODO: implement passkey setup + + // else if ( + // submitted.factors && + // !submitted.factors.webAuthN && // if session was not verified with a passkey + // promptPasswordless && // if explicitly prompted due policy + // !isAlternative // escaped if password was used as an alternative method + // ) { + // const params = new URLSearchParams({ + // loginName: submitted.factors.user.loginName, + // prompt: "true", + // }); + + // if (authRequestId) { + // params.append("authRequestId", authRequestId); + // } + + // if (organization) { + // params.append("organization", organization); + // } + + // return router.push(`/passkey/set?` + params); + // } + else if (authRequestId && submitted.sessionId) { const params = new URLSearchParams({ sessionId: submitted.sessionId, authRequest: authRequestId, From 7cb23f93cd6fb97c316e1bd4bb0a7c702ef75ffa Mon Sep 17 00:00:00 2001 From: peintnermax Date: Tue, 15 Oct 2024 16:29:16 +0200 Subject: [PATCH 02/12] password set page (initial, recovery) --- apps/login/src/app/(login)/password/page.tsx | 2 + .../src/app/(login)/password/set/page.tsx | 75 +++++++++++++++++++ apps/login/src/lib/server/loginname.ts | 20 +++++ 3 files changed, 97 insertions(+) create mode 100644 apps/login/src/app/(login)/password/set/page.tsx diff --git a/apps/login/src/app/(login)/password/page.tsx b/apps/login/src/app/(login)/password/page.tsx index f68073a3..d6c87850 100644 --- a/apps/login/src/app/(login)/password/page.tsx +++ b/apps/login/src/app/(login)/password/page.tsx @@ -32,6 +32,8 @@ export default async function Page({ const branding = await getBrandingSettings(organization); const loginSettings = await getLoginSettings(organization); + console.log(sessionFactors); + return (
diff --git a/apps/login/src/app/(login)/password/set/page.tsx b/apps/login/src/app/(login)/password/set/page.tsx new file mode 100644 index 00000000..d6c87850 --- /dev/null +++ b/apps/login/src/app/(login)/password/set/page.tsx @@ -0,0 +1,75 @@ +import { Alert } from "@/components/alert"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { PasswordForm } from "@/components/password-form"; +import { UserAvatar } from "@/components/user-avatar"; +import { loadMostRecentSession } from "@/lib/session"; +import { getBrandingSettings, getLoginSettings } from "@/lib/zitadel"; +import { PasskeysType } from "@zitadel/proto/zitadel/settings/v2/login_settings_pb"; +import { getLocale, getTranslations } from "next-intl/server"; + +export default async function Page({ + searchParams, +}: { + searchParams: Record; +}) { + const locale = getLocale(); + const t = await getTranslations({ locale, namespace: "password" }); + + const { loginName, organization, authRequestId, alt } = searchParams; + + // also allow no session to be found (ignoreUnkownUsername) + let sessionFactors; + try { + sessionFactors = await loadMostRecentSession({ + loginName, + organization, + }); + } catch (error) { + // ignore error to continue to show the password form + console.warn(error); + } + + const branding = await getBrandingSettings(organization); + const loginSettings = await getLoginSettings(organization); + + console.log(sessionFactors); + + return ( + +
+

{sessionFactors?.factors?.user?.displayName ?? t("title")}

+

{t("description")}

+ + {/* show error only if usernames should be shown to be unknown */} + {(!sessionFactors || !loginName) && + !loginSettings?.ignoreUnknownUsernames && ( +
+ {t("error:unknownContext")} +
+ )} + + {sessionFactors && ( + + )} + + {loginName && ( + + )} +
+
+ ); +} diff --git a/apps/login/src/lib/server/loginname.ts b/apps/login/src/lib/server/loginname.ts index 299d5f95..2d67b46f 100644 --- a/apps/login/src/lib/server/loginname.ts +++ b/apps/login/src/lib/server/loginname.ts @@ -2,6 +2,7 @@ import { create } from "@zitadel/client"; import { ChecksSchema } from "@zitadel/proto/zitadel/session/v2/session_service_pb"; +import { UserState } from "@zitadel/proto/zitadel/user/v2/user_pb"; import { AuthenticationMethodType } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; import { headers } from "next/headers"; import { redirect } from "next/navigation"; @@ -135,6 +136,25 @@ export async function sendLoginname(command: SendLoginnameCommand) { return { error: "Could not create session for user" }; } + if (users.result[0].state === UserState.INITIAL) { + const params = new URLSearchParams({ + loginName: session.factors?.user?.loginName, + }); + + if (command.organization || session.factors?.user?.organizationId) { + params.append( + "organization", + command.organization ?? session.factors?.user?.organizationId, + ); + } + + if (command.authRequestId) { + params.append("authRequestid", command.authRequestId); + } + + return redirect("/password/set?" + params); + } + const methods = await listAuthenticationMethodTypes( session.factors?.user?.id, ); From 20b3c6bfc2fb234dfcbdf3520dffdfaebb6ed135 Mon Sep 17 00:00:00 2001 From: peintnermax Date: Tue, 15 Oct 2024 17:27:08 +0200 Subject: [PATCH 03/12] set password form --- .../src/app/(login)/password/set/page.tsx | 9 +- apps/login/src/app/(login)/register/page.tsx | 6 +- .../src/components/set-password-form.tsx | 19 +- .../components/set-register-password-form.tsx | 197 ++++++++++++++++++ apps/login/src/lib/server/password.ts | 22 ++ 5 files changed, 227 insertions(+), 26 deletions(-) create mode 100644 apps/login/src/components/set-register-password-form.tsx diff --git a/apps/login/src/app/(login)/password/set/page.tsx b/apps/login/src/app/(login)/password/set/page.tsx index d6c87850..3be72f46 100644 --- a/apps/login/src/app/(login)/password/set/page.tsx +++ b/apps/login/src/app/(login)/password/set/page.tsx @@ -1,10 +1,9 @@ import { Alert } from "@/components/alert"; import { DynamicTheme } from "@/components/dynamic-theme"; -import { PasswordForm } from "@/components/password-form"; +import { SetPasswordForm } from "@/components/set-password-form"; import { UserAvatar } from "@/components/user-avatar"; import { loadMostRecentSession } from "@/lib/session"; import { getBrandingSettings, getLoginSettings } from "@/lib/zitadel"; -import { PasskeysType } from "@zitadel/proto/zitadel/settings/v2/login_settings_pb"; import { getLocale, getTranslations } from "next-intl/server"; export default async function Page({ @@ -58,15 +57,11 @@ export default async function Page({ )} {loginName && ( - )}
diff --git a/apps/login/src/app/(login)/register/page.tsx b/apps/login/src/app/(login)/register/page.tsx index 8169d205..ad84e81b 100644 --- a/apps/login/src/app/(login)/register/page.tsx +++ b/apps/login/src/app/(login)/register/page.tsx @@ -1,6 +1,6 @@ import { DynamicTheme } from "@/components/dynamic-theme"; import { RegisterFormWithoutPassword } from "@/components/register-form-without-password"; -import { SetPasswordForm } from "@/components/set-password-form"; +import { SetRegisterPasswordForm } from "@/components/set-register-password-form"; import { getBrandingSettings, getLegalAndSupportSettings, @@ -38,14 +38,14 @@ export default async function Page({

{t("description")}

{legal && passwordComplexitySettings && ( - + > )}
diff --git a/apps/login/src/components/set-password-form.tsx b/apps/login/src/components/set-password-form.tsx index 507393c1..e865bfd4 100644 --- a/apps/login/src/components/set-password-form.tsx +++ b/apps/login/src/components/set-password-form.tsx @@ -6,7 +6,7 @@ import { symbolValidator, upperCaseValidator, } from "@/helpers/validators"; -import { registerUser, RegisterUserResponse } from "@/lib/server/register"; +import { RegisterUserResponse } from "@/lib/server/register"; import { PasswordComplexitySettings } from "@zitadel/proto/zitadel/settings/v2/password_settings_pb"; import { useTranslations } from "next-intl"; import { useRouter } from "next/navigation"; @@ -28,18 +28,12 @@ type Inputs = type Props = { passwordComplexitySettings: PasswordComplexitySettings; - email: string; - firstname: string; - lastname: string; organization?: string; authRequestId?: string; }; export function SetPasswordForm({ passwordComplexitySettings, - email, - firstname, - lastname, organization, authRequestId, }: Props) { @@ -47,11 +41,7 @@ export function SetPasswordForm({ const { register, handleSubmit, watch, formState } = useForm({ mode: "onBlur", - defaultValues: { - email: email ?? "", - firstname: firstname ?? "", - lastname: lastname ?? "", - }, + defaultValues: {}, }); const [loading, setLoading] = useState(false); @@ -61,10 +51,7 @@ export function SetPasswordForm({ async function submitRegister(values: Inputs) { setLoading(true); - const response = await registerUser({ - email: email, - firstName: firstname, - lastName: lastname, + const response = await changePassword({ organization: organization, authRequestId: authRequestId, password: values.password, diff --git a/apps/login/src/components/set-register-password-form.tsx b/apps/login/src/components/set-register-password-form.tsx new file mode 100644 index 00000000..b8f2eaf3 --- /dev/null +++ b/apps/login/src/components/set-register-password-form.tsx @@ -0,0 +1,197 @@ +"use client"; + +import { + lowerCaseValidator, + numberValidator, + symbolValidator, + upperCaseValidator, +} from "@/helpers/validators"; +import { registerUser, RegisterUserResponse } from "@/lib/server/register"; +import { PasswordComplexitySettings } from "@zitadel/proto/zitadel/settings/v2/password_settings_pb"; +import { useTranslations } from "next-intl"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { FieldValues, useForm } from "react-hook-form"; +import { Alert } from "./alert"; +import { BackButton } from "./back-button"; +import { Button, ButtonVariants } from "./button"; +import { TextInput } from "./input"; +import { PasswordComplexity } from "./password-complexity"; +import { Spinner } from "./spinner"; + +type Inputs = + | { + password: string; + confirmPassword: string; + } + | FieldValues; + +type Props = { + passwordComplexitySettings: PasswordComplexitySettings; + email: string; + firstname: string; + lastname: string; + organization?: string; + authRequestId?: string; +}; + +export function SetRegisterPasswordForm({ + passwordComplexitySettings, + email, + firstname, + lastname, + organization, + authRequestId, +}: Props) { + const t = useTranslations("register"); + + const { register, handleSubmit, watch, formState } = useForm({ + mode: "onBlur", + defaultValues: { + email: email ?? "", + firstname: firstname ?? "", + lastname: lastname ?? "", + }, + }); + + const [loading, setLoading] = useState(false); + const [error, setError] = useState(""); + + const router = useRouter(); + + async function submitRegister(values: Inputs) { + setLoading(true); + const response = await registerUser({ + email: email, + firstName: firstname, + lastName: lastname, + organization: organization, + authRequestId: authRequestId, + password: values.password, + }).catch(() => { + setError("Could not register user"); + }); + + if (response && "error" in response) { + setError(response.error); + } + + setLoading(false); + + if (!response) { + setError("Could not register user"); + return; + } + + const userResponse = response as RegisterUserResponse; + + const params = new URLSearchParams({ userId: userResponse.userId }); + + if (userResponse.factors?.user?.loginName) { + params.append("loginName", userResponse.factors.user.loginName); + } + if (organization) { + params.append("organization", organization); + } + if (userResponse && userResponse.sessionId) { + params.append("sessionId", userResponse.sessionId); + } + + // skip verification for now as it is an app based flow + // return router.push(`/verify?` + params); + + // check for mfa force to continue with mfa setup + + if (authRequestId && userResponse.sessionId) { + if (authRequestId) { + params.append("authRequest", authRequestId); + } + return router.push(`/login?` + params); + } else { + if (authRequestId) { + params.append("authRequestId", authRequestId); + } + return router.push(`/signedin?` + params); + } + } + + const { errors } = formState; + + const watchPassword = watch("password", ""); + const watchConfirmPassword = watch("confirmPassword", ""); + + const hasMinLength = + passwordComplexitySettings && + watchPassword?.length >= passwordComplexitySettings.minLength; + const hasSymbol = symbolValidator(watchPassword); + const hasNumber = numberValidator(watchPassword); + const hasUppercase = upperCaseValidator(watchPassword); + const hasLowercase = lowerCaseValidator(watchPassword); + + const policyIsValid = + passwordComplexitySettings && + (passwordComplexitySettings.requiresLowercase ? hasLowercase : true) && + (passwordComplexitySettings.requiresNumber ? hasNumber : true) && + (passwordComplexitySettings.requiresUppercase ? hasUppercase : true) && + (passwordComplexitySettings.requiresSymbol ? hasSymbol : true) && + hasMinLength; + + return ( +
+
+
+ +
+
+ +
+
+ + {passwordComplexitySettings && ( + + )} + + {error && {error}} + +
+ + +
+ + ); +} diff --git a/apps/login/src/lib/server/password.ts b/apps/login/src/lib/server/password.ts index 2a083806..d5ca8c67 100644 --- a/apps/login/src/lib/server/password.ts +++ b/apps/login/src/lib/server/password.ts @@ -107,3 +107,25 @@ export async function sendPassword(command: UpdateSessionCommand) { authMethods, }; } + +export async function changePassword(command: { + userId: string; + password: string; +}) { + // check for init state + const users = await listUsers({ + loginName: command.loginName, + organizationId: command.organization, + }); + + if ( + !users.details || + users.details.totalResult !== BigInt(1) || + !users.result[0].userId + ) { + return { error: "Could not send Password Reset Link" }; + } + const userId = users.result[0].userId; + + return passwordReset(userId); +} From 94bd6bc3f62cb8f78cfcf012d4739c5a7916189e Mon Sep 17 00:00:00 2001 From: peintnermax Date: Wed, 16 Oct 2024 11:20:23 +0200 Subject: [PATCH 04/12] set password --- apps/login/locales/de.json | 3 +- apps/login/locales/en.json | 3 +- apps/login/locales/es.json | 3 +- apps/login/locales/it.json | 3 +- .../src/app/(login)/password/set/page.tsx | 38 +++++++++++-------- .../src/components/set-password-form.tsx | 3 ++ apps/login/src/lib/server/password.ts | 18 ++++----- apps/login/src/lib/zitadel.ts | 12 ++++++ 8 files changed, 52 insertions(+), 31 deletions(-) diff --git a/apps/login/locales/de.json b/apps/login/locales/de.json index 35450c66..a731b2b3 100644 --- a/apps/login/locales/de.json +++ b/apps/login/locales/de.json @@ -134,6 +134,7 @@ }, "error": { "unknownContext": "Der Kontext des Benutzers konnte nicht ermittelt werden. Stellen Sie sicher, dass Sie zuerst den Benutzernamen eingeben oder einen loginName als Suchparameter angeben.", - "sessionExpired": "Ihre aktuelle Sitzung ist abgelaufen. Bitte melden Sie sich erneut an." + "sessionExpired": "Ihre aktuelle Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.", + "failedLoading": "Daten konnten nicht geladen werden. Bitte versuchen Sie es erneut." } } diff --git a/apps/login/locales/en.json b/apps/login/locales/en.json index d19b1a36..4eae3c1a 100644 --- a/apps/login/locales/en.json +++ b/apps/login/locales/en.json @@ -134,6 +134,7 @@ }, "error": { "unknownContext": "Could not get the context of the user. Make sure to enter the username first or provide a loginName as searchParam.", - "sessionExpired": "Your current session has expired. Please login again." + "sessionExpired": "Your current session has expired. Please login again.", + "failedLoading": "Failed to load data. Please try again." } } diff --git a/apps/login/locales/es.json b/apps/login/locales/es.json index ebd3598e..4fa10378 100644 --- a/apps/login/locales/es.json +++ b/apps/login/locales/es.json @@ -134,6 +134,7 @@ }, "error": { "unknownContext": "No se pudo obtener el contexto del usuario. Asegúrate de ingresar primero el nombre de usuario o proporcionar un loginName como parámetro de búsqueda.", - "sessionExpired": "Tu sesión actual ha expirado. Por favor, inicia sesión de nuevo." + "sessionExpired": "Tu sesión actual ha expirado. Por favor, inicia sesión de nuevo.", + "failedLoading": "No se pudieron cargar los datos. Por favor, inténtalo de nuevo." } } diff --git a/apps/login/locales/it.json b/apps/login/locales/it.json index 88b2f0b1..8f7d4c33 100644 --- a/apps/login/locales/it.json +++ b/apps/login/locales/it.json @@ -134,6 +134,7 @@ }, "error": { "unknownContext": "Impossibile ottenere il contesto dell'utente. Assicurati di inserire prima il nome utente o di fornire un loginName come parametro di ricerca.", - "sessionExpired": "La tua sessione attuale è scaduta. Effettua nuovamente l'accesso." + "sessionExpired": "La tua sessione attuale è scaduta. Effettua nuovamente l'accesso.", + "failedLoading": "Impossibile caricare i dati. Riprova." } } diff --git a/apps/login/src/app/(login)/password/set/page.tsx b/apps/login/src/app/(login)/password/set/page.tsx index 3be72f46..6aa7ba23 100644 --- a/apps/login/src/app/(login)/password/set/page.tsx +++ b/apps/login/src/app/(login)/password/set/page.tsx @@ -3,7 +3,11 @@ import { DynamicTheme } from "@/components/dynamic-theme"; import { SetPasswordForm } from "@/components/set-password-form"; import { UserAvatar } from "@/components/user-avatar"; import { loadMostRecentSession } from "@/lib/session"; -import { getBrandingSettings, getLoginSettings } from "@/lib/zitadel"; +import { + getBrandingSettings, + getLoginSettings, + getPasswordComplexitySettings, +} from "@/lib/zitadel"; import { getLocale, getTranslations } from "next-intl/server"; export default async function Page({ @@ -14,24 +18,21 @@ export default async function Page({ const locale = getLocale(); const t = await getTranslations({ locale, namespace: "password" }); - const { loginName, organization, authRequestId, alt } = searchParams; + const { loginName, organization, authRequestId, code } = searchParams; // also allow no session to be found (ignoreUnkownUsername) - let sessionFactors; - try { - sessionFactors = await loadMostRecentSession({ - loginName, - organization, - }); - } catch (error) { - // ignore error to continue to show the password form - console.warn(error); - } + const sessionFactors = await loadMostRecentSession({ + loginName, + organization, + }); const branding = await getBrandingSettings(organization); - const loginSettings = await getLoginSettings(organization); - console.log(sessionFactors); + const passwordComplexity = await getPasswordComplexitySettings( + sessionFactors?.factors?.user?.organizationId, + ); + + const loginSettings = await getLoginSettings(organization); return ( @@ -56,13 +57,18 @@ export default async function Page({ > )} - {loginName && ( + {passwordComplexity && loginName ? ( + ) : ( +
+ {t("error:failedLoading")} +
)}
diff --git a/apps/login/src/components/set-password-form.tsx b/apps/login/src/components/set-password-form.tsx index e865bfd4..4baff6f6 100644 --- a/apps/login/src/components/set-password-form.tsx +++ b/apps/login/src/components/set-password-form.tsx @@ -6,6 +6,7 @@ import { symbolValidator, upperCaseValidator, } from "@/helpers/validators"; +import { changePassword } from "@/lib/server/password"; import { RegisterUserResponse } from "@/lib/server/register"; import { PasswordComplexitySettings } from "@zitadel/proto/zitadel/settings/v2/password_settings_pb"; import { useTranslations } from "next-intl"; @@ -27,7 +28,9 @@ type Inputs = | FieldValues; type Props = { + code?: string; passwordComplexitySettings: PasswordComplexitySettings; + loginName: string; organization?: string; authRequestId?: string; }; diff --git a/apps/login/src/lib/server/password.ts b/apps/login/src/lib/server/password.ts index d5ca8c67..6906f430 100644 --- a/apps/login/src/lib/server/password.ts +++ b/apps/login/src/lib/server/password.ts @@ -5,9 +5,11 @@ import { setSessionAndUpdateCookie, } from "@/lib/server/cookie"; import { + getUserByID, listAuthenticationMethodTypes, listUsers, passwordReset, + setPassword, } from "@/lib/zitadel"; import { create } from "@zitadel/client"; import { @@ -109,23 +111,17 @@ export async function sendPassword(command: UpdateSessionCommand) { } export async function changePassword(command: { + code?: string; userId: string; password: string; }) { // check for init state - const users = await listUsers({ - loginName: command.loginName, - organizationId: command.organization, - }); + const { user } = await getUserByID(command.userId); - if ( - !users.details || - users.details.totalResult !== BigInt(1) || - !users.result[0].userId - ) { + if (!user || user.userId !== command.userId) { return { error: "Could not send Password Reset Link" }; } - const userId = users.result[0].userId; + const userId = user.userId; - return passwordReset(userId); + return setPassword(userId, command.password); } diff --git a/apps/login/src/lib/zitadel.ts b/apps/login/src/lib/zitadel.ts index 3b032200..01460247 100644 --- a/apps/login/src/lib/zitadel.ts +++ b/apps/login/src/lib/zitadel.ts @@ -500,6 +500,18 @@ export async function passwordReset(userId: string) { ); } +export async function setPassword(userId: string, password: string) { + return userService.setPassword( + { + userId, + newPassword: { + password, + }, + }, + {}, + ); +} + /** * * @param server From 69bc1c19e3f829708cc0e887ca9594f6604ed798 Mon Sep 17 00:00:00 2001 From: peintnermax Date: Wed, 16 Oct 2024 16:29:48 +0200 Subject: [PATCH 05/12] redirect to /set --- apps/login/locales/de.json | 17 ++++-- apps/login/locales/en.json | 17 ++++-- apps/login/locales/es.json | 17 ++++-- apps/login/locales/it.json | 17 ++++-- apps/login/src/app/(login)/password/page.tsx | 8 +-- .../src/app/(login)/password/set/page.tsx | 13 +++-- apps/login/src/components/password-form.tsx | 22 ++++++-- .../src/components/set-password-form.tsx | 52 ++++++++++++++----- apps/login/src/lib/server/password.ts | 4 +- apps/login/src/lib/zitadel.ts | 17 +++++- 10 files changed, 138 insertions(+), 46 deletions(-) diff --git a/apps/login/locales/de.json b/apps/login/locales/de.json index a731b2b3..f07fde4e 100644 --- a/apps/login/locales/de.json +++ b/apps/login/locales/de.json @@ -14,10 +14,19 @@ "register": "Neuen Benutzer registrieren" }, "password": { - "title": "Passwort", - "description": "Geben Sie Ihr Passwort ein.", - "resetPassword": "Passwort zurücksetzen", - "submit": "Weiter" + "verify": { + "title": "Passwort", + "description": "Geben Sie Ihr Passwort ein.", + "resetPassword": "Passwort zurücksetzen", + "submit": "Weiter" + }, + "set": { + "title": "Passwort festlegen", + "description": "Legen Sie das Passwort für Ihr Konto fest", + "codeSent": "Ein Code wurde an Ihre E-Mail-Adresse gesendet.", + "resend": "Erneut senden", + "submit": "Weiter" + } }, "idp": { "title": "Mit SSO anmelden", diff --git a/apps/login/locales/en.json b/apps/login/locales/en.json index 4eae3c1a..6aca7e22 100644 --- a/apps/login/locales/en.json +++ b/apps/login/locales/en.json @@ -14,10 +14,19 @@ "register": "Register new user" }, "password": { - "title": "Password", - "description": "Enter your password.", - "resetPassword": "Reset Password", - "submit": "Continue" + "verify": { + "title": "Password", + "description": "Enter your password.", + "resetPassword": "Reset Password", + "submit": "Continue" + }, + "set": { + "title": "Set Password", + "description": "Set the password for your account", + "codeSent": "A code has been sent to your email address.", + "resend": "Resend code", + "submit": "Continue" + } }, "idp": { "title": "Sign in with SSO", diff --git a/apps/login/locales/es.json b/apps/login/locales/es.json index 4fa10378..e7304124 100644 --- a/apps/login/locales/es.json +++ b/apps/login/locales/es.json @@ -14,10 +14,19 @@ "register": "Registrar nuevo usuario" }, "password": { - "title": "Contraseña", - "description": "Introduce tu contraseña.", - "resetPassword": "Restablecer Contraseña", - "submit": "Continuar" + "verify": { + "title": "Contraseña", + "description": "Introduce tu contraseña.", + "resetPassword": "Restablecer contraseña", + "submit": "Continuar" + }, + "set": { + "title": "Establecer Contraseña", + "description": "Establece la contraseña para tu cuenta", + "codeSent": "Se ha enviado un código a su correo electrónico.", + "resend": "Reenviar código", + "submit": "Continuar" + } }, "idp": { "title": "Iniciar sesión con SSO", diff --git a/apps/login/locales/it.json b/apps/login/locales/it.json index 8f7d4c33..1104a08d 100644 --- a/apps/login/locales/it.json +++ b/apps/login/locales/it.json @@ -14,10 +14,19 @@ "register": "Registrati come nuovo utente" }, "password": { - "title": "Password", - "description": "Inserisci la tua password.", - "resetPassword": "Reimposta Password", - "submit": "Continua" + "verify": { + "title": "Password", + "description": "Inserisci la tua password.", + "resetPassword": "Reimposta Password", + "submit": "Continua" + }, + "set": { + "title": "Imposta Password", + "description": "Imposta la password per il tuo account", + "codeSent": "Un codice è stato inviato al tuo indirizzo email.", + "resend": "Invia di nuovo", + "submit": "Continua" + } }, "idp": { "title": "Accedi con SSO", diff --git a/apps/login/src/app/(login)/password/page.tsx b/apps/login/src/app/(login)/password/page.tsx index d6c87850..43cb969d 100644 --- a/apps/login/src/app/(login)/password/page.tsx +++ b/apps/login/src/app/(login)/password/page.tsx @@ -32,13 +32,13 @@ export default async function Page({ const branding = await getBrandingSettings(organization); const loginSettings = await getLoginSettings(organization); - console.log(sessionFactors); - return (
-

{sessionFactors?.factors?.user?.displayName ?? t("title")}

-

{t("description")}

+

+ {sessionFactors?.factors?.user?.displayName ?? t("verify.title")} +

+

{t("verify.description")}

{/* show error only if usernames should be shown to be unknown */} {(!sessionFactors || !loginName) && diff --git a/apps/login/src/app/(login)/password/set/page.tsx b/apps/login/src/app/(login)/password/set/page.tsx index 6aa7ba23..e99f79ef 100644 --- a/apps/login/src/app/(login)/password/set/page.tsx +++ b/apps/login/src/app/(login)/password/set/page.tsx @@ -1,4 +1,4 @@ -import { Alert } from "@/components/alert"; +import { Alert, AlertType } from "@/components/alert"; import { DynamicTheme } from "@/components/dynamic-theme"; import { SetPasswordForm } from "@/components/set-password-form"; import { UserAvatar } from "@/components/user-avatar"; @@ -37,8 +37,8 @@ export default async function Page({ return (
-

{sessionFactors?.factors?.user?.displayName ?? t("title")}

-

{t("description")}

+

{sessionFactors?.factors?.user?.displayName ?? t("set.title")}

+

{t("set.description")}

{/* show error only if usernames should be shown to be unknown */} {(!sessionFactors || !loginName) && @@ -57,9 +57,14 @@ export default async function Page({ > )} - {passwordComplexity && loginName ? ( + {t("set.codeSent")} + + {passwordComplexity && + loginName && + sessionFactors?.factors?.user?.id ? ( - {t("resetPassword")} + {t("verify.resetPassword")} )} @@ -284,7 +296,7 @@ export function PasswordForm({ onClick={handleSubmit(submitPasswordAndContinue)} > {loading && } - {t("submit")} + {t("verify.submit")}
diff --git a/apps/login/src/components/set-password-form.tsx b/apps/login/src/components/set-password-form.tsx index 4baff6f6..51e3f132 100644 --- a/apps/login/src/components/set-password-form.tsx +++ b/apps/login/src/components/set-password-form.tsx @@ -7,8 +7,8 @@ import { upperCaseValidator, } from "@/helpers/validators"; import { changePassword } from "@/lib/server/password"; -import { RegisterUserResponse } from "@/lib/server/register"; import { PasswordComplexitySettings } from "@zitadel/proto/zitadel/settings/v2/password_settings_pb"; +import { SetPasswordResponse } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; import { useTranslations } from "next-intl"; import { useRouter } from "next/navigation"; import { useState } from "react"; @@ -22,6 +22,7 @@ import { Spinner } from "./spinner"; type Inputs = | { + code: string; password: string; confirmPassword: string; } @@ -31,6 +32,7 @@ type Props = { code?: string; passwordComplexitySettings: PasswordComplexitySettings; loginName: string; + userId: string; organization?: string; authRequestId?: string; }; @@ -39,12 +41,17 @@ export function SetPasswordForm({ passwordComplexitySettings, organization, authRequestId, + loginName, + userId, + code, }: Props) { - const t = useTranslations("register"); + const t = useTranslations("password"); const { register, handleSubmit, watch, formState } = useForm({ mode: "onBlur", - defaultValues: {}, + defaultValues: { + code: code ?? "", + }, }); const [loading, setLoading] = useState(false); @@ -55,9 +62,9 @@ export function SetPasswordForm({ async function submitRegister(values: Inputs) { setLoading(true); const response = await changePassword({ - organization: organization, - authRequestId: authRequestId, + userId: userId, password: values.password, + code: values.code, }).catch(() => { setError("Could not register user"); }); @@ -73,19 +80,18 @@ export function SetPasswordForm({ return; } - const userResponse = response as RegisterUserResponse; + const userResponse = response as SetPasswordResponse & { + sessionId: string; + }; - const params = new URLSearchParams({ userId: userResponse.userId }); + const params = new URLSearchParams({}); - if (userResponse.factors?.user?.loginName) { - params.append("loginName", userResponse.factors.user.loginName); + if (loginName) { + params.append("loginName", loginName); } if (organization) { params.append("organization", organization); } - if (userResponse && userResponse.sessionId) { - params.append("sessionId", userResponse.sessionId); - } // skip verification for now as it is an app based flow // return router.push(`/verify?` + params); @@ -129,6 +135,24 @@ export function SetPasswordForm({ return (
+
+
+ +
+
+ +
+
@@ -179,7 +203,7 @@ export function SetPasswordForm({ onClick={handleSubmit(submitRegister)} > {loading && } - {t("password.submit")} + {t("set.submit")}
diff --git a/apps/login/src/lib/server/password.ts b/apps/login/src/lib/server/password.ts index 6906f430..faa0bbeb 100644 --- a/apps/login/src/lib/server/password.ts +++ b/apps/login/src/lib/server/password.ts @@ -111,7 +111,7 @@ export async function sendPassword(command: UpdateSessionCommand) { } export async function changePassword(command: { - code?: string; + code: string; userId: string; password: string; }) { @@ -123,5 +123,5 @@ export async function changePassword(command: { } const userId = user.userId; - return setPassword(userId, command.password); + return setPassword(userId, command.password, command.code); } diff --git a/apps/login/src/lib/zitadel.ts b/apps/login/src/lib/zitadel.ts index 01460247..846552dd 100644 --- a/apps/login/src/lib/zitadel.ts +++ b/apps/login/src/lib/zitadel.ts @@ -28,6 +28,7 @@ import { } from "@zitadel/proto/zitadel/settings/v2/login_settings_pb"; import { PasswordComplexitySettingsSchema } from "@zitadel/proto/zitadel/settings/v2/password_settings_pb"; import type { RedirectURLsJson } from "@zitadel/proto/zitadel/user/v2/idp_pb"; +import { NotificationType } from "@zitadel/proto/zitadel/user/v2/password_pb"; import { SearchQuery, SearchQuerySchema, @@ -495,18 +496,32 @@ export async function passwordReset(userId: string) { return userService.passwordReset( { userId, + medium: { + case: "sendLink", + value: { + notificationType: NotificationType.Email, + }, + }, }, {}, ); } -export async function setPassword(userId: string, password: string) { +export async function setPassword( + userId: string, + password: string, + code: string, +) { return userService.setPassword( { userId, newPassword: { password, }, + verification: { + case: "verificationCode", + value: code, + }, }, {}, ); From 77c00fb6661b069c7a816c5bfe23f16aaadaa01e Mon Sep 17 00:00:00 2001 From: peintnermax Date: Wed, 16 Oct 2024 17:21:52 +0200 Subject: [PATCH 06/12] should not prompt for the moment --- apps/login/cypress/integration/login.cy.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/login/cypress/integration/login.cy.ts b/apps/login/cypress/integration/login.cy.ts index a286e00d..bb83ca37 100644 --- a/apps/login/cypress/integration/login.cy.ts +++ b/apps/login/cypress/integration/login.cy.ts @@ -104,16 +104,16 @@ describe("login", () => { }, }); }); - it("should prompt a user to setup passwordless authentication if passkey is allowed in the login settings", () => { - cy.visit("/loginname?loginName=john%40zitadel.com&submit=true"); - cy.location("pathname", { timeout: 10_000 }).should("eq", "/password"); - cy.get('input[type="password"]').focus().type("MyStrongPassword!1"); - cy.get('button[type="submit"]').click(); - cy.location("pathname", { timeout: 10_000 }).should( - "eq", - "/passkey/set", - ); - }); + // it("should prompt a user to setup passwordless authentication if passkey is allowed in the login settings", () => { + // cy.visit("/loginname?loginName=john%40zitadel.com&submit=true"); + // cy.location("pathname", { timeout: 10_000 }).should("eq", "/password"); + // cy.get('input[type="password"]').focus().type("MyStrongPassword!1"); + // cy.get('button[type="submit"]').click(); + // cy.location("pathname", { timeout: 10_000 }).should( + // "eq", + // "/passkey/set", + // ); + // }); }); }); describe("passkey login", () => { From bc3e09ed0c47475a30d29630513489fed4b954ff Mon Sep 17 00:00:00 2001 From: peintnermax Date: Wed, 16 Oct 2024 18:11:54 +0200 Subject: [PATCH 07/12] self service change password --- apps/login/locales/de.json | 5 ++ apps/login/locales/en.json | 5 ++ apps/login/locales/es.json | 5 ++ apps/login/locales/it.json | 5 ++ .../app/(login)/me/change-password/page.tsx | 78 ------------------ .../src/app/(login)/password/change/page.tsx | 80 +++++++++++++++++++ .../src/components/change-password-form.tsx | 48 ++++++++--- apps/login/src/components/password-form.tsx | 6 +- apps/login/src/lib/self.ts | 49 ++++++++---- 9 files changed, 178 insertions(+), 103 deletions(-) delete mode 100644 apps/login/src/app/(login)/me/change-password/page.tsx create mode 100644 apps/login/src/app/(login)/password/change/page.tsx diff --git a/apps/login/locales/de.json b/apps/login/locales/de.json index f07fde4e..75771c1a 100644 --- a/apps/login/locales/de.json +++ b/apps/login/locales/de.json @@ -26,6 +26,11 @@ "codeSent": "Ein Code wurde an Ihre E-Mail-Adresse gesendet.", "resend": "Erneut senden", "submit": "Weiter" + }, + "change": { + "title": "Passwort ändern", + "description": "Legen Sie das Passwort für Ihr Konto fest", + "submit": "Weiter" } }, "idp": { diff --git a/apps/login/locales/en.json b/apps/login/locales/en.json index 6aca7e22..2481d047 100644 --- a/apps/login/locales/en.json +++ b/apps/login/locales/en.json @@ -26,6 +26,11 @@ "codeSent": "A code has been sent to your email address.", "resend": "Resend code", "submit": "Continue" + }, + "change": { + "title": "Change Password", + "description": "Set the password for your account", + "submit": "Continue" } }, "idp": { diff --git a/apps/login/locales/es.json b/apps/login/locales/es.json index e7304124..2643f763 100644 --- a/apps/login/locales/es.json +++ b/apps/login/locales/es.json @@ -26,6 +26,11 @@ "codeSent": "Se ha enviado un código a su correo electrónico.", "resend": "Reenviar código", "submit": "Continuar" + }, + "change": { + "title": "Cambiar Contraseña", + "description": "Establece la contraseña para tu cuenta", + "submit": "Continuar" } }, "idp": { diff --git a/apps/login/locales/it.json b/apps/login/locales/it.json index 1104a08d..d13863ff 100644 --- a/apps/login/locales/it.json +++ b/apps/login/locales/it.json @@ -26,6 +26,11 @@ "codeSent": "Un codice è stato inviato al tuo indirizzo email.", "resend": "Invia di nuovo", "submit": "Continua" + }, + "change": { + "title": "Cambia Password", + "description": "Imposta la password per il tuo account", + "submit": "Continua" } }, "idp": { diff --git a/apps/login/src/app/(login)/me/change-password/page.tsx b/apps/login/src/app/(login)/me/change-password/page.tsx deleted file mode 100644 index d87f184a..00000000 --- a/apps/login/src/app/(login)/me/change-password/page.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { Alert } from "@/components/alert"; -import { ChangePasswordForm } from "@/components/change-password-form"; -import { DynamicTheme } from "@/components/dynamic-theme"; -import { UserAvatar } from "@/components/user-avatar"; -import { getSessionCookieById } from "@/lib/cookies"; -import { - getBrandingSettings, - getPasswordComplexitySettings, - getSession, -} from "@/lib/zitadel"; - -export default async function Page({ - searchParams, -}: { - searchParams: Record; -}) { - const { sessionId } = searchParams; - - if (!sessionId) { - return ( -
-

Session ID not found

-
- ); - } - - const sessionCookie = await getSessionCookieById({ - sessionId, - }); - - const { session } = await getSession({ - sessionId: sessionCookie.id, - sessionToken: sessionCookie.token, - }); - - const passwordComplexitySettings = await getPasswordComplexitySettings( - session?.factors?.user?.organizationId, - ); - - const branding = await getBrandingSettings( - session?.factors?.user?.organizationId, - ); - - return ( - -
-

Set Password

-

Set the password for your account

- - {!session && ( -
- - Could not get the context of the user. Make sure to enter the - username first or provide a loginName as searchParam. - -
- )} - - {session && ( - - )} - - {passwordComplexitySettings && session?.factors?.user?.id && ( - - )} -
-
- ); -} diff --git a/apps/login/src/app/(login)/password/change/page.tsx b/apps/login/src/app/(login)/password/change/page.tsx new file mode 100644 index 00000000..cf8a970c --- /dev/null +++ b/apps/login/src/app/(login)/password/change/page.tsx @@ -0,0 +1,80 @@ +import { Alert } from "@/components/alert"; +import { ChangePasswordForm } from "@/components/change-password-form"; +import { DynamicTheme } from "@/components/dynamic-theme"; +import { UserAvatar } from "@/components/user-avatar"; +import { loadMostRecentSession } from "@/lib/session"; +import { + getBrandingSettings, + getLoginSettings, + getPasswordComplexitySettings, +} from "@/lib/zitadel"; +import { getLocale, getTranslations } from "next-intl/server"; + +export default async function Page({ + searchParams, +}: { + searchParams: Record; +}) { + const locale = getLocale(); + const t = await getTranslations({ locale, namespace: "password" }); + + const { loginName, organization, authRequestId, code } = searchParams; + + // also allow no session to be found (ignoreUnkownUsername) + const sessionFactors = await loadMostRecentSession({ + loginName, + organization, + }); + + const branding = await getBrandingSettings(organization); + + const passwordComplexity = await getPasswordComplexitySettings( + sessionFactors?.factors?.user?.organizationId, + ); + + const loginSettings = await getLoginSettings(organization); + + return ( + +
+

+ {sessionFactors?.factors?.user?.displayName ?? t("change.title")} +

+

{t("change.description")}

+ + {/* show error only if usernames should be shown to be unknown */} + {(!sessionFactors || !loginName) && + !loginSettings?.ignoreUnknownUsernames && ( +
+ {t("error:unknownContext")} +
+ )} + + {sessionFactors && ( + + )} + + {passwordComplexity && + loginName && + sessionFactors?.factors?.user?.id ? ( + + ) : ( +
+ {t("error:failedLoading")} +
+ )} +
+
+ ); +} diff --git a/apps/login/src/components/change-password-form.tsx b/apps/login/src/components/change-password-form.tsx index 317a377a..d54210c1 100644 --- a/apps/login/src/components/change-password-form.tsx +++ b/apps/login/src/components/change-password-form.tsx @@ -6,8 +6,9 @@ import { symbolValidator, upperCaseValidator, } from "@/helpers/validators"; -import { setPassword } from "@/lib/self"; +import { setMyPassword } from "@/lib/self"; import { PasswordComplexitySettings } from "@zitadel/proto/zitadel/settings/v2/password_settings_pb"; +import { useTranslations } from "next-intl"; import { useRouter } from "next/navigation"; import { useState } from "react"; import { FieldValues, useForm } from "react-hook-form"; @@ -27,15 +28,21 @@ type Inputs = type Props = { passwordComplexitySettings: PasswordComplexitySettings; - userId: string; sessionId: string; + loginName: string; + authRequestId?: string; + organization?: string; }; export function ChangePasswordForm({ passwordComplexitySettings, - userId, sessionId, + loginName, + authRequestId, + organization, }: Props) { + const t = useTranslations("password"); + const { register, handleSubmit, watch, formState } = useForm({ mode: "onBlur", defaultValues: { @@ -51,9 +58,8 @@ export function ChangePasswordForm({ async function submitChange(values: Inputs) { setLoading(true); - const response = await setPassword({ + const response = await setMyPassword({ sessionId: sessionId, - userId: userId, password: values.password, }).catch(() => { setError("Could not change password"); @@ -61,12 +67,36 @@ export function ChangePasswordForm({ setLoading(false); + if (response && "error" in response) { + setError(response.error); + return; + } + if (!response) { setError("Could not change password"); return; } - return response; + const params = new URLSearchParams({}); + + if (loginName) { + params.append("loginName", loginName); + } + if (organization) { + params.append("organization", organization); + } + + if (authRequestId && sessionId) { + if (authRequestId) { + params.append("authRequest", authRequestId); + } + return router.push(`/login?` + params); + } else { + if (authRequestId) { + params.append("authRequestId", authRequestId); + } + return router.push(`/signedin?` + params); + } } const { errors } = formState; @@ -99,9 +129,9 @@ export function ChangePasswordForm({ autoComplete="new-password" required {...register("password", { - required: "You have to provide a password!", + required: "You have to provide a new password!", })} - label="Password" + label="New Password" error={errors.password?.message as string} />
@@ -143,7 +173,7 @@ export function ChangePasswordForm({ onClick={handleSubmit(submitChange)} > {loading && } - continue + {t("change.submit")} diff --git a/apps/login/src/components/password-form.tsx b/apps/login/src/components/password-form.tsx index ecb77b8a..dc194d65 100644 --- a/apps/login/src/components/password-form.tsx +++ b/apps/login/src/components/password-form.tsx @@ -61,15 +61,17 @@ export function PasswordForm({ }), authRequestId, }).catch(() => { + setLoading(false); setError("Could not verify password"); + return; }); + setLoading(false); + if (response && "error" in response && response.error) { setError(response.error); } - setLoading(false); - return response; } diff --git a/apps/login/src/lib/self.ts b/apps/login/src/lib/self.ts index 64addf84..e9efae54 100644 --- a/apps/login/src/lib/self.ts +++ b/apps/login/src/lib/self.ts @@ -6,6 +6,7 @@ import { } from "@zitadel/client/v2"; import { createServerTransport } from "@zitadel/node"; import { getSessionCookieById } from "./cookies"; +import { getSession } from "./zitadel"; const transport = (token: string) => createServerTransport(token, { @@ -19,26 +20,46 @@ const sessionService = (sessionId: string) => { }); }; -const userService = (sessionId: string) => { - return getSessionCookieById({ sessionId }).then((session) => { - return createUserServiceClient(transport(session.token)); - }); +const myUserService = (sessionToken: string) => { + return createUserServiceClient(transport(sessionToken)); }; -export async function setPassword({ +export async function setMyPassword({ sessionId, - userId, password, }: { sessionId: string; - userId: string; password: string; }) { - return (await userService(sessionId)).setPassword( - { - userId, - newPassword: { password, changeRequired: false }, - }, - {}, - ); + const sessionCookie = await getSessionCookieById({ sessionId }); + + const { session } = await getSession({ + sessionId: sessionCookie.id, + sessionToken: sessionCookie.token, + }); + + if (!session) { + return { error: "Could not load session" }; + } + + const service = await myUserService(sessionCookie.token); + + if (!session?.factors?.user?.id) { + return { error: "No user id found in session" }; + } + + return service + .setPassword( + { + userId: session.factors.user.id, + newPassword: { password, changeRequired: false }, + }, + {}, + ) + .catch((error) => { + if (error.code === 7) { + return { error: "Session is not valid." }; + } + throw error; + }); } From bfe3448f5a961cb02b19901a1a15bdca148ce196 Mon Sep 17 00:00:00 2001 From: peintnermax Date: Thu, 17 Oct 2024 10:06:17 +0200 Subject: [PATCH 08/12] document password pages, move redirects to `sendPassword` server action --- apps/login/readme.md | 40 +++++ apps/login/screenshots/password_change.png | Bin 0 -> 123203 bytes apps/login/screenshots/password_set.png | Bin 0 -> 153578 bytes apps/login/src/components/login-otp.tsx | 6 +- apps/login/src/components/password-form.tsx | 143 +--------------- .../src/components/set-password-form.tsx | 70 +++++--- apps/login/src/lib/server/password.ts | 162 +++++++++++++++++- 7 files changed, 254 insertions(+), 167 deletions(-) create mode 100644 apps/login/screenshots/password_change.png create mode 100644 apps/login/screenshots/password_set.png diff --git a/apps/login/readme.md b/apps/login/readme.md index f95a6361..14a9e386 100644 --- a/apps/login/readme.md +++ b/apps/login/readme.md @@ -24,6 +24,10 @@ This diagram shows the available pages and flows. passkey --> B[signedin] password -- hasMFA --> mfa password -- allowPasskeys --> passkey-add + password -- reset --> password-set + email -- reset --> password-set + password -- userstate=initial --> password-change + mfa --> otp otp --> B[signedin] mfa--> u2f @@ -103,10 +107,14 @@ Requests to the APIs made: - `listAuthenticationMethodTypes` - `getSession()` - `updateSession()` +- `listUsers()` +- `getUserById()` **MFA AVAILABLE:** After the password has been submitted, additional authentication methods are loaded. If the user has set up an additional **single** second factor, it is redirected to add the next factor. Depending on the available method he is redirected to `/otp/time-based`,`/otp/sms?`, `/otp/email?` or `/u2f?`. If the user has multiple second factors, he is redirected to `/mfa` to select his preferred method to continue. +**NO MFA, USER STATE INITIAL** If the user has no MFA methods and is in an initial state, we redirect to `/password/change` where a new password can be set. + **NO MFA, FORCE MFA:** If no MFA method is available, and the settings force MFA, the user is sent to `/mfa/set` which prompts to setup a second factor. **PROMPT PASSKEY** If the settings do not enforce MFA, we check if passkeys are allowed with `loginSettings?.passkeysType === PasskeysType.ALLOWED` and redirect the user to `/passkey/set` if no passkeys are setup. This step can be skipped. @@ -115,6 +123,38 @@ If none of the previous conditions apply, we continue to sign in. > NOTE: `listAuthenticationMethodTypes()` does not consider different domains for u2f methods or passkeys. The check whether a user should be redirected to one of the pages `/passkey` or `/u2f`, should be extended to use a domain filter (https://github.com/zitadel/zitadel/issues/8615) +### /password/change + +This page allows to change the password. It is used after a user is in an initial state and is required to change the password, or it can be directly invoked with an active session. + +/password/change + +Requests to the APIs made: + +- `getLoginSettings(org?)` +- `getPasswordComplexitySettings(user?)` +- `getBrandingSettings(org?)` +- `getSession()` +- `setPassword()` + +> NOTE: The request to change the password is using the session of the user itself not the service user, therefore no code is required. + +### /password/set + +This page allows to set a password. It is used after a user has requested to reset the password on the `/password` page. + +/password/set + +Requests to the APIs made: + +- `getLoginSettings(org?)` +- `getPasswordComplexitySettings(user?)` +- `getBrandingSettings(org?)` +- `getUserByID()` +- `setPassword()` + +The page allows to enter a code or be invoked directly from a email link which prefills the code. The user can enter a new password and submit. + ### /otp/[method] This page shows a code field to check an otp method. The session of the user is then hydrated with the respective factor. Supported methods are `time-based`, `sms` and `email`. diff --git a/apps/login/screenshots/password_change.png b/apps/login/screenshots/password_change.png new file mode 100644 index 0000000000000000000000000000000000000000..183de6df34278c13f445410af4f223c2fc39f6bf GIT binary patch literal 123203 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
Ip(?%5f&yC;PRMNNOVN#|<2e49oY@23u5^Q64n} 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 M9fN(@d+me&32Kyvwg3PC literal 0 HcmV?d00001 diff --git a/apps/login/screenshots/password_set.png b/apps/login/screenshots/password_set.png new file mode 100644 index 0000000000000000000000000000000000000000..15b5ff49ad5b7d5e3e9e1efe9ceed5a7337e72c6 GIT binary patch literal 153578 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 literal 0 HcmV?d00001 diff --git a/apps/login/src/components/login-otp.tsx b/apps/login/src/components/login-otp.tsx index e131e244..8c370a4a 100644 --- a/apps/login/src/components/login-otp.tsx +++ b/apps/login/src/components/login-otp.tsx @@ -194,7 +194,7 @@ export function LoginOTP({
- {t("noCodeReceived")} + {t("verify.noCodeReceived")}
@@ -244,7 +244,7 @@ export function LoginOTP({ })} > {loading && } - {t("submit")} + {t("verify.submit")} diff --git a/apps/login/src/components/password-form.tsx b/apps/login/src/components/password-form.tsx index dc194d65..bca61bcd 100644 --- a/apps/login/src/components/password-form.tsx +++ b/apps/login/src/components/password-form.tsx @@ -4,7 +4,6 @@ import { resetPassword, sendPassword } from "@/lib/server/password"; import { create } from "@zitadel/client"; import { ChecksSchema } from "@zitadel/proto/zitadel/session/v2/session_service_pb"; import { LoginSettings } from "@zitadel/proto/zitadel/settings/v2/login_settings_pb"; -import { AuthenticationMethodType } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; import { useTranslations } from "next-intl"; import { useRouter } from "next/navigation"; import { useState } from "react"; @@ -60,6 +59,7 @@ export function PasswordForm({ password: { password: values.password }, }), authRequestId, + forceMfa: loginSettings?.forceMfa, }).catch(() => { setLoading(false); setError("Could not verify password"); @@ -87,14 +87,16 @@ export function PasswordForm({ setError("Could not reset password"); }); + setLoading(false); + if (response && "error" in response) { setError(response.error); + return; } setInfo("Password was reset. Please check your email."); - setLoading(false); const params = new URLSearchParams({ loginName: loginName, }); @@ -110,141 +112,6 @@ export function PasswordForm({ return router.push("/password/set?" + params); } - async function submitPasswordAndContinue( - value: Inputs, - ): Promise { - const submitted = await submitPassword(value); - setInfo(""); - // if user has mfa -> /otp/[method] or /u2f - // if mfa is forced and user has no mfa -> /mfa/set - // if no passwordless -> /passkey/set - - // exclude password and passwordless - if ( - !submitted || - !submitted.authMethods || - !submitted.factors?.user?.loginName - ) { - return; - } - - const availableSecondFactors = submitted?.authMethods?.filter( - (m: AuthenticationMethodType) => - m !== AuthenticationMethodType.PASSWORD && - m !== AuthenticationMethodType.PASSKEY, - ); - - if (availableSecondFactors?.length == 1) { - const params = new URLSearchParams({ - loginName: submitted.factors?.user.loginName, - }); - - if (authRequestId) { - params.append("authRequestId", authRequestId); - } - - if (organization) { - params.append("organization", organization); - } - - const factor = availableSecondFactors[0]; - // if passwordless is other method, but user selected password as alternative, perform a login - if (factor === AuthenticationMethodType.TOTP) { - return router.push(`/otp/time-based?` + params); - } else if (factor === AuthenticationMethodType.OTP_SMS) { - return router.push(`/otp/sms?` + params); - } else if (factor === AuthenticationMethodType.OTP_EMAIL) { - return router.push(`/otp/email?` + params); - } else if (factor === AuthenticationMethodType.U2F) { - return router.push(`/u2f?` + params); - } - } else if (availableSecondFactors?.length >= 1) { - const params = new URLSearchParams({ - loginName: submitted.factors.user.loginName, - }); - - if (authRequestId) { - params.append("authRequestId", authRequestId); - } - - if (organization) { - params.append("organization", organization); - } - - return router.push(`/mfa?` + params); - } else if (loginSettings?.forceMfa && !availableSecondFactors.length) { - const params = new URLSearchParams({ - loginName: submitted.factors.user.loginName, - force: "true", // this defines if the mfa is forced in the settings - checkAfter: "true", // this defines if the check is directly made after the setup - }); - - if (authRequestId) { - params.append("authRequestId", authRequestId); - } - - if (organization) { - params.append("organization", organization); - } - - // TODO: provide a way to setup passkeys on mfa page? - return router.push(`/mfa/set?` + params); - } - // TODO: implement passkey setup - - // else if ( - // submitted.factors && - // !submitted.factors.webAuthN && // if session was not verified with a passkey - // promptPasswordless && // if explicitly prompted due policy - // !isAlternative // escaped if password was used as an alternative method - // ) { - // const params = new URLSearchParams({ - // loginName: submitted.factors.user.loginName, - // prompt: "true", - // }); - - // if (authRequestId) { - // params.append("authRequestId", authRequestId); - // } - - // if (organization) { - // params.append("organization", organization); - // } - - // return router.push(`/passkey/set?` + params); - // } - else if (authRequestId && submitted.sessionId) { - const params = new URLSearchParams({ - sessionId: submitted.sessionId, - authRequest: authRequestId, - }); - - if (organization) { - params.append("organization", organization); - } - - return router.push(`/login?` + params); - } - - // without OIDC flow - const params = new URLSearchParams( - authRequestId - ? { - loginName: submitted.factors.user.loginName, - authRequestId, - } - : { - loginName: submitted.factors.user.loginName, - }, - ); - - if (organization) { - params.append("organization", organization); - } - - return router.push(`/signedin?` + params); - } - return (
@@ -295,7 +162,7 @@ export function PasswordForm({ className="self-end" variant={ButtonVariants.Primary} disabled={loading || !formState.isValid} - onClick={handleSubmit(submitPasswordAndContinue)} + onClick={handleSubmit(submitPassword)} > {loading && } {t("verify.submit")} diff --git a/apps/login/src/components/set-password-form.tsx b/apps/login/src/components/set-password-form.tsx index 51e3f132..ead01048 100644 --- a/apps/login/src/components/set-password-form.tsx +++ b/apps/login/src/components/set-password-form.tsx @@ -6,9 +6,10 @@ import { symbolValidator, upperCaseValidator, } from "@/helpers/validators"; -import { changePassword } from "@/lib/server/password"; +import { changePassword, sendPassword } from "@/lib/server/password"; +import { create } from "@zitadel/client"; +import { ChecksSchema } from "@zitadel/proto/zitadel/session/v2/session_service_pb"; import { PasswordComplexitySettings } from "@zitadel/proto/zitadel/settings/v2/password_settings_pb"; -import { SetPasswordResponse } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; import { useTranslations } from "next-intl"; import { useRouter } from "next/navigation"; import { useState } from "react"; @@ -61,7 +62,7 @@ export function SetPasswordForm({ async function submitRegister(values: Inputs) { setLoading(true); - const response = await changePassword({ + const changeResponse = await changePassword({ userId: userId, password: values.password, code: values.code, @@ -69,21 +70,17 @@ export function SetPasswordForm({ setError("Could not register user"); }); - if (response && "error" in response) { - setError(response.error); + if (changeResponse && "error" in changeResponse) { + setError(changeResponse.error); } setLoading(false); - if (!response) { + if (!changeResponse) { setError("Could not register user"); return; } - const userResponse = response as SetPasswordResponse & { - sessionId: string; - }; - const params = new URLSearchParams({}); if (loginName) { @@ -93,22 +90,45 @@ export function SetPasswordForm({ params.append("organization", organization); } - // skip verification for now as it is an app based flow - // return router.push(`/verify?` + params); - - // check for mfa force to continue with mfa setup - - if (authRequestId && userResponse.sessionId) { - if (authRequestId) { - params.append("authRequest", authRequestId); - } - return router.push(`/login?` + params); - } else { - if (authRequestId) { - params.append("authRequestId", authRequestId); - } - return router.push(`/signedin?` + params); + const passwordResponse = await sendPassword({ + loginName, + organization, + checks: create(ChecksSchema, { + password: { password: values.password }, + }), + authRequestId, + }).catch(() => { + setLoading(false); + setError("Could not verify password"); + return; + }); + + setLoading(false); + + if ( + passwordResponse && + "error" in passwordResponse && + passwordResponse.error + ) { + setError(passwordResponse.error); } + + // // skip verification for now as it is an app based flow + // // return router.push(`/verify?` + params); + + // // check for mfa force to continue with mfa setup + + // if (authRequestId && changeResponse.sessionId) { + // if (authRequestId) { + // params.append("authRequest", authRequestId); + // } + // return router.push(`/login?` + params); + // } else { + // if (authRequestId) { + // params.append("authRequestId", authRequestId); + // } + // return router.push(`/signedin?` + params); + // } } const { errors } = formState; diff --git a/apps/login/src/lib/server/password.ts b/apps/login/src/lib/server/password.ts index faa0bbeb..3db467b0 100644 --- a/apps/login/src/lib/server/password.ts +++ b/apps/login/src/lib/server/password.ts @@ -16,6 +16,9 @@ import { Checks, ChecksSchema, } from "@zitadel/proto/zitadel/session/v2/session_service_pb"; +import { User, UserState } from "@zitadel/proto/zitadel/user/v2/user_pb"; +import { AuthenticationMethodType } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; +import { redirect } from "next/navigation"; import { getSessionCookieByLoginName } from "../cookies"; type ResetPasswordCommand = { @@ -46,6 +49,7 @@ export type UpdateSessionCommand = { organization?: string; checks: Checks; authRequestId?: string; + forceMfa?: boolean; }; export async function sendPassword(command: UpdateSessionCommand) { @@ -57,13 +61,18 @@ export async function sendPassword(command: UpdateSessionCommand) { }); let session; + let user: User; if (!sessionCookie) { const users = await listUsers({ loginName: command.loginName, organizationId: command.organization, }); + console.log(users); + if (users.details?.totalResult == BigInt(1) && users.result[0].userId) { + user = users.result[0]; + const checks = create(ChecksSchema, { user: { search: { case: "userId", value: users.result[0].userId } }, password: { password: command.checks.password?.password }, @@ -85,6 +94,18 @@ export async function sendPassword(command: UpdateSessionCommand) { undefined, command.authRequestId, ); + + if (!session?.factors?.user?.id) { + return { error: "Could not create session for user" }; + } + + const userResponse = await getUserByID(session?.factors?.user?.id); + + if (!userResponse.user) { + return { error: "Could not find user" }; + } + + user = userResponse.user; } if (!session?.factors?.user?.id || !sessionCookie) { @@ -102,12 +123,151 @@ export async function sendPassword(command: UpdateSessionCommand) { } } - return { + const submitted = { sessionId: session.id, factors: session.factors, challenges: session.challenges, authMethods, + userState: user.state, }; + + if ( + !submitted || + !submitted.authMethods || + !submitted.factors?.user?.loginName + ) { + return { error: "Could not verify password!" }; + } + + const availableSecondFactors = submitted?.authMethods?.filter( + (m: AuthenticationMethodType) => + m !== AuthenticationMethodType.PASSWORD && + m !== AuthenticationMethodType.PASSKEY, + ); + + if (availableSecondFactors?.length == 1) { + const params = new URLSearchParams({ + loginName: submitted.factors?.user.loginName, + }); + + if (command.authRequestId) { + params.append("authRequestId", command.authRequestId); + } + + if (command.organization) { + params.append("organization", command.organization); + } + + const factor = availableSecondFactors[0]; + // if passwordless is other method, but user selected password as alternative, perform a login + if (factor === AuthenticationMethodType.TOTP) { + return redirect(`/otp/time-based?` + params); + } else if (factor === AuthenticationMethodType.OTP_SMS) { + return redirect(`/otp/sms?` + params); + } else if (factor === AuthenticationMethodType.OTP_EMAIL) { + return redirect(`/otp/email?` + params); + } else if (factor === AuthenticationMethodType.U2F) { + return redirect(`/u2f?` + params); + } + } else if (availableSecondFactors?.length >= 1) { + const params = new URLSearchParams({ + loginName: submitted.factors.user.loginName, + }); + + if (command.authRequestId) { + params.append("authRequestId", command.authRequestId); + } + + if (command.organization) { + params.append("organization", command.organization); + } + + return redirect(`/mfa?` + params); + } else if (submitted.userState === UserState.INITIAL) { + const params = new URLSearchParams({ + loginName: submitted.factors.user.loginName, + }); + + if (command.authRequestId) { + params.append("authRequestId", command.authRequestId); + } + + if (command.organization) { + params.append("organization", command.organization); + } + + return redirect(`/password/change?` + params); + } else if (command.forceMfa && !availableSecondFactors.length) { + const params = new URLSearchParams({ + loginName: submitted.factors.user.loginName, + force: "true", // this defines if the mfa is forced in the settings + checkAfter: "true", // this defines if the check is directly made after the setup + }); + + if (command.authRequestId) { + params.append("authRequestId", command.authRequestId); + } + + if (command.organization) { + params.append("organization", command.organization); + } + + // TODO: provide a way to setup passkeys on mfa page? + return redirect(`/mfa/set?` + params); + } + // TODO: implement passkey setup + + // else if ( + // submitted.factors && + // !submitted.factors.webAuthN && // if session was not verified with a passkey + // promptPasswordless && // if explicitly prompted due policy + // !isAlternative // escaped if password was used as an alternative method + // ) { + // const params = new URLSearchParams({ + // loginName: submitted.factors.user.loginName, + // prompt: "true", + // }); + + // if (authRequestId) { + // params.append("authRequestId", authRequestId); + // } + + // if (organization) { + // params.append("organization", organization); + // } + + // return router.push(`/passkey/set?` + params); + // } + else if (command.authRequestId && submitted.sessionId) { + const params = new URLSearchParams({ + sessionId: submitted.sessionId, + authRequest: command.authRequestId, + }); + + if (command.organization) { + params.append("organization", command.organization); + } + + return redirect(`/login?` + params); + } + + // without OIDC flow + const params = new URLSearchParams( + command.authRequestId + ? { + loginName: submitted.factors.user.loginName, + authRequestId: command.authRequestId, + } + : { + loginName: submitted.factors.user.loginName, + }, + ); + + if (command.organization) { + params.append("organization", command.organization); + } + + return redirect(`/signedin?` + params); } export async function changePassword(command: { From 3c0f24367965aa3a6d9e940773f2740a97980bfa Mon Sep 17 00:00:00 2001 From: peintnermax Date: Thu, 17 Oct 2024 10:09:05 +0200 Subject: [PATCH 09/12] cleanup flow diagram --- apps/login/readme.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps/login/readme.md b/apps/login/readme.md index 14a9e386..e65bd64b 100644 --- a/apps/login/readme.md +++ b/apps/login/readme.md @@ -32,10 +32,7 @@ This diagram shows the available pages and flows. otp --> B[signedin] mfa--> u2f u2f -->B[signedin] - register --> passkey-add - register --> password-set - password-set --> B[signedin] - passkey-add --> B[signedin] + register -- password/passkey --> B[signedin] password --> B[signedin] password-- forceMFA -->mfaset mfaset --> u2fset From 3e9d406db22979713acba6ed8932d5f54098c851 Mon Sep 17 00:00:00 2001 From: peintnermax Date: Thu, 17 Oct 2024 10:14:14 +0200 Subject: [PATCH 10/12] flowdiagram --- README.md | 11 +++++++---- apps/login/readme.md | 2 ++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6916ed2b..a9b346d7 100644 --- a/README.md +++ b/README.md @@ -115,14 +115,17 @@ You can already use the current state, and extend it with your needs. passkey --> B[signedin] password -- hasMFA --> mfa password -- allowPasskeys --> passkey-add + password -- reset --> password-set + email -- reset --> password-set + password-set --> B[signedin] + password-cahnge --> B[signedin] + password -- userstate=initial --> password-change + mfa --> otp otp --> B[signedin] mfa--> u2f u2f -->B[signedin] - register --> passkey-add - register --> password-set - password-set --> B[signedin] - passkey-add --> B[signedin] + register -- password/passkey --> B[signedin] password --> B[signedin] password-- forceMFA -->mfaset mfaset --> u2fset diff --git a/apps/login/readme.md b/apps/login/readme.md index e65bd64b..2ec49b38 100644 --- a/apps/login/readme.md +++ b/apps/login/readme.md @@ -26,6 +26,8 @@ This diagram shows the available pages and flows. password -- allowPasskeys --> passkey-add password -- reset --> password-set email -- reset --> password-set + password-set --> B[signedin] + password-cahnge --> B[signedin] password -- userstate=initial --> password-change mfa --> otp From 7837d61a1c6032e0ba5f94746b6d711707a656e8 Mon Sep 17 00:00:00 2001 From: peintnermax Date: Thu, 17 Oct 2024 10:15:03 +0200 Subject: [PATCH 11/12] typo --- README.md | 2 +- apps/login/readme.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a9b346d7..ec33bf51 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ You can already use the current state, and extend it with your needs. password -- reset --> password-set email -- reset --> password-set password-set --> B[signedin] - password-cahnge --> B[signedin] + password-change --> B[signedin] password -- userstate=initial --> password-change mfa --> otp diff --git a/apps/login/readme.md b/apps/login/readme.md index 2ec49b38..190fcf60 100644 --- a/apps/login/readme.md +++ b/apps/login/readme.md @@ -27,7 +27,7 @@ This diagram shows the available pages and flows. password -- reset --> password-set email -- reset --> password-set password-set --> B[signedin] - password-cahnge --> B[signedin] + password-change --> B[signedin] password -- userstate=initial --> password-change mfa --> otp From 7d871f39548d083d91c27485c9f0d575b465a632 Mon Sep 17 00:00:00 2001 From: peintnermax Date: Thu, 17 Oct 2024 10:19:13 +0200 Subject: [PATCH 12/12] login after password change --- .../src/components/change-password-form.tsx | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/apps/login/src/components/change-password-form.tsx b/apps/login/src/components/change-password-form.tsx index d54210c1..ccdcd792 100644 --- a/apps/login/src/components/change-password-form.tsx +++ b/apps/login/src/components/change-password-form.tsx @@ -7,6 +7,9 @@ import { upperCaseValidator, } from "@/helpers/validators"; import { setMyPassword } from "@/lib/self"; +import { sendPassword } from "@/lib/server/password"; +import { create } from "@zitadel/client"; +import { ChecksSchema } from "@zitadel/proto/zitadel/session/v2/session_service_pb"; import { PasswordComplexitySettings } from "@zitadel/proto/zitadel/settings/v2/password_settings_pb"; import { useTranslations } from "next-intl"; import { useRouter } from "next/navigation"; @@ -58,7 +61,7 @@ export function ChangePasswordForm({ async function submitChange(values: Inputs) { setLoading(true); - const response = await setMyPassword({ + const changeResponse = await setMyPassword({ sessionId: sessionId, password: values.password, }).catch(() => { @@ -67,36 +70,40 @@ export function ChangePasswordForm({ setLoading(false); - if (response && "error" in response) { - setError(response.error); + if (changeResponse && "error" in changeResponse) { + setError(changeResponse.error); return; } - if (!response) { + if (!changeResponse) { setError("Could not change password"); return; } - const params = new URLSearchParams({}); + const passwordResponse = await sendPassword({ + loginName, + organization, + checks: create(ChecksSchema, { + password: { password: values.password }, + }), + authRequestId, + }).catch(() => { + setLoading(false); + setError("Could not verify password"); + return; + }); - if (loginName) { - params.append("loginName", loginName); - } - if (organization) { - params.append("organization", organization); - } + setLoading(false); - if (authRequestId && sessionId) { - if (authRequestId) { - params.append("authRequest", authRequestId); - } - return router.push(`/login?` + params); - } else { - if (authRequestId) { - params.append("authRequestId", authRequestId); - } - return router.push(`/signedin?` + params); + if ( + passwordResponse && + "error" in passwordResponse && + passwordResponse.error + ) { + setError(passwordResponse.error); } + + return; } const { errors } = formState;