- Runtime container env injected by docker/entrypoint.sh -> runtime-env.js (loaded before the bundle); src/lib/runtime-env.ts reads it. FABRIC_OIDC_ONLY hides the password form; FIX_TO_CENTER pins the Center base and hides its input. Dockerfile ENTRYPOINT + ENV defaults. - LoginPage: 'Sign in with SSO' when /auth/oidc/status enabled; password form gated by OIDC_ONLY; center input gated by FIX_TO_CENTER. - /oidc route (OidcCallback) redeems the fragment ticket via /auth/oidc/exchange and adopts the session (AuthContext.adoptSession). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
22 lines
712 B
TypeScript
22 lines
712 B
TypeScript
import { createContext, useContext } from 'react'
|
|
import type { AuthSession } from '../lib/auth-storage'
|
|
|
|
export type AuthContextValue = {
|
|
session: AuthSession | null
|
|
isAuthed: boolean
|
|
login: (centerApiBase: string, email: string, password: string) => Promise<void>
|
|
adoptSession: (session: AuthSession) => void
|
|
logout: () => Promise<void>
|
|
ensureFreshToken: () => Promise<string | null>
|
|
refreshGuilds: () => Promise<void>
|
|
updateName: (name: string) => Promise<void>
|
|
}
|
|
|
|
export const AuthContext = createContext<AuthContextValue | null>(null)
|
|
|
|
export function useAuth() {
|
|
const ctx = useContext(AuthContext)
|
|
if (!ctx) throw new Error('useAuth must be used inside <AuthProvider>')
|
|
return ctx
|
|
}
|