/** * 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 } : {}; } export { getCsrfHeaders, getCsrfToken };