From e5bf58760e5f25b9e66a595a7c12300a3a1c4d3b Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 13 Sep 2018 18:05:01 +0200
Subject: [PATCH] configuration parameter for default custom overlays privilege

---
 .../model/user/ConfigurationElementType.java  |  2 ++
 .../services/impl/ProjectService.java         |  1 +
 .../mapviewer/services/impl/UserService.java  | 26 ++++++++++++++++++-
 .../services/interfaces/IUserService.java     |  1 +
 .../services/impl/UserServiceTest.java        | 20 +++++++++++++-
 5 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/model/src/main/java/lcsb/mapviewer/model/user/ConfigurationElementType.java b/model/src/main/java/lcsb/mapviewer/model/user/ConfigurationElementType.java
index 5250a89749..4d03acc44e 100644
--- a/model/src/main/java/lcsb/mapviewer/model/user/ConfigurationElementType.java
+++ b/model/src/main/java/lcsb/mapviewer/model/user/ConfigurationElementType.java
@@ -224,6 +224,8 @@ public enum ConfigurationElementType {
   LDAP_FILTER("LDAP filter ", "(memberof=cn=minerva,cn=groups,cn=accounts,dc=uni,dc=lu)", ConfigurationElementEditType.STRING, true,
       ConfigurationElementTypeGroup.LDAP_CONFIGURATION), //
 
+  DEFAULT_CUSTOM_LAYOUTS("Default user privilege for: " + PrivilegeType.CUSTOM_LAYOUTS.getCommonName(), "0",
+      ConfigurationElementEditType.INTEGER, true, ConfigurationElementTypeGroup.DEFAULT_USER_PRIVILEGES),
   ;
 
   /**
diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
index fd3fdeb116..dfc0e41528 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
@@ -475,6 +475,7 @@ public class ProjectService implements IProjectService {
     for (User user : userDao.getAll()) {
       if (!processedUser.contains(user)) {
         processedUser.add(user);
+        userService.createDefaultBasicPrivilegesForUser(user);
         userService.createDefaultProjectPrivilegesForUser(project, user);
       }
     }
diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/UserService.java b/service/src/main/java/lcsb/mapviewer/services/impl/UserService.java
index cfabf12b2a..633bee5d8c 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/UserService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/UserService.java
@@ -10,6 +10,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Random;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.authority.AuthorityUtils;
@@ -30,6 +31,7 @@ import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.log.LogType;
 import lcsb.mapviewer.model.user.BasicPrivilege;
 import lcsb.mapviewer.model.user.ConfigurationElementType;
+import lcsb.mapviewer.model.user.ConfigurationOption;
 import lcsb.mapviewer.model.user.ObjectPrivilege;
 import lcsb.mapviewer.model.user.PrivilegeType;
 import lcsb.mapviewer.model.user.User;
@@ -538,6 +540,7 @@ public class UserService implements IUserService {
         user.setEmail(ldapUserData.getEmail());
         user.setConnectedToLdap(true);
         addUser(user);
+        createDefaultBasicPrivilegesForUser(user);
         for (Project project : projectDao.getAll()) {
           createDefaultProjectPrivilegesForUser(project, user);
         }
@@ -572,9 +575,30 @@ public class UserService implements IUserService {
           }
         }
         ObjectPrivilege privilege = new ObjectPrivilege(project, level, type, user);
-        setUserPrivilege(user, privilege);
+        updateUserPrivilegesWithoutDbModification(user, privilege);
       }
     }
+    updateUser(user);
+  }
+
+  @Override
+  public void createDefaultBasicPrivilegesForUser(User user) {
+    for (PrivilegeType type : PrivilegeType.values()) {
+      if (BasicPrivilege.class.equals(type.getPrivilegeClassType())) {
+        int level = 0;
+        ConfigurationOption option = configurationService.getValue(type);
+        if (option != null) {
+          if (option.getValue().equalsIgnoreCase("true")) {
+            level = 1;
+          } else if (StringUtils.isNumeric(option.getValue())) {
+            level = Integer.valueOf(option.getValue());
+          }
+          BasicPrivilege privilege = new BasicPrivilege(level, type, user);
+          updateUserPrivilegesWithoutDbModification(user, privilege);
+        }
+      }
+    }
+    updateUser(user);
   }
 
   @Override
diff --git a/service/src/main/java/lcsb/mapviewer/services/interfaces/IUserService.java b/service/src/main/java/lcsb/mapviewer/services/interfaces/IUserService.java
index 66bc88d312..49f5ad04bc 100644
--- a/service/src/main/java/lcsb/mapviewer/services/interfaces/IUserService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/interfaces/IUserService.java
@@ -184,6 +184,7 @@ public interface IUserService {
   void setLdapService(ILdapService ldapService);
 
   void createDefaultProjectPrivilegesForUser(Project project, User user);
+  void createDefaultBasicPrivilegesForUser(User user);
 
   Map<String, Boolean> ldapAccountExistsForLogin(Collection<User> logins);
 }
diff --git a/service/src/test/java/lcsb/mapviewer/services/impl/UserServiceTest.java b/service/src/test/java/lcsb/mapviewer/services/impl/UserServiceTest.java
index 64bc23211d..73c5cb4846 100644
--- a/service/src/test/java/lcsb/mapviewer/services/impl/UserServiceTest.java
+++ b/service/src/test/java/lcsb/mapviewer/services/impl/UserServiceTest.java
@@ -85,7 +85,8 @@ public class UserServiceTest extends ServiceTestFunctions {
   private LdapService createMockLdapService(String filename, String login, String passwd) throws LDAPException {
     configurationService.setConfigurationValue(ConfigurationElementType.LDAP_BASE_DN, "dc=uni,dc=lu");
     configurationService.setConfigurationValue(ConfigurationElementType.LDAP_OBJECT_CLASS, "person");
-    configurationService.setConfigurationValue(ConfigurationElementType.LDAP_FILTER, "memberof=cn=gitlab,cn=groups,cn=accounts,dc=uni,dc=lu");
+    configurationService.setConfigurationValue(ConfigurationElementType.LDAP_FILTER,
+        "memberof=cn=gitlab,cn=groups,cn=accounts,dc=uni,dc=lu");
 
     LdapService ldapService = Mockito.spy(LdapService.class);
     ldapService.setConfigurationService(configurationService);
@@ -226,4 +227,21 @@ public class UserServiceTest extends ServiceTestFunctions {
       throw e;
     }
   }
+
+  @Test
+  public void testCreateDefaultBasicPrivilegesForUser() throws Exception {
+    String originalValue = configurationService.getConfigurationValue(ConfigurationElementType.DEFAULT_CUSTOM_LAYOUTS);
+    try {
+      configurationService.setConfigurationValue(ConfigurationElementType.DEFAULT_CUSTOM_LAYOUTS, "127");
+      createUser();
+      userService.createDefaultBasicPrivilegesForUser(user);
+      assertEquals(127, userService.getUserPrivilegeLevel(user, PrivilegeType.CUSTOM_LAYOUTS));
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    } finally {
+      configurationService.setConfigurationValue(ConfigurationElementType.DEFAULT_CUSTOM_LAYOUTS, originalValue);
+    }
+  }
 }
-- 
GitLab