From 382fc65f3707295c281ef5a764c6227b48fa5919 Mon Sep 17 00:00:00 2001 From: Mathieu Date: Mon, 14 Nov 2022 08:59:50 +0100 Subject: [PATCH] Extend CMS user manager --- .../api/cms/directory/CmsUserManager.java | 6 +++ .../internal/runtime/CmsUserManagerImpl.java | 40 ++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/org.argeo.api.cms/src/org/argeo/api/cms/directory/CmsUserManager.java b/org.argeo.api.cms/src/org/argeo/api/cms/directory/CmsUserManager.java index 422cadef0..dc7d382fe 100644 --- a/org.argeo.api.cms/src/org/argeo/api/cms/directory/CmsUserManager.java +++ b/org.argeo.api.cms/src/org/argeo/api/cms/directory/CmsUserManager.java @@ -63,6 +63,9 @@ public interface CmsUserManager { /** Creates a new user. */ CmsUser createUser(String username, Map properties, Map 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 */ diff --git a/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsUserManagerImpl.java b/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsUserManagerImpl.java index 06736fbeb..9a05d2b59 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsUserManagerImpl.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsUserManagerImpl.java @@ -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); } } -- 2.30.2