From 4043f3ff904f2cac7b9b59df4663d861a21659f9 Mon Sep 17 00:00:00 2001
From: Timm Fitschen <t.fitschen@indiscale.com>
Date: Wed, 8 Dec 2021 17:12:27 +0100
Subject: [PATCH] WIP: fix null values in lists (grpc)

---
 .../server/accessControl/UserSources.java     |  5 +----
 .../implementation/MySQL/MySQLListRoles.java  |  2 +-
 .../implementation/MySQL/MySQLListUsers.java  |  2 +-
 .../MySQL/MySQLLogUserVisit.java              |  2 +-
 .../MySQL/MySQLRetrieveEntityACL.java         |  2 +-
 .../backend/interfaces/ListRolesImpl.java     |  2 +-
 .../backend/interfaces/ListUsersImpl.java     |  2 +-
 .../interfaces/RetrieveEntityACLImpl.java     |  2 +-
 .../backend/transaction/ListRoles.java        |  2 +-
 .../backend/transaction/ListUsers.java        |  2 +-
 .../RetrieveEntityACLTransaction.java         |  2 +-
 .../backend/transaction/UpdateUserRoles.java  |  2 +-
 .../AccessControlManagementServiceImpl.java   |  2 +-
 .../caosdb/server/grpc/AuthInterceptor.java   |  2 +-
 .../server/grpc/CaosDBToGrpcConverters.java   |  7 +++++-
 .../grpc/EntityTransactionServiceImpl.java    |  2 +-
 .../server/grpc/GrpcToCaosDBConverters.java   |  2 +-
 .../transaction/ListRolesTransaction.java     |  2 +-
 .../transaction/ListUsersTransaction.java     | 22 ++++++++++++-------
 .../server/transaction/RetrieveACL.java       |  2 +-
 .../caosdb/server/transaction/UpdateACL.java  |  2 +-
 .../caosdb/server/utils/ServerMessages.java   |  2 +-
 22 files changed, 40 insertions(+), 32 deletions(-)

diff --git a/src/main/java/org/caosdb/server/accessControl/UserSources.java b/src/main/java/org/caosdb/server/accessControl/UserSources.java
index b169849b..bd63da6f 100644
--- a/src/main/java/org/caosdb/server/accessControl/UserSources.java
+++ b/src/main/java/org/caosdb/server/accessControl/UserSources.java
@@ -282,10 +282,7 @@ public class UserSources extends HashMap<String, UserSource> {
     return false;
   }
 
