diff --git a/backend/src/server.ts b/backend/src/server.ts index 9941fac..e9677ea 100644 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -22,26 +22,19 @@ app.use(session({ })); /* OIDC setup (lazy) */ -type OidcConfig = { - issuer:string; - clientId:string; - clientSecret:string; - redirectUri:string; - providerName:string; -}; -function loadOidcConfig():OidcConfig { - const issuer = process.env.OIDC_ISSUER || ''; - const clientId = process.env.OIDC_CLIENT_ID || ''; - const clientSecret = process.env.OIDC_CLIENT_SECRET || ''; - const redirectUri = process.env.OIDC_REDIRECT_URI || ''; - const providerName = process.env.OIDC_PROVIDER || 'Identity Provider'; - if (!issuer || !clientId || !clientSecret || !redirectUri) { - throw new Error('OIDC env vars incomplete (OIDC_ISSUER / OIDC_CLIENT_ID / OIDC_CLIENT_SECRET / OIDC_REDIRECT_URI)'); +type OidcConfig = { issuer:string; clientId:string; clientSecret:string; redirectUri:string; providerName:string; }; +function loadOidcConfig(): OidcConfig { + const cfg = { + issuer: process.env.OIDC_ISSUER || '', + clientId: process.env.OIDC_CLIENT_ID || '', + clientSecret: process.env.OIDC_CLIENT_SECRET || '', + redirectUri: process.env.OIDC_REDIRECT_URI || '', + providerName: process.env.OIDC_PROVIDER || 'Identity Provider' + }; + if (!cfg.issuer || !cfg.clientId || !cfg.clientSecret || !cfg.redirectUri) { + throw new Error('Missing OIDC env (OIDC_ISSUER, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_REDIRECT_URI)'); } - if (clientSecret.includes('replace-with-real-secret')) { - log.warn('Using placeholder OIDC_CLIENT_SECRET – replace before production.'); - } - return { issuer, clientId, clientSecret, redirectUri, providerName }; + return cfg; } const oidcCfg = loadOidcConfig(); let oidcClient: Client | null = null; @@ -178,6 +171,13 @@ app.get('/api/auth/config', (_req,res)=>{ }); }); +const port = Number(process.env.PORT||8080); +app.listen(port, ()=> log.info({ + port, + oidc: { issuer: oidcCfg.issuer, redirect: oidcCfg.redirectUri, provider: oidcCfg.providerName } +}, 'listening')); +}); + const port = Number(process.env.PORT||8080); app.listen(port, ()=> { log.info({ diff --git a/docker-compose.yml b/docker-compose.yml index 26cde0c..ddcac14 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -34,17 +34,19 @@ services: dockerfile: Dockerfile args: VITE_API_BASE: ${VITE_API_BASE:-http://localhost:8080} - OIDC_PROVIDER: ${OIDC_PROVIDER:-AuthServer} + VITE_OIDC_PROVIDER: ${OIDC_PROVIDER:-AuthServer} VITE_BING_MKT: ${VITE_BING_MKT:-en-US} VITE_BING_DISABLE: ${VITE_BING_DISABLE:-0} environment: VITE_API_BASE: ${VITE_API_BASE:-http://localhost:8080} - OIDC_PROVIDER: ${OIDC_PROVIDER:-AuthServer} VITE_BING_MKT: ${VITE_BING_MKT:-en-US} VITE_BING_DISABLE: ${VITE_BING_DISABLE:-0} ports: - "5173:80" depends_on: - backend +volumes: + backend_data: {} + - backend volumes: backend_data: {} diff --git a/frontend/Dockerfile b/frontend/Dockerfile index cecae15..0507981 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -6,10 +6,12 @@ COPY index.html vite.config.ts tsconfig.json ./ COPY src ./src ARG VITE_API_BASE ARG OIDC_PROVIDER +ARG VITE_OIDC_PROVIDER ARG VITE_BING_MKT ARG VITE_BING_DISABLE ENV VITE_API_BASE=$VITE_API_BASE ENV OIDC_PROVIDER=$OIDC_PROVIDER +ENV VITE_OIDC_PROVIDER=${VITE_OIDC_PROVIDER:-$OIDC_PROVIDER} ENV VITE_BING_MKT=$VITE_BING_MKT ENV VITE_BING_DISABLE=$VITE_BING_DISABLE RUN npm run build diff --git a/frontend/src/components/LoginScreen.tsx b/frontend/src/components/LoginScreen.tsx index 53c292e..e2195fc 100644 --- a/frontend/src/components/LoginScreen.tsx +++ b/frontend/src/components/LoginScreen.tsx @@ -10,6 +10,7 @@ interface Props { export const LoginScreen: React.FC = ({ theme, onToggleTheme, onLogin, market='en-US' }) => { const [bgUrl,setBgUrl] = useState(null); const [attribution,setAttribution] = useState(''); + const providerName = (import.meta.env.VITE_OIDC_PROVIDER as string) || 'Identity Provider'; useEffect(()=>{ let cancelled = false; @@ -27,8 +28,6 @@ export const LoginScreen: React.FC = ({ theme, onToggleTheme, onLogin, ma return ()=> { cancelled = true; }; }, [market]); - const providerName: string = (typeof __OIDC_PROVIDER__ !== 'undefined' && __OIDC_PROVIDER__) || 'Identity Provider'; - return (