From 5b5ce21f377a60042e75d558284743e97ae9c1fe Mon Sep 17 00:00:00 2001
From: Julian Keck <julian.keck9@kit.edu>
Date: Mon, 22 Jul 2024 14:45:21 +0200
Subject: [PATCH] UPD bump middleware to api 4.1

Closes #730
Closes #729
---
 model/wapi/cntl.py | 23 ++++++++++++-----------
 util/wapi_util.py  |  2 +-
 2 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/model/wapi/cntl.py b/model/wapi/cntl.py
index f5f50ec..68599a3 100644
--- a/model/wapi/cntl.py
+++ b/model/wapi/cntl.py
@@ -97,27 +97,28 @@ class Mgr(BaseModel):
         return bcd in [v.name for v in self.get_bcds(conn)]
 
     def get_permissions(self, conn):
+        if self.permission_list is not None:
+            return self.permission_list
+
         result = execute_wapi_function(conn, [
             {'name': 'cntl.mgr.list', 'old': {'is_self': True}},
-            {'name': 'cntl.role.list', 'old': {
+            {'name': 'cntl.role.list', 'idx': 'direct_role_list', 'old': {
                 'is_directly_assigned': True,
                 'is_role': True,
+            }},
+            {'name': 'cntl.role.list', 'old': {'is_role': True}, 'idx': 'role_list', 'inner_join_ref': {
+                'direct_role_list': 'api_func_cntl_role_hierarchy_gfk_list_is_superset'
+            }},
+            {'name': 'cntl.role.list', 'old': {'is_role': False}, 'idx': 'permission_list', 'inner_join_ref': {
+                'role_list': 'api_func_cntl_role_hierarchy_gfk_list_is_superset'
             }}
         ], user=self.login_name)
 
-        if 'cntl_role_list' not in result.keys() or len(result['cntl_role_list']) == 0:
+        if 'permission_list' not in result.keys() or len(result['permission_list']) == 0:
             self.permission_list = []
             return self.permission_list
 
-        perms = []
-
-        roles = result['cntl_role_list']
-
-        for role in roles:
-            for permission in role['contained_permissions'].keys():
-                perms.append(permission)
-
-        self.permission_list = perms
+        self.permission_list = list(map(lambda x: x['fq_name'], result['permission_list']))
         return self.permission_list
 
     def has_permission(self, conn, permission: str):
diff --git a/util/wapi_util.py b/util/wapi_util.py
index 823dbad..a0c6f49 100644
--- a/util/wapi_util.py
+++ b/util/wapi_util.py
@@ -30,7 +30,7 @@ def execute_wapi_function(conn, request: list[dict[str, str | dict]], user: str
         user = settings.wapi_netvs_superuser
 
     query = """
-               select * from wapi_4_0.ta_handler(
+               select * from wapi_4_1.ta_handler(
                  in_login_name => %(login_name)s,
                  in_http_rq_mthd => 'POST',
                  in_http_rq_body => %(rq)s,
-- 
GitLab