From cb09da8b7c8d4d7619e887a52731823b589ba997 Mon Sep 17 00:00:00 2001
From: Erwan Rouchet <rouchet@teklia.com>
Date: Fri, 17 Nov 2023 10:37:58 +0100
Subject: [PATCH] Allow CSRF to a different hostname in dev and Surge builds

---
 .env.development  |  1 +
 package-lock.json | 14 +++++++-------
 package.json      |  2 +-
 src/config.ts     |  1 +
 src/main.ts       |  8 ++++++++
 5 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/.env.development b/.env.development
index d3bda7b1a..56d20a1a0 100644
--- a/.env.development
+++ b/.env.development
@@ -1,2 +1,3 @@
 VUE_APP_API_BASE_URL=http://localhost:8000/api/v1
 VUE_APP_ROUTER_MODE=history
+VUE_APP_CSRF_ALL_ORIGINS=true
diff --git a/package-lock.json b/package-lock.json
index c791f5e32..ff3132a29 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,7 +12,7 @@
         "@sentry/integrations": "^7.16.0",
         "@sentry/vue": "^7.16.0",
         "ansi-to-html": "^0.7.2",
-        "axios": "^1.4.0",
+        "axios": "^1.6.2",
         "bulma": "^0.9.3",
         "bulma-switch": "^2.0.0",
         "bulma-tooltip": "^3.0.2",
@@ -4949,9 +4949,9 @@
       }
     },
     "node_modules/axios": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz",
-      "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==",
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
+      "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
       "dependencies": {
         "follow-redirects": "^1.15.0",
         "form-data": "^4.0.0",
@@ -23215,9 +23215,9 @@
       }
     },
     "axios": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz",
-      "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==",
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
+      "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
       "requires": {
         "follow-redirects": "^1.15.0",
         "form-data": "^4.0.0",
diff --git a/package.json b/package.json
index 441f7ed4b..7e69cc5d8 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,7 @@
     "@sentry/integrations": "^7.16.0",
     "@sentry/vue": "^7.16.0",
     "ansi-to-html": "^0.7.2",
-    "axios": "^1.4.0",
+    "axios": "^1.6.2",
     "bulma": "^0.9.3",
     "bulma-switch": "^2.0.0",
     "bulma-tooltip": "^3.0.2",
diff --git a/src/config.ts b/src/config.ts
index a4c144a3c..33c10175f 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -34,6 +34,7 @@ export const CSRF_COOKIE_NAME: string = process.env.VUE_APP_CSRF_COOKIE_NAME ||
 // Fallback to default value
 ) || 'arkindex.csrf'
 export const CSRF_COOKIE_HEADER = 'X-CSRFToken'
+export const CSRF_ALL_ORIGINS = process.env.VUE_APP_CSRF_ALL_ORIGINS === 'true'
 export const VERSION: string | undefined = process.env.VUE_APP_VERSION
 export const ROUTER_MODE: string = process.env.VUE_APP_ROUTER_MODE || 'history'
 
diff --git a/src/main.ts b/src/main.ts
index 9318403bb..7b5031419 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -7,6 +7,7 @@ import {
   API_BASE_URL,
   CSRF_COOKIE_NAME,
   CSRF_COOKIE_HEADER,
+  CSRF_ALL_ORIGINS,
   SENTRY_DSN,
   SENTRY_ENVIRONMENT,
   UUID,
@@ -35,6 +36,13 @@ axios.defaults.baseURL = API_BASE_URL
 axios.defaults.xsrfCookieName = CSRF_COOKIE_NAME
 axios.defaults.xsrfHeaderName = CSRF_COOKIE_HEADER
 axios.defaults.withCredentials = true
+/*
+ * `false` means no CSRF token is ever sent in any request,
+ * `undefined` means the CSRF token is only sent to the same origin (default),
+ * `true` means the token is sent to everyone.
+ * Dev builds will need `true`, since devs will need to reach localhost:8000 from :8080.
+ */
+axios.defaults.withXSRFToken = CSRF_ALL_ORIGINS ? true : undefined
 
 // Try to ensure we do not get anything other than JSON…
 axios.defaults.headers.Accept = 'application/json'
-- 
GitLab