mirror of
https://github.com/zitadel/zitadel.git
synced 2025-12-12 10:04:25 +00:00
catch org context
This commit is contained in:
@@ -1,22 +0,0 @@
|
|||||||
import { headers } from "next/headers";
|
|
||||||
|
|
||||||
export default function Page() {
|
|
||||||
const headersList = headers();
|
|
||||||
const hds = [
|
|
||||||
"x-zitadel-login-client",
|
|
||||||
"forwarded",
|
|
||||||
"x-zitadel-forwarded",
|
|
||||||
"host",
|
|
||||||
"referer",
|
|
||||||
];
|
|
||||||
return (
|
|
||||||
<div className="space-y-8">
|
|
||||||
<h1 className="text-xl font-medium">Headers</h1>
|
|
||||||
{hds.map((h) => (
|
|
||||||
<p key={h}>
|
|
||||||
{h}:{headersList.get(h)}
|
|
||||||
</p>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@@ -3,11 +3,14 @@ import React from "react";
|
|||||||
import { getBrandingSettings, server } from "#/lib/zitadel";
|
import { getBrandingSettings, server } from "#/lib/zitadel";
|
||||||
import { Logo } from "#/ui/Logo";
|
import { Logo } from "#/ui/Logo";
|
||||||
|
|
||||||
export default async function Template({
|
export default async function Layout({
|
||||||
children,
|
children,
|
||||||
|
params,
|
||||||
}: {
|
}: {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
params: any;
|
||||||
}) {
|
}) {
|
||||||
|
console.log(params);
|
||||||
const branding = await getBrandingSettings(server);
|
const branding = await getBrandingSettings(server);
|
||||||
let partial: Partial<BrandingSettings> | undefined;
|
let partial: Partial<BrandingSettings> | undefined;
|
||||||
if (branding) {
|
if (branding) {
|
||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
server,
|
server,
|
||||||
} from "#/lib/zitadel";
|
} from "#/lib/zitadel";
|
||||||
import { SessionCookie, getAllSessions } from "#/utils/cookies";
|
import { SessionCookie, getAllSessions } from "#/utils/cookies";
|
||||||
import { Session, AuthRequest, Prompt } from "@zitadel/server";
|
import { Session, AuthRequest, Prompt, login } from "@zitadel/server";
|
||||||
import { NextRequest, NextResponse } from "next/server";
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
|
|
||||||
async function loadSessions(ids: string[]): Promise<Session[]> {
|
async function loadSessions(ids: string[]): Promise<Session[]> {
|
||||||
@@ -82,25 +82,29 @@ export async function GET(request: NextRequest) {
|
|||||||
if (authRequestId) {
|
if (authRequestId) {
|
||||||
console.log(`Login with authRequest: ${authRequestId}`);
|
console.log(`Login with authRequest: ${authRequestId}`);
|
||||||
const { authRequest } = await getAuthRequest(server, { authRequestId });
|
const { authRequest } = await getAuthRequest(server, { authRequestId });
|
||||||
|
let organization;
|
||||||
|
|
||||||
|
if (
|
||||||
|
authRequest?.scope &&
|
||||||
|
authRequest.scope.find((s) => ORG_SCOPE_REGEX.test(s))
|
||||||
|
) {
|
||||||
|
const orgId = authRequest.scope.find((s) => ORG_SCOPE_REGEX.test(s));
|
||||||
|
|
||||||
|
if (orgId) {
|
||||||
|
const matched = orgId.replace("urn:zitadel:iam:org:id:", "");
|
||||||
|
organization = matched;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (authRequest && authRequest.prompt.includes(Prompt.PROMPT_CREATE)) {
|
if (authRequest && authRequest.prompt.includes(Prompt.PROMPT_CREATE)) {
|
||||||
const registerUrl = new URL("/register", request.url);
|
const registerUrl = new URL("/register", request.url);
|
||||||
if (authRequest?.id) {
|
if (authRequest?.id) {
|
||||||
registerUrl.searchParams.set("authRequestId", authRequest?.id);
|
registerUrl.searchParams.set("authRequestId", authRequest?.id);
|
||||||
}
|
}
|
||||||
|
if (organization) {
|
||||||
if (
|
registerUrl.searchParams.set("organization", organization);
|
||||||
authRequest.scope &&
|
|
||||||
authRequest.scope.find((s) => ORG_SCOPE_REGEX.test(s))
|
|
||||||
) {
|
|
||||||
const orgId = authRequest.scope
|
|
||||||
.find((s) => ORG_SCOPE_REGEX.test(s))
|
|
||||||
?.match(ORG_SCOPE_REGEX)?.[1];
|
|
||||||
console.log(orgId);
|
|
||||||
if (orgId) {
|
|
||||||
registerUrl.searchParams.set("orgId", orgId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NextResponse.redirect(registerUrl);
|
return NextResponse.redirect(registerUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,6 +116,9 @@ export async function GET(request: NextRequest) {
|
|||||||
if (authRequest?.id) {
|
if (authRequest?.id) {
|
||||||
accountsUrl.searchParams.set("authRequestId", authRequest?.id);
|
accountsUrl.searchParams.set("authRequestId", authRequest?.id);
|
||||||
}
|
}
|
||||||
|
if (organization) {
|
||||||
|
accountsUrl.searchParams.set("organization", organization);
|
||||||
|
}
|
||||||
|
|
||||||
return NextResponse.redirect(accountsUrl);
|
return NextResponse.redirect(accountsUrl);
|
||||||
} else if (authRequest.prompt.includes(Prompt.PROMPT_LOGIN)) {
|
} else if (authRequest.prompt.includes(Prompt.PROMPT_LOGIN)) {
|
||||||
@@ -123,6 +130,9 @@ export async function GET(request: NextRequest) {
|
|||||||
if (authRequest.loginHint) {
|
if (authRequest.loginHint) {
|
||||||
loginNameUrl.searchParams.set("loginName", authRequest.loginHint);
|
loginNameUrl.searchParams.set("loginName", authRequest.loginHint);
|
||||||
}
|
}
|
||||||
|
if (organization) {
|
||||||
|
loginNameUrl.searchParams.set("organization", organization);
|
||||||
|
}
|
||||||
return NextResponse.redirect(loginNameUrl);
|
return NextResponse.redirect(loginNameUrl);
|
||||||
} else if (authRequest.prompt.includes(Prompt.PROMPT_NONE)) {
|
} else if (authRequest.prompt.includes(Prompt.PROMPT_NONE)) {
|
||||||
// NONE prompt - silent authentication
|
// NONE prompt - silent authentication
|
||||||
@@ -178,13 +188,17 @@ export async function GET(request: NextRequest) {
|
|||||||
} else {
|
} else {
|
||||||
const accountsUrl = new URL("/accounts", request.url);
|
const accountsUrl = new URL("/accounts", request.url);
|
||||||
accountsUrl.searchParams.set("authRequestId", authRequestId);
|
accountsUrl.searchParams.set("authRequestId", authRequestId);
|
||||||
|
if (organization) {
|
||||||
|
accountsUrl.searchParams.set("organization", organization);
|
||||||
|
}
|
||||||
return NextResponse.redirect(accountsUrl);
|
return NextResponse.redirect(accountsUrl);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const accountsUrl = new URL("/accounts", request.url);
|
const accountsUrl = new URL("/accounts", request.url);
|
||||||
accountsUrl.searchParams.set("authRequestId", authRequestId);
|
accountsUrl.searchParams.set("authRequestId", authRequestId);
|
||||||
|
if (organization) {
|
||||||
|
accountsUrl.searchParams.set("organization", organization);
|
||||||
|
}
|
||||||
return NextResponse.redirect(accountsUrl);
|
return NextResponse.redirect(accountsUrl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -197,6 +211,10 @@ export async function GET(request: NextRequest) {
|
|||||||
loginNameUrl.searchParams.set("submit", "true"); // autosubmit
|
loginNameUrl.searchParams.set("submit", "true"); // autosubmit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (organization) {
|
||||||
|
loginNameUrl.searchParams.set("organization", organization);
|
||||||
|
}
|
||||||
|
|
||||||
return NextResponse.redirect(loginNameUrl);
|
return NextResponse.redirect(loginNameUrl);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user