-  /**
-   * Log the current time as the user's last visit.
-   *
-   */
+  /** Log the current time as the user's last visit. */
   public static void logUserVisit(String realm, String username, String type) {
     try {
       LogUserVisitTransaction t =
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLListRoles.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLListRoles.java
index 11505b07..69ac524e 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLListRoles.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLListRoles.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.database.backend.implementation.MySQL;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLListUsers.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLListUsers.java
index cb79d4ad..83ebffe6 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLListUsers.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLListUsers.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.database.backend.implementation.MySQL;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLLogUserVisit.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLLogUserVisit.java
index 7a0e8ba4..23050da8 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLLogUserVisit.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLLogUserVisit.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.database.backend.implementation.MySQL;
diff --git a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveEntityACL.java b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveEntityACL.java
index 2cb97d80..5db8ed75 100644
--- a/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveEntityACL.java
+++ b/src/main/java/org/caosdb/server/database/backend/implementation/MySQL/MySQLRetrieveEntityACL.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.database.backend.implementation.MySQL;
diff --git a/src/main/java/org/caosdb/server/database/backend/interfaces/ListRolesImpl.java b/src/main/java/org/caosdb/server/database/backend/interfaces/ListRolesImpl.java
index aafa16e2..aab9041a 100644
--- a/src/main/java/org/caosdb/server/database/backend/interfaces/ListRolesImpl.java
+++ b/src/main/java/org/caosdb/server/database/backend/interfaces/ListRolesImpl.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.database.backend.interfaces;
diff --git a/src/main/java/org/caosdb/server/database/backend/interfaces/ListUsersImpl.java b/src/main/java/org/caosdb/server/database/backend/interfaces/ListUsersImpl.java
index 0508a01a..6bdfda92 100644
--- a/src/main/java/org/caosdb/server/database/backend/interfaces/ListUsersImpl.java
+++ b/src/main/java/org/caosdb/server/database/backend/interfaces/ListUsersImpl.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.database.backend.interfaces;
diff --git a/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveEntityACLImpl.java b/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveEntityACLImpl.java
index d9c5fbba..230d4d34 100644
--- a/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveEntityACLImpl.java
+++ b/src/main/java/org/caosdb/server/database/backend/interfaces/RetrieveEntityACLImpl.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.database.backend.interfaces;
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/ListRoles.java b/src/main/java/org/caosdb/server/database/backend/transaction/ListRoles.java
index 747b3c5c..75792475 100644
--- a/src/main/java/org/caosdb/server/database/backend/transaction/ListRoles.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/ListRoles.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.database.backend.transaction;
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/ListUsers.java b/src/main/java/org/caosdb/server/database/backend/transaction/ListUsers.java
index e4d5dabb..9f29a3c5 100644
--- a/src/main/java/org/caosdb/server/database/backend/transaction/ListUsers.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/ListUsers.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.database.backend.transaction;
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveEntityACLTransaction.java b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveEntityACLTransaction.java
index b3d2402e..9cb96112 100644
--- a/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveEntityACLTransaction.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/RetrieveEntityACLTransaction.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.database.backend.transaction;
diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/UpdateUserRoles.java b/src/main/java/org/caosdb/server/database/backend/transaction/UpdateUserRoles.java
index 5950c255..bbd23aa9 100644
--- a/src/main/java/org/caosdb/server/database/backend/transaction/UpdateUserRoles.java
+++ b/src/main/java/org/caosdb/server/database/backend/transaction/UpdateUserRoles.java
@@ -18,7 +18,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.database.backend.transaction;
diff --git a/src/main/java/org/caosdb/server/grpc/AccessControlManagementServiceImpl.java b/src/main/java/org/caosdb/server/grpc/AccessControlManagementServiceImpl.java
index 0079af6f..18dd29a2 100644
--- a/src/main/java/org/caosdb/server/grpc/AccessControlManagementServiceImpl.java
+++ b/src/main/java/org/caosdb/server/grpc/AccessControlManagementServiceImpl.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.grpc;
diff --git a/src/main/java/org/caosdb/server/grpc/AuthInterceptor.java b/src/main/java/org/caosdb/server/grpc/AuthInterceptor.java
index 7f192503..b58769d4 100644
--- a/src/main/java/org/caosdb/server/grpc/AuthInterceptor.java
+++ b/src/main/java/org/caosdb/server/grpc/AuthInterceptor.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.grpc;
diff --git a/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java b/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java
index 29b4ea11..fe09df56 100644
--- a/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java
+++ b/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.grpc;
@@ -299,6 +299,11 @@ public class CaosDBToGrpcConverters {
   }
 
   private ScalarValue convertScalarValue(final IndexedSingleValue v) {
+    if (v == null) {
+      return ScalarValue.newBuilder()
+          .setSpecialValue(SpecialValue.SPECIAL_VALUE_UNSPECIFIED)
+          .build();
+    }
     return convertScalarValue(v.getWrapped()).build();
   }
 
diff --git a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
index 0d5288d9..9b43a04c 100644
--- a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
+++ b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.grpc;
diff --git a/src/main/java/org/caosdb/server/grpc/GrpcToCaosDBConverters.java b/src/main/java/org/caosdb/server/grpc/GrpcToCaosDBConverters.java
index 9798cbf5..5ec896fd 100644
--- a/src/main/java/org/caosdb/server/grpc/GrpcToCaosDBConverters.java
+++ b/src/main/java/org/caosdb/server/grpc/GrpcToCaosDBConverters.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.grpc;
diff --git a/src/main/java/org/caosdb/server/transaction/ListRolesTransaction.java b/src/main/java/org/caosdb/server/transaction/ListRolesTransaction.java
index 5fda2b62..b8f5943c 100644
--- a/src/main/java/org/caosdb/server/transaction/ListRolesTransaction.java
+++ b/src/main/java/org/caosdb/server/transaction/ListRolesTransaction.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.transaction;
diff --git a/src/main/java/org/caosdb/server/transaction/ListUsersTransaction.java b/src/main/java/org/caosdb/server/transaction/ListUsersTransaction.java
index 1756b2e1..b0c4af35 100644
--- a/src/main/java/org/caosdb/server/transaction/ListUsersTransaction.java
+++ b/src/main/java/org/caosdb/server/transaction/ListUsersTransaction.java
@@ -16,13 +16,12 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.transaction;
 
 import java.util.List;
-import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.subject.Subject;
@@ -37,16 +36,23 @@ public class ListUsersTransaction extends AccessControlTransaction {
   @Override
   protected void transaction() throws Exception {
     Subject currentUser = SecurityUtils.getSubject();
-    users = execute(new ListUsers(), getAccess()).getUsers().stream().filter(user -> currentUser.isPermitted(ACMPermissions.PERMISSION_RETRIEVE_USER_INFO(user.realm, user.name))
-        ).collect(Collectors.toList());
-    
+    users =
+        execute(new ListUsers(), getAccess())
+            .getUsers()
+            .stream()
+            .filter(
+                user ->
+                    currentUser.isPermitted(
+                        ACMPermissions.PERMISSION_RETRIEVE_USER_INFO(user.realm, user.name)))
+            .collect(Collectors.toList());
+
     // remove roles
-    for(ProtoUser user : users) {
-      if(!currentUser.isPermitted(ACMPermissions.PERMISSION_RETRIEVE_USER_ROLES(user.realm, user.name))) {
+    for (ProtoUser user : users) {
+      if (!currentUser.isPermitted(
+          ACMPermissions.PERMISSION_RETRIEVE_USER_ROLES(user.realm, user.name))) {
         user.roles = null;
       }
     }
-
   }
 
   public List<ProtoUser> getUsers() {
diff --git a/src/main/java/org/caosdb/server/transaction/RetrieveACL.java b/src/main/java/org/caosdb/server/transaction/RetrieveACL.java
index e780b460..c82ff76e 100644
--- a/src/main/java/org/caosdb/server/transaction/RetrieveACL.java
+++ b/src/main/java/org/caosdb/server/transaction/RetrieveACL.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.transaction;
diff --git a/src/main/java/org/caosdb/server/transaction/UpdateACL.java b/src/main/java/org/caosdb/server/transaction/UpdateACL.java
index a5025181..49125a2b 100644
--- a/src/main/java/org/caosdb/server/transaction/UpdateACL.java
+++ b/src/main/java/org/caosdb/server/transaction/UpdateACL.java
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.transaction;
diff --git a/src/main/java/org/caosdb/server/utils/ServerMessages.java b/src/main/java/org/caosdb/server/utils/ServerMessages.java
index 2938048c..c1f361e2 100644
--- a/src/main/java/org/caosdb/server/utils/ServerMessages.java
+++ b/src/main/java/org/caosdb/server/utils/ServerMessages.java
@@ -18,7 +18,7 @@
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * 
+ *
  */
 
 package org.caosdb.server.utils;
-- 
GitLab