/home/techb158/balavpn.abdallabala.com/src/lib
Edit: /home/techb158/balavpn.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,
};