47 lines
1.3 KiB
JavaScript
47 lines
1.3 KiB
JavaScript
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
|
|
}
|
|
}
|
|
|
|
|