This commit is contained in:
Max Peintner
2024-11-18 10:27:39 +01:00
parent 72f35d9c65
commit 98391c1dd0
5 changed files with 71 additions and 111 deletions

View File

@@ -1,5 +1,6 @@
"use client"; "use client";
import { finishFlow } from "@/lib/login";
import { updateSession } from "@/lib/server/session"; import { updateSession } from "@/lib/server/session";
import { create } from "@zitadel/client"; import { create } from "@zitadel/client";
import { RequestChallengesSchema } from "@zitadel/proto/zitadel/session/v2/challenge_pb"; import { RequestChallengesSchema } from "@zitadel/proto/zitadel/session/v2/challenge_pb";
@@ -154,40 +155,18 @@ export function LoginOTP({
function setCodeAndContinue(values: Inputs, organization?: string) { function setCodeAndContinue(values: Inputs, organization?: string) {
return submitCode(values, organization).then((response) => { return submitCode(values, organization).then((response) => {
if (response) { if (response) {
if (authRequestId && response && response.sessionId) { return authRequestId && response.sessionId
const params = new URLSearchParams({ ? finishFlow({
sessionId: response.sessionId, sessionId: response.sessionId,
authRequest: authRequestId, authRequestId: authRequestId,
}); organization: response.factors?.user?.organizationId,
})
if (organization) { : response.factors?.user
params.append("organization", organization); ? finishFlow({
} loginName: response.factors.user.loginName,
organization: response.factors?.user?.organizationId,
if (authRequestId) { })
params.append("authRequest", authRequestId); : null;
}
if (sessionId) {
params.append("sessionId", sessionId);
}
return router.push(`/login?` + params);
} else {
const params = new URLSearchParams();
if (response?.factors?.user?.loginName) {
params.append("loginName", response.factors.user.loginName);
}
if (authRequestId) {
params.append("authRequestId", authRequestId);
}
if (organization) {
params.append("organization", organization);
}
return router.push(`/signedin?` + params);
}
} }
}); });
} }

View File

@@ -1,6 +1,7 @@
"use client"; "use client";
import { coerceToArrayBuffer, coerceToBase64Url } from "@/helpers/base64"; import { coerceToArrayBuffer, coerceToBase64Url } from "@/helpers/base64";
import { finishFlow } from "@/lib/login";
import { updateSession } from "@/lib/server/session"; import { updateSession } from "@/lib/server/session";
import { create } from "@zitadel/client"; import { create } from "@zitadel/client";
import { import {
@@ -176,26 +177,18 @@ export function LoginPasskey({
}; };
return submitLogin(data).then((resp) => { return submitLogin(data).then((resp) => {
if (authRequestId && resp && resp.sessionId) { return authRequestId && resp?.sessionId
return router.push( ? finishFlow({
`/login?` + sessionId: resp.sessionId,
new URLSearchParams({ authRequestId: authRequestId,
sessionId: resp.sessionId, organization: organization,
authRequest: authRequestId, })
}), : resp?.factors?.user?.loginName
); ? finishFlow({
} else { loginName: resp.factors.user.loginName,
const params = new URLSearchParams({}); organization: organization,
})
if (authRequestId) { : null;
params.set("authRequestId", authRequestId);
}
if (resp?.factors?.user?.loginName) {
params.set("loginName", resp.factors.user.loginName);
}
return router.push(`/signedin?` + params);
}
}); });
}); });
} }

View File

@@ -1,6 +1,7 @@
"use client"; "use client";
import { coerceToArrayBuffer, coerceToBase64Url } from "@/helpers/base64"; import { coerceToArrayBuffer, coerceToBase64Url } from "@/helpers/base64";
import { finishFlow } from "@/lib/login";
import { addU2F, verifyU2F } from "@/lib/server/u2f"; import { addU2F, verifyU2F } from "@/lib/server/u2f";
import { RegisterU2FResponse } from "@zitadel/proto/zitadel/user/v2/user_service_pb"; import { RegisterU2FResponse } from "@zitadel/proto/zitadel/user/v2/user_service_pb";
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
@@ -62,7 +63,7 @@ export function RegisterU2f({
return response; return response;
} }
async function submitRegisterAndContinue(): Promise<boolean | void> { async function submitRegisterAndContinue(): Promise<boolean | void | null> {
setError(""); setError("");
setLoading(true); setLoading(true);
const response = await addU2F({ const response = await addU2F({
@@ -146,38 +147,37 @@ export function RegisterU2f({
return; return;
} }
const paramsToContinue = new URLSearchParams({});
let urlToContinue = "/accounts";
if (sessionId) {
paramsToContinue.append("sessionId", sessionId);
}
if (loginName) {
paramsToContinue.append("loginName", loginName);
}
if (organization) {
paramsToContinue.append("organization", organization);
}
if (checkAfter) { if (checkAfter) {
if (authRequestId) { const paramsToContinue = new URLSearchParams({});
paramsToContinue.append("authRequestId", authRequestId);
}
urlToContinue = `/u2f?` + paramsToContinue;
} else if (authRequestId && sessionId) {
if (authRequestId) {
paramsToContinue.append("authRequest", authRequestId);
}
urlToContinue = `/login?` + paramsToContinue;
} else if (loginName) {
if (authRequestId) {
paramsToContinue.append("authRequestId", authRequestId);
}
urlToContinue = `/signedin?` + paramsToContinue;
}
router.push(urlToContinue); if (sessionId) {
paramsToContinue.append("sessionId", sessionId);
}
if (loginName) {
paramsToContinue.append("loginName", loginName);
}
if (organization) {
paramsToContinue.append("organization", organization);
}
if (authRequestId) {
paramsToContinue.append("authRequestId", authRequestId);
}
return router.push(`/u2f?` + paramsToContinue);
} else {
return authRequestId && sessionId
? finishFlow({
sessionId: sessionId,
authRequestId: authRequestId,
organization: organization,
})
: loginName
? finishFlow({
loginName: loginName,
organization: organization,
})
: null;
}
} }
} }

View File

@@ -1,4 +1,5 @@
"use client"; "use client";
import { finishFlow } from "@/lib/login";
import { verifyTOTP } from "@/lib/server-actions"; import { verifyTOTP } from "@/lib/server-actions";
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import Link from "next/link"; import Link from "next/link";
@@ -67,31 +68,18 @@ export function TotpRegister({
return router.push(`/otp/time-based?` + params); return router.push(`/otp/time-based?` + params);
} else { } else {
if (authRequestId && sessionId) { return authRequestId && sessionId
const params = new URLSearchParams({ ? finishFlow({
sessionId: sessionId, sessionId: sessionId,
authRequest: authRequestId, authRequestId: authRequestId,
}); organization: organization,
})
if (organization) { : loginName
params.append("organization", organization); ? finishFlow({
} loginName: loginName,
organization: organization,
return router.push(`/login?` + params); })
} else if (loginName) { : null;
const params = new URLSearchParams({
loginName,
});
if (authRequestId) {
params.append("authRequestId", authRequestId);
}
if (organization) {
params.append("organization", organization);
}
return router.push(`/signedin?` + params);
}
} }
}) })
.catch((e) => { .catch((e) => {

View File

@@ -8,7 +8,7 @@ type FinishFlowCommand =
| { loginName: string }; | { loginName: string };
/** /**
* redirects user back to OIDC application or to a success page * on client: redirects user back to OIDC application or to a success page
* @param command * @param command
* @returns * @returns
*/ */