From eabfb489782a48c1c1913d1777c0117ece6849a7 Mon Sep 17 00:00:00 2001 From: Stavros Date: Fri, 19 Jun 2026 18:08:59 +0300 Subject: [PATCH 1/4] chore: merge oidc prompt --- frontend/src/lib/hooks/screen-params.ts | 2 + frontend/src/pages/authorize-page.tsx | 26 +++++++-- frontend/src/pages/login-page.tsx | 7 ++- internal/controller/oidc_controller.go | 78 +++++++++++++++++++------ internal/model/context.go | 2 + internal/service/oidc_service.go | 41 +++++++++++-- 6 files changed, 127 insertions(+), 29 deletions(-) diff --git a/frontend/src/lib/hooks/screen-params.ts b/frontend/src/lib/hooks/screen-params.ts index 921fa4b6..abf3a41a 100644 --- a/frontend/src/lib/hooks/screen-params.ts +++ b/frontend/src/lib/hooks/screen-params.ts @@ -6,6 +6,7 @@ type ScreenParams = { oidc_ticket?: string; oidc_scope?: string; oidc_name?: string; + oidc_prompt?: "none" | "login"; }; const zodScreenParams = z.object({ @@ -14,6 +15,7 @@ const zodScreenParams = z.object({ oidc_ticket: z.string().optional(), oidc_scope: z.string().optional(), oidc_name: z.string().optional(), + oidc_prompt: z.enum(["none", "login"]).optional(), }); export function useScreenParams(params: URLSearchParams): ScreenParams { diff --git a/frontend/src/pages/authorize-page.tsx b/frontend/src/pages/authorize-page.tsx index ae355be0..0f14a583 100644 --- a/frontend/src/pages/authorize-page.tsx +++ b/frontend/src/pages/authorize-page.tsx @@ -25,6 +25,7 @@ import { recompileScreenParams, useScreenParams, } from "@/lib/hooks/screen-params"; +import { useEffect } from "react"; type Scope = { id: string; @@ -90,7 +91,15 @@ export const AuthorizePage = () => { const isOidc = screenParams.login_for === "oidc"; const compiledParams = recompileScreenParams(screenParams); - const authorizeMutation = useMutation({ + // TODO: maybe a better way to do this + const shouldAutoAuthorize = + auth.authenticated && + isOidc && + screenParams.oidc_ticket !== undefined && + screenParams.oidc_scope !== undefined && + screenParams.oidc_prompt === "none"; + + const { mutate: authorizeMutate, isPending: authorizePending } = useMutation({ mutationFn: () => { return axios.post("/api/oidc/authorize-complete", { ticket: screenParams.oidc_ticket, @@ -110,6 +119,12 @@ export const AuthorizePage = () => { }, }); + useEffect(() => { + if (shouldAutoAuthorize) { + authorizeMutate(); + } + }, [shouldAutoAuthorize, authorizeMutate]); + if (!isOidc || !screenParams.oidc_ticket || !screenParams.oidc_scope) { return ( { ); } - if (!auth.authenticated) { + if (!auth.authenticated || screenParams.oidc_prompt === "login") { return ; } @@ -168,14 +183,15 @@ export const AuthorizePage = () => { )}