From f82277e3c3b412d2d36f9b4fe8506d557f7b804d Mon Sep 17 00:00:00 2001
From: Janis Streib <janis.streib@kit.edu>
Date: Tue, 25 Mar 2025 19:38:00 +0100
Subject: [PATCH] FIX: broken links for subgroups containing a /

---
 src/components/BCDRights.vue      | 4 ++--
 src/components/GlobalSearch.vue   | 2 +-
 src/components/SVCAccountCard.vue | 2 +-
 src/views/Launchpad.vue           | 2 +-
 src/views/org/OU.vue              | 4 ++--
 5 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/components/BCDRights.vue b/src/components/BCDRights.vue
index ede61e405..0452053ae 100644
--- a/src/components/BCDRights.vue
+++ b/src/components/BCDRights.vue
@@ -22,7 +22,7 @@
             <ul>
               <li v-for="grp in bcd_groups" v-bind:key="grp.group_name">
                 <b :title="grp.group_name in groups?groups[grp.group_name].description:''">
-                  <b-link :to="'/cntl/groups/'+grp.group_name">{{ grp.group_name }}</b-link>
+                  <b-link :to="'/cntl/groups/'+encodeURIComponent(grp.group_name)">{{ grp.group_name }}</b-link>
                 </b>
                 <b-link class="ml-1"
                         v-if="grp.group_name in group2mgrs && group2mgr_emails(grp.group_name).length > 0"
@@ -67,7 +67,7 @@
           <ul>
             <li v-for="grp in bcd_groups" v-bind:key="grp.group_name">
               <b :title="grp.group_name in groups?groups[grp.group_name].description:''">
-                <b-link :to="'/cntl/groups/'+grp.group_name">{{ grp.group_name }}</b-link>
+                <b-link :to="'/cntl/groups/'+encodeURIComponent(grp.group_name)">{{ grp.group_name }}</b-link>
               </b>
               <b-link class="ml-1"
                       v-if="grp.group_name in group2mgrs && group2mgr_emails(grp.group_name).length > 0"
diff --git a/src/components/GlobalSearch.vue b/src/components/GlobalSearch.vue
index d0d05bbe9..3390a50f0 100644
--- a/src/components/GlobalSearch.vue
+++ b/src/components/GlobalSearch.vue
@@ -270,7 +270,7 @@ export default {
               'nd.ip_subnet': '/dnsvs/bcds/' + result.bcd,
               'nd.bcd': '/dnsvs/bcds/' + result.name,
               'nd.vlan': '/dnsvs/bcds/' + result.bcd,
-              'cntl.group': '/cntl/groups/' + result.name,
+              'cntl.group': '/cntl/groups/' + encodeURIComponent(result.name),
               'org.unit': '/org/ou/' + result.short_name,
               'nd.vxlan': '/dnsvs/bcds/' + result.bcd,
               'macauth.client': '/macauth/bcds/' + result.bcd_name,
diff --git a/src/components/SVCAccountCard.vue b/src/components/SVCAccountCard.vue
index 437fec9fa..a73e61de8 100644
--- a/src/components/SVCAccountCard.vue
+++ b/src/components/SVCAccountCard.vue
@@ -141,7 +141,7 @@
     <b-collapse :id="account.login_name + '-groups-collapse'">
       <b-table :items="own_groups" :fields="group_list_fields">
         <template v-slot:cell(name)="data">
-          <b-link :to="`/cntl/groups/${data.item.name}`">{{ data.item.name }}</b-link>
+          <b-link :to="`/cntl/groups/${encodeURIComponent(data.item.name)}`">{{ data.item.name }}</b-link>
         </template>
         <template v-slot:cell(ou_short_name)="data">
           <b-link :to="`/org/ou/${data.item.ou_short_name}`">{{ data.item.ou_short_name }}</b-link>
diff --git a/src/views/Launchpad.vue b/src/views/Launchpad.vue
index a4bd6509c..808961d8b 100644
--- a/src/views/Launchpad.vue
+++ b/src/views/Launchpad.vue
@@ -66,7 +66,7 @@ export default {
       'cntl.group': async () => {
         const res = (await GroupService.list(this.$store.state, {gpk: payload})).data[0]
         if (this.checkRes(res)) {
-          await this.$router.push('/cntl/groups/' + res[0].name)
+          await this.$router.push('/cntl/groups/' + encodeURIComponent(res[0].name))
         }
       },
       'dns.fqdn': async () => {
diff --git a/src/views/org/OU.vue b/src/views/org/OU.vue
index f516e84e6..566eddd8f 100644
--- a/src/views/org/OU.vue
+++ b/src/views/org/OU.vue
@@ -205,7 +205,7 @@
                 <template v-slot:cell(actions)="">
                 </template>
                 <template v-slot:cell(name)="data">
-                  <b-link :to="'/cntl/groups/'+data.item.name">{{ data.item.name }}</b-link>
+                  <b-link :to="'/cntl/groups/'+encodeURIComponent(data.item.name)">{{ data.item.name }}</b-link>
                 </template>
               </PaginatorTable>
               <template v-if="!is_entry && ous_by_parent && ou.short_name in ous_by_parent"
@@ -216,7 +216,7 @@
                   <template v-slot:cell(actions)="">
                   </template>
                   <template v-slot:cell(name)="data">
-                    <b-link :to="'/cntl/groups/'+data.item.name">{{ data.item.name }}</b-link>
+                    <b-link :to="'/cntl/groups/'+encodeURIComponent(data.item.name)">{{ data.item.name }}</b-link>
                     <b-badge class="ml-2" pill :to="'/org/ou/' + data.item.ou_short_name">
                       <netvs-icon icon="orgs"/>
                       {{ data.item.ou_short_name }}
-- 
GitLab