From f70902111b22537e1aa86a196bbc78b8719320c3 Mon Sep 17 00:00:00 2001
From: "L. Ellenbeck" <ellenbeck@itc.rwth-aachen.de>
Date: Mon, 9 Sep 2024 16:53:21 +0000
Subject: [PATCH] Fix: User query for token (coscine/issues#2975)

---
 src/modules/login/store.ts                     |  3 +++
 .../user/pages/modals/MergeUserModalV2.vue     | 18 ++++++++++++++++--
 yarn.lock                                      | 10 +++++-----
 3 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/src/modules/login/store.ts b/src/modules/login/store.ts
index 24fda648..e808a7ac 100644
--- a/src/modules/login/store.ts
+++ b/src/modules/login/store.ts
@@ -95,6 +95,9 @@ export const useLoginStore = defineStore({
       }
       return null;
     },
+    isCookieLogin(): boolean {
+      return getCookieValue("CoscineLoginExpiration") !== null;
+    },
   },
   /*  
     --------------------------------------------------------------------------------------
diff --git a/src/modules/user/pages/modals/MergeUserModalV2.vue b/src/modules/user/pages/modals/MergeUserModalV2.vue
index 258e9db1..e2e710f9 100644
--- a/src/modules/user/pages/modals/MergeUserModalV2.vue
+++ b/src/modules/user/pages/modals/MergeUserModalV2.vue
@@ -62,6 +62,8 @@
 
 <script lang="ts">
 import { useModal } from "bootstrap-vue-next";
+import useLoginStore from "@/modules/login/store";
+import useMainStore from "@/store/index";
 
 export default defineComponent({
   props: {
@@ -76,15 +78,27 @@ export default defineComponent({
   },
   setup() {
     const mergeUserModalV2 = useModal("mergeUserModalV2");
+    const loginStore = useLoginStore();
+    const mainStore = useMainStore();
 
-    return { mergeUserModalV2: mergeUserModalV2 };
+    return { mergeUserModalV2: mergeUserModalV2, loginStore, mainStore };
   },
   methods: {
     async proceedWithMerge() {
       if (this.externalAuthId) {
         const url = new URL(window.location.href);
         url.pathname = `/coscine/api/v2/self/session/merge/${this.externalAuthId}`;
-        window.location.href = url.toString();
+
+        if (this.loginStore.isCookieLogin) {
+          window.location.href = url.toString();
+        } else {
+          url.searchParams.append(
+            "access_token",
+            this.mainStore.coscine.authorization.bearer,
+          );
+
+          window.location.href = url.toString();
+        }
       }
     },
   },
diff --git a/yarn.lock b/yarn.lock
index a6290fcc..1e8696da 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -496,9 +496,9 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@coscine/form-generator@npm:3.5.7-dev.39":
-  version: 3.5.7-dev.39
-  resolution: "@coscine/form-generator@npm:3.5.7-dev.39::__archiveUrl=https%3A%2F%2Fgit.rwth-aachen.de%2Fapi%2Fv4%2Fprojects%2F35944%2Fpackages%2Fnpm%2F%40coscine%2Fform-generator%2F-%2F%40coscine%2Fform-generator-3.5.7-dev.39.tgz"
+"@coscine/form-generator@npm:^4.0.5":
+  version: 4.0.5
+  resolution: "@coscine/form-generator@npm:4.0.5::__archiveUrl=https%3A%2F%2Fgit.rwth-aachen.de%2Fapi%2Fv4%2Fprojects%2F35944%2Fpackages%2Fnpm%2F%40coscine%2Fform-generator%2F-%2F%40coscine%2Fform-generator-4.0.5.tgz"
   dependencies:
     "@vueuse/core": "npm:^10.9.0"
     "@zazuko/prefixes": "npm:^2.2.0"
@@ -511,7 +511,7 @@ __metadata:
     vue-i18n: "npm:^9.10.1"
     vue-multiselect: "npm:^3.0.0-beta.3"
     vue-observe-visibility: "npm:^2.0.0-alpha.1"
-  checksum: 10/138ac91fa4af4f561058891079adf5f7b2991e6255fbcf28ede72fc415d4574c59f717afdd54a71a5ad85475c00066bbc940cb6088d66d3fb8d42e7fbd6ac2ad
+  checksum: 10/8257596e180b715e222f83c925763b64c2c51e1ed6a6fa68338f4544a95e03979dc77d4c05e20b4a37fbbf30a2aa5afb56686114880a5fb42f07f35621b1a66b
   languageName: node
   linkType: hard
 
@@ -13687,7 +13687,7 @@ __metadata:
   resolution: "ui@workspace:."
   dependencies:
     "@coscine/api-client": "npm:^3.10.0"
-    "@coscine/form-generator": "npm:3.5.7-dev.39"
+    "@coscine/form-generator": "npm:^4.0.5"
     "@dynamic-mapper/mapper": "npm:^1.10.4"
     "@iconify-json/bi": "npm:^1.1.23"
     "@pinia/testing": "npm:^0.1.3"
-- 
GitLab