Extend CMS user manager
authorMathieu <mbaudier@argeo.org>
Mon, 14 Nov 2022 07:59:50 +0000 (08:59 +0100)
committerMathieu <mbaudier@argeo.org>
Mon, 14 Nov 2022 07:59:50 +0000 (08:59 +0100)
org.argeo.api.cms/src/org/argeo/api/cms/directory/CmsUserManager.java
org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsUserManagerImpl.java

index 422cadef011c0d742546b2f115848d92f71f944f..dc7d382fef774bf6a5f7d2521738e66782781fd8 100644 (file)
@@ -63,6 +63,9 @@ public interface CmsUserManager {
        /** Creates a new user. */
        CmsUser createUser(String username, Map<String, Object> properties, Map<String, Object> credentials);
 
+       /** Created a new group. */
+       CmsGroup createGroup(String dn);
+
        /** Creates a group. */
        CmsGroup getOrCreateGroup(HierarchyUnit groups, String commonName);
 
@@ -79,6 +82,9 @@ public interface CmsUserManager {
        /** Add a member to this group. */
        void addMember(CmsGroup group, Role role);
 
+       /** Remove a member from this group. */
+       void removeMember(CmsGroup group, Role role);
+
        void edit(Runnable action);
 
        /* MISCELLANEOUS */
index 06736fbeb637bb5c0680a93f7000f4a65dd37e08..9a05d2b59cc2a2ab27cfb8f7a7750ff78473b524 100644 (file)
@@ -264,6 +264,26 @@ public class CmsUserManagerImpl implements CmsUserManager {
                }
        }
 
+       @Override
+       public CmsGroup createGroup(String dn) {
+               try {
+                       userTransaction.begin();
+                       CmsGroup group = (CmsGroup) userAdmin.createRole(dn, Role.GROUP);
+                       userTransaction.commit();
+                       return group;
+               } catch (Exception e) {
+                       try {
+                               userTransaction.rollback();
+                       } catch (Exception e1) {
+                               log.error("Could not roll back", e1);
+                       }
+                       if (e instanceof RuntimeException)
+                               throw (RuntimeException) e;
+                       else
+                               throw new RuntimeException("Cannot create group " + dn, e);
+               }
+       }
+
        @Override
        public CmsGroup getOrCreateGroup(HierarchyUnit groups, String commonName) {
                try {
@@ -410,7 +430,25 @@ public class CmsUserManagerImpl implements CmsUserManager {
                                if (log.isTraceEnabled())
                                        log.trace("Cannot rollback transaction", e2);
                        }
-                       throw new RuntimeException("Cannot add object classes " + role + " to group " + group, e1);
+                       throw new RuntimeException("Cannot add member " + role + " to group " + group, e1);
+               }
+       }
+
+       @Override
+       public void removeMember(CmsGroup group, Role role) {
+               try {
+                       userTransaction.begin();
+                       group.removeMember(role);
+                       userTransaction.commit();
+               } catch (Exception e1) {
+                       try {
+                               if (!userTransaction.isNoTransactionStatus())
+                                       userTransaction.rollback();
+                       } catch (Exception e2) {
+                               if (log.isTraceEnabled())
+                                       log.trace("Cannot rollback transaction", e2);
+                       }
+                       throw new RuntimeException("Cannot remove member " + role + " from group " + group, e1);
                }
        }