From b8c6525baba1a9beda23f31de5a85cb668826705 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Thu, 3 Feb 2022 12:59:09 +0100
Subject: [PATCH] Add checks for retrieve user permissions

---
 .../org/caosdb/server/resource/Webinterface.java |  4 +++-
 .../server/transaction/ListUsersTransaction.java |  3 ++-
 .../transaction/RetrieveUserTransaction.java     | 16 +++++++++++++++-
 3 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/src/main/java/org/caosdb/server/resource/Webinterface.java b/src/main/java/org/caosdb/server/resource/Webinterface.java
index adba714a..95901260 100644
--- a/src/main/java/org/caosdb/server/resource/Webinterface.java
+++ b/src/main/java/org/caosdb/server/resource/Webinterface.java
@@ -81,7 +81,9 @@ public class Webinterface extends ServerResource {
                             ? MediaType.IMAGE_PNG
                             : path.endsWith(".html")
                                 ? MediaType.TEXT_HTML
-                                : path.endsWith(".yaml") ? MediaType.TEXT_YAML : MediaType.TEXT_XML;
+                                : path.endsWith(".yaml")
+                                    ? MediaType.TEXT_YAML
+                                    : path.endsWith(".xml") ? MediaType.TEXT_XML : MediaType.ALL;
 
     final FileRepresentation ret = new FileRepresentation(file, mt);
 
diff --git a/src/main/java/org/caosdb/server/transaction/ListUsersTransaction.java b/src/main/java/org/caosdb/server/transaction/ListUsersTransaction.java
index 439f3b3a..2ade4e85 100644
--- a/src/main/java/org/caosdb/server/transaction/ListUsersTransaction.java
+++ b/src/main/java/org/caosdb/server/transaction/ListUsersTransaction.java
@@ -48,11 +48,12 @@ public class ListUsersTransaction extends AccessControlTransaction {
 
     // remove roles
     for (ProtoUser user : users) {
-      if (user.roles != null)
+      if (user.roles != null) {
         if (!currentUser.isPermitted(
             ACMPermissions.PERMISSION_RETRIEVE_USER_ROLES(user.realm, user.name))) {
           user.roles = null;
         }
+      }
     }
   }
 
diff --git a/src/main/java/org/caosdb/server/transaction/RetrieveUserTransaction.java b/src/main/java/org/caosdb/server/transaction/RetrieveUserTransaction.java
index 55e4bf85..4847c4b3 100644
--- a/src/main/java/org/caosdb/server/transaction/RetrieveUserTransaction.java
+++ b/src/main/java/org/caosdb/server/transaction/RetrieveUserTransaction.java
@@ -24,6 +24,9 @@
 package org.caosdb.server.transaction;
 
 import java.util.Set;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
+import org.caosdb.server.accessControl.ACMPermissions;
 import org.caosdb.server.accessControl.Principal;
 import org.caosdb.server.accessControl.UserSources;
 import org.caosdb.server.database.backend.transaction.RetrieveUser;
@@ -42,10 +45,21 @@ public class RetrieveUserTransaction extends AccessControlTransaction {
 
   @Override
   protected void transaction() throws Exception {
-    if (!UserSources.isUserExisting(this.principal)) {
+    Subject currentUser = SecurityUtils.getSubject();
+    if (!UserSources.isUserExisting(this.principal)
+        || !currentUser.isPermitted(
+            ACMPermissions.PERMISSION_RETRIEVE_USER_INFO(
+                this.principal.getRealm(), this.principal.getUsername()))) {
       throw ServerMessages.ACCOUNT_DOES_NOT_EXIST;
     }
     this.user = execute(new RetrieveUser(this.principal), getAccess()).getUser();
+
+    if (user.roles != null) {
+      if (!currentUser.isPermitted(
+          ACMPermissions.PERMISSION_RETRIEVE_USER_ROLES(user.realm, user.name))) {
+        user.roles = null;
+      }
+    }
   }
 
   public static Element getUserElement(final ProtoUser user) {
-- 
GitLab