server, middleware, load label policy 🏷️

This commit is contained in:
Max Peintner
2023-04-21 15:13:14 +02:00
parent 12eb60c084
commit 12b9042392
9 changed files with 65 additions and 32 deletions

View File

@@ -1,4 +1,5 @@
import { demos } from "#/lib/demos"; import { demos } from "#/lib/demos";
import ThemeWrapper from "#/ui/ThemeWrapper";
import Link from "next/link"; import Link from "next/link";
export default function Page() { export default function Page() {

14
apps/login/lib/hooks.ts Normal file
View File

@@ -0,0 +1,14 @@
import { useEffect, useState } from "react";
// Custom hook to read auth record and user profile doc
export function useUserData() {
const [clientData, setClientData] = useState(null);
useEffect(() => {
let unsubscribe;
return unsubscribe;
}, [clientData]);
return { clientData };
}

View File

@@ -3,31 +3,37 @@ import {
ZitadelServer, ZitadelServer,
ZitadelServerOptions, ZitadelServerOptions,
getManagement, getManagement,
orgMetadata,
getServer, getServer,
getServers, getServers,
initializeServer,
LabelPolicy, LabelPolicy,
initializeServer,
} from "@zitadel/server"; } from "@zitadel/server";
// import { getAuth } from "@zitadel/server/auth"; // import { getAuth } from "@zitadel/server/auth";
export const zitadelConfig: ZitadelServerOptions = { export const zitadelConfig: ZitadelServerOptions = {
name: "zitadel login",
apiUrl: process.env.ZITADEL_API_URL ?? "", apiUrl: process.env.ZITADEL_API_URL ?? "",
token: process.env.ZITADEL_SERVICE_USER_TOKEN ?? "", token: process.env.ZITADEL_SERVICE_USER_TOKEN ?? "",
}; };
if (!getServers().length) { let server: ZitadelServer;
initializeServer(zitadelConfig);
}
const server = getServer(); if (!getServers().length) {
console.log(server); console.log("initialize server");
server = initializeServer(zitadelConfig);
}
export function getBranding( export function getBranding(
server: ZitadelServer server: ZitadelServer
): Promise<LabelPolicy | undefined> { ): Promise<LabelPolicy | undefined> {
const mgmt = getManagement(server); const mgmt = getManagement(server);
return mgmt
return mgmt.getLabelPolicy({}).then((resp) => resp.policy); .getLabelPolicy(
{},
{ metadata: orgMetadata(process.env.ZITADEL_ORG_ID ?? "") }
)
.then((resp) => resp.policy);
} }
export { server }; export { server };

View File

@@ -1,5 +1,3 @@
"use client";
import { ThemeProvider } from "next-themes";
import ThemeWrapper from "./ThemeWrapper"; import ThemeWrapper from "./ThemeWrapper";
type Props = { type Props = {
@@ -8,13 +6,14 @@ type Props = {
export function LayoutProviders({ children }: Props) { export function LayoutProviders({ children }: Props) {
return ( return (
<ThemeProvider // <ThemeProvider
attribute="class" // attribute="class"
defaultTheme="system" // defaultTheme="system"
storageKey="cp-theme" // storageKey="cp-theme"
value={{ dark: "dark" }} // value={{ dark: "dark" }}
> // >
<ThemeWrapper>{children}</ThemeWrapper> /* @ts-expect-error Server Component */
</ThemeProvider> <ThemeWrapper>{children}</ThemeWrapper>
// </ThemeProvider>
); );
} }

View File

@@ -1,12 +1,11 @@
"use client";
import { getBranding } from "#/lib/zitadel"; import { getBranding } from "#/lib/zitadel";
import { useTheme } from "next-themes";
import { server } from "../lib/zitadel"; import { server } from "../lib/zitadel";
import { use } from "react";
const ThemeWrapper = async ({ children }: any) => { const ThemeWrapper = async ({ children }: any) => {
const { resolvedTheme } = useTheme(); console.log("hehe");
const isDark = resolvedTheme && resolvedTheme === "dark"; // const { resolvedTheme } = useTheme();
const isDark = true; //resolvedTheme && resolvedTheme === "dark";
try { try {
const policy = await getBranding(server); const policy = await getBranding(server);

View File

@@ -0,0 +1,3 @@
import { ZitadelServer } from "./server";
export const _servers = new Map<string, ZitadelServer>();

View File

@@ -25,6 +25,7 @@ const createClient = <Client>(
}; };
export const getManagement = (app?: string | ZitadelServer) => { export const getManagement = (app?: string | ZitadelServer) => {
console.log("init management");
let config; let config;
if (app && typeof app === "string") { if (app && typeof app === "string") {
const apps = getServers(); const apps = getServers();

View File

@@ -12,3 +12,6 @@ export const authMiddleware = (token: string) =>
return yield* call.next(call.request, options); return yield* call.next(call.request, options);
}; };
export const orgMetadata = (orgId: string) =>
new Metadata({ "x-zitadel-orgid": orgId });

View File

@@ -9,17 +9,24 @@ export interface ZitadelServerOptions extends ZitadelServerProps {
name?: string; name?: string;
} }
export interface ZitadelServer { export function initializeServer(
name: string | undefined;
config: ZitadelServerProps;
}
export async function initializeServer(
config: ZitadelServerProps, config: ZitadelServerProps,
name?: string name?: string
): Promise<ZitadelServer> { ): ZitadelServer {
const app = { config, name }; const server = new ZitadelServer(config, name);
return app; return server;
}
export class ZitadelServer {
name: string | undefined;
config: ZitadelServerProps;
constructor(config: ZitadelServerProps, name?: string) {
if (name) {
this.name = name;
}
this.config = config;
}
} }
export function getServers(): ZitadelServer[] { export function getServers(): ZitadelServer[] {