/home/techb158/cosmic-risk.abdallabala.com/src/lib
NameSizeModeActions
api-client.js10120644editdlrm
crypto.js16770644editdlrm
email.js21750644editdlrm
http.js5630644editdlrm
idempotency.js5700644editdlrm
metrics.js10610644editdlrm
oidc.js17300644editdlrm
prisma.js2800644editdlrm
rate-limit.js26620644editdlrm
redis.js35170644editdlrm
request-context.js37250644editdlrm
tenant-guard.js14270644editdlrm
Edit: /home/techb158/cosmic-risk.abdallabala.com/src/lib/oidc.js (1730B)
const { randomBytes } = require("crypto"); function getOidcConfig() { if (process.env.COSMIC_SSO_ENABLED !== "true") return null; const issuer = process.env.COSMIC_OIDC_ISSUER; const clientId = process.env.COSMIC_OIDC_CLIENT_ID; const clientSecret = process.env.COSMIC_OIDC_CLIENT_SECRET; if (!issuer || !clientId || !clientSecret) return null; const redirectUrl = process.env.COSMIC_OIDC_REDIRECT_URL || (process.env.NEXT_PUBLIC_APP_URL || "http://localhost:8090") + "/api/auth/sso/callback"; return { issuer, clientId, clientSecret, redirectUrl }; } async function discoverProvider(issuer) { const discoUrl = process.env.COSMIC_OIDC_DISCOVERY_URL || (issuer.replace(/\/+$/, "") + "/.well-known/openid-configuration"); const res = await fetch(discoUrl); if (!res.ok) throw new Error(`OIDC discovery failed (${res.status}) for ${discoUrl}`); return res.json(); } function base64UrlEncode(buf) { return buf.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, ""); } function generateNonce() { return base64UrlEncode(randomBytes(32)); } function generateState() { return base64UrlEncode(randomBytes(32)); } function decodeJwtPayload(jwt) { const parts = jwt.split("."); if (parts.length !== 3) throw new Error("Invalid JWT format"); const payload = Buffer.from(parts[1], "base64url").toString("utf8"); return JSON.parse(payload); } function getCookieExpires() { return new Date(Date.now() + 10 * 60 * 1000).toUTCString(); } function stateCookieName() { return "cosmic_sso_state"; } module.exports = { getOidcConfig, discoverProvider, generateState, generateNonce, decodeJwtPayload, base64UrlEncode, stateCookieName, getCookieExpires, };