function isProduction() { return process.env.NODE_ENV === 'production' } export function getCookieSecureDefault() { // In Produktion: immer Secure (auch wenn HTTPS via Apache terminiert). // In Dev: default false, damit Login über http://localhost funktioniert. if (process.env.COOKIE_SECURE === 'true') return true if (process.env.COOKIE_SECURE === 'false') return false return isProduction() } export function getSameSiteDefault() { // Erwartung aus Security-Feedback: Strict. In Dev ggf. Lax, damit SSO/Flows nicht nerven. const v = (process.env.COOKIE_SAMESITE || '').toLowerCase().trim() if (v === 'strict' || v === 'lax' || v === 'none') return v return isProduction() ? 'strict' : 'lax' } export function getAuthCookieOptions() { return { httpOnly: true, secure: getCookieSecureDefault(), sameSite: getSameSiteDefault(), maxAge: 60 * 60 * 24 * 7 // 7 days } } export function getDownloadCookieOptions() { // Download-Token ist kurzlebig; SameSite strict ist ok. return { httpOnly: true, secure: getCookieSecureDefault(), sameSite: 'strict', maxAge: 60 * 60 * 24 // 24 Stunden } } export function getDownloadCookieOptionsWithMaxAge(maxAgeSeconds) { return { ...getDownloadCookieOptions(), maxAge: Number(maxAgeSeconds) || getDownloadCookieOptions().maxAge } }