fixed oidc stuff
Some checks failed
Build & Push Docker Images / build (push) Failing after 18s

This commit is contained in:
Thomas Faour 2025-08-11 19:07:29 -04:00
parent cc3cf2619c
commit f177475779
4 changed files with 27 additions and 23 deletions

View File

@ -22,26 +22,19 @@ app.use(session({
})); }));
/* OIDC setup (lazy) */ /* OIDC setup (lazy) */
type OidcConfig = { type OidcConfig = { issuer:string; clientId:string; clientSecret:string; redirectUri:string; providerName:string; };
issuer:string;
clientId:string;
clientSecret:string;
redirectUri:string;
providerName:string;
};
function loadOidcConfig(): OidcConfig { function loadOidcConfig(): OidcConfig {
const issuer = process.env.OIDC_ISSUER || ''; const cfg = {
const clientId = process.env.OIDC_CLIENT_ID || ''; issuer: process.env.OIDC_ISSUER || '',
const clientSecret = process.env.OIDC_CLIENT_SECRET || ''; clientId: process.env.OIDC_CLIENT_ID || '',
const redirectUri = process.env.OIDC_REDIRECT_URI || ''; clientSecret: process.env.OIDC_CLIENT_SECRET || '',
const providerName = process.env.OIDC_PROVIDER || 'Identity Provider'; redirectUri: process.env.OIDC_REDIRECT_URI || '',
if (!issuer || !clientId || !clientSecret || !redirectUri) { providerName: process.env.OIDC_PROVIDER || 'Identity Provider'
throw new Error('OIDC env vars incomplete (OIDC_ISSUER / OIDC_CLIENT_ID / OIDC_CLIENT_SECRET / OIDC_REDIRECT_URI)'); };
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')) { return cfg;
log.warn('Using placeholder OIDC_CLIENT_SECRET replace before production.');
}
return { issuer, clientId, clientSecret, redirectUri, providerName };
} }
const oidcCfg = loadOidcConfig(); const oidcCfg = loadOidcConfig();
let oidcClient: Client | null = null; 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); const port = Number(process.env.PORT||8080);
app.listen(port, ()=> { app.listen(port, ()=> {
log.info({ log.info({

View File

@ -34,17 +34,19 @@ services:
dockerfile: Dockerfile dockerfile: Dockerfile
args: args:
VITE_API_BASE: ${VITE_API_BASE:-http://localhost:8080} 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_MKT: ${VITE_BING_MKT:-en-US}
VITE_BING_DISABLE: ${VITE_BING_DISABLE:-0} VITE_BING_DISABLE: ${VITE_BING_DISABLE:-0}
environment: environment:
VITE_API_BASE: ${VITE_API_BASE:-http://localhost:8080} VITE_API_BASE: ${VITE_API_BASE:-http://localhost:8080}
OIDC_PROVIDER: ${OIDC_PROVIDER:-AuthServer}
VITE_BING_MKT: ${VITE_BING_MKT:-en-US} VITE_BING_MKT: ${VITE_BING_MKT:-en-US}
VITE_BING_DISABLE: ${VITE_BING_DISABLE:-0} VITE_BING_DISABLE: ${VITE_BING_DISABLE:-0}
ports: ports:
- "5173:80" - "5173:80"
depends_on: depends_on:
- backend - backend
volumes:
backend_data: {}
- backend
volumes: volumes:
backend_data: {} backend_data: {}

View File

@ -6,10 +6,12 @@ COPY index.html vite.config.ts tsconfig.json ./
COPY src ./src COPY src ./src
ARG VITE_API_BASE ARG VITE_API_BASE
ARG OIDC_PROVIDER ARG OIDC_PROVIDER
ARG VITE_OIDC_PROVIDER
ARG VITE_BING_MKT ARG VITE_BING_MKT
ARG VITE_BING_DISABLE ARG VITE_BING_DISABLE
ENV VITE_API_BASE=$VITE_API_BASE ENV VITE_API_BASE=$VITE_API_BASE
ENV OIDC_PROVIDER=$OIDC_PROVIDER ENV OIDC_PROVIDER=$OIDC_PROVIDER
ENV VITE_OIDC_PROVIDER=${VITE_OIDC_PROVIDER:-$OIDC_PROVIDER}
ENV VITE_BING_MKT=$VITE_BING_MKT ENV VITE_BING_MKT=$VITE_BING_MKT
ENV VITE_BING_DISABLE=$VITE_BING_DISABLE ENV VITE_BING_DISABLE=$VITE_BING_DISABLE
RUN npm run build RUN npm run build

View File

@ -10,6 +10,7 @@ interface Props {
export const LoginScreen: React.FC<Props> = ({ theme, onToggleTheme, onLogin, market='en-US' }) => { export const LoginScreen: React.FC<Props> = ({ theme, onToggleTheme, onLogin, market='en-US' }) => {
const [bgUrl,setBgUrl] = useState<string|null>(null); const [bgUrl,setBgUrl] = useState<string|null>(null);
const [attribution,setAttribution] = useState<string>(''); const [attribution,setAttribution] = useState<string>('');
const providerName = (import.meta.env.VITE_OIDC_PROVIDER as string) || 'Identity Provider';
useEffect(()=>{ useEffect(()=>{
let cancelled = false; let cancelled = false;
@ -27,8 +28,6 @@ export const LoginScreen: React.FC<Props> = ({ theme, onToggleTheme, onLogin, ma
return ()=> { cancelled = true; }; return ()=> { cancelled = true; };
}, [market]); }, [market]);
const providerName: string = (typeof __OIDC_PROVIDER__ !== 'undefined' && __OIDC_PROVIDER__) || 'Identity Provider';
return ( return (
<div style={{ <div style={{
position:'relative', position:'relative',
@ -147,3 +146,4 @@ const iconButtonStyle: React.CSSProperties = {
boxShadow:'0 4px 14px -4px rgba(0,0,0,0.4)', boxShadow:'0 4px 14px -4px rgba(0,0,0,0.4)',
transition:'background .2s' transition:'background .2s'
}; };
};