2024-10-30 12:46:44 +00:00
|
|
|
window.fetchWithCsrf = async function(url, options = {}) {
|
|
|
|
function getCsrfToken() {
|
|
|
|
const cookieValue = document.cookie
|
|
|
|
.split('; ')
|
|
|
|
.find(row => row.startsWith('XSRF-TOKEN='))
|
|
|
|
?.split('=')[1];
|
2025-01-12 01:18:35 +01:00
|
|
|
|
2024-10-30 12:46:44 +00:00
|
|
|
if (cookieValue) {
|
|
|
|
return cookieValue;
|
|
|
|
}
|
|
|
|
const csrfElement = document.querySelector('input[name="_csrf"]');
|
|
|
|
return csrfElement ? csrfElement.value : null;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Create a new options object to avoid modifying the passed object
|
|
|
|
const fetchOptions = { ...options };
|
2025-01-12 01:18:35 +01:00
|
|
|
|
2024-10-30 12:46:44 +00:00
|
|
|
// Ensure headers object exists
|
|
|
|
fetchOptions.headers = { ...options.headers };
|
2025-01-12 01:18:35 +01:00
|
|
|
|
2024-10-30 12:46:44 +00:00
|
|
|
// Add CSRF token if available
|
|
|
|
const csrfToken = getCsrfToken();
|
|
|
|
if (csrfToken) {
|
|
|
|
fetchOptions.headers['X-XSRF-TOKEN'] = csrfToken;
|
|
|
|
}
|
|
|
|
|
|
|
|
return fetch(url, fetchOptions);
|
2025-01-12 01:18:35 +01:00
|
|
|
}
|