2026-04-07 22:48:59 +02:00
|
|
|
/**
|
|
|
|
|
* CSRF double-submit cookie utility.
|
|
|
|
|
*
|
|
|
|
|
* Reads the `oxicloud_csrf` cookie (which is NOT HttpOnly) and provides
|
|
|
|
|
* its value as the `X-CSRF-Token` header on mutating requests.
|
|
|
|
|
*
|
|
|
|
|
* Usage:
|
|
|
|
|
* // In any fetch call that changes state:
|
|
|
|
|
* fetch(url, { method: 'POST', headers: { ...getCsrfHeaders(), 'Content-Type': 'application/json' } })
|
|
|
|
|
*
|
|
|
|
|
* The server-side `csrf_middleware` validates that the header value matches
|
|
|
|
|
* the cookie for every POST/PUT/DELETE/PATCH request authenticated via
|
|
|
|
|
* HttpOnly cookies.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
function getCsrfToken() {
|
|
|
|
|
const match = document.cookie.split('; ').find((row) => row.startsWith('oxicloud_csrf='));
|
|
|
|
|
return match ? match.split('=')[1] : '';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getCsrfHeaders() {
|
|
|
|
|
const token = getCsrfToken();
|
|
|
|
|
return token ? { 'X-CSRF-Token': token } : {};
|
|
|
|
|
}
|
2026-04-13 15:09:10 +02:00
|
|
|
|
|
|
|
|
export { getCsrfHeaders, getCsrfToken };
|