You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:48:52 UTC

[sling-org-apache-sling-jcr-repoinit] 09/43: SLING-5355 - it's ok for service user to already exist

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.jcr.repoinit-1.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-repoinit.git

commit 1d0ac30e74fe848df9a823b70084bcb82011dda5
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Tue Dec 29 12:31:06 2015 +0000

    SLING-5355 - it's ok for service user to already exist
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/acldef/oak-jcr@1722119 13f79535-47bb-0310-9956-ffa450edef68
---
 .../org/apache/sling/acldef/jcr/AclOperationVisitor.java    |  8 ++++++--
 .../java/org/apache/sling/acldef/jcr/ServiceUserUtil.java   | 13 +++++++++++++
 .../org/apache/sling/acldef/jcr/CreateServiceUsersTest.java | 11 +++++++++++
 3 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/sling/acldef/jcr/AclOperationVisitor.java b/src/main/java/org/apache/sling/acldef/jcr/AclOperationVisitor.java
index bd6310c..19d43f8 100644
--- a/src/main/java/org/apache/sling/acldef/jcr/AclOperationVisitor.java
+++ b/src/main/java/org/apache/sling/acldef/jcr/AclOperationVisitor.java
@@ -58,9 +58,13 @@ public class AclOperationVisitor implements OperationVisitor {
     @Override
     public void visitCreateServiceUser(CreateServiceUser s) {
         final String id = s.getUsername();
-        log.info("Creating service user {}", id);
         try {
-            ServiceUserUtil.createServiceUser(session, id);
+            if(!ServiceUserUtil.serviceUserExists(session, id)) {
+                log.info("Creating service user {}", id);
+                ServiceUserUtil.createServiceUser(session, id);
+            } else {
+                log.info("Service user {} already exists, no changes made", id);
+            }
         } catch(Exception e) {
             report(e, "Unable to create service user [" + id + "]:" + e);
         }
diff --git a/src/main/java/org/apache/sling/acldef/jcr/ServiceUserUtil.java b/src/main/java/org/apache/sling/acldef/jcr/ServiceUserUtil.java
index 09b6426..2d131ce 100644
--- a/src/main/java/org/apache/sling/acldef/jcr/ServiceUserUtil.java
+++ b/src/main/java/org/apache/sling/acldef/jcr/ServiceUserUtil.java
@@ -21,6 +21,7 @@ import javax.jcr.Session;
 
 import org.apache.jackrabbit.api.JackrabbitSession;
 import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.api.security.user.UserManager;
 
 /** Utilities for Service Users management */
@@ -37,10 +38,22 @@ public class ServiceUserUtil {
         return getUserManager(session).getAuthorizable(username);
     }
     
+    /** Create a service user - fails if it already exists */
     public static void createServiceUser(Session s, String username) throws RepositoryException {
         getUserManager(s).createSystemUser(username, null);
     }
     
+    /** True if specified service user exists */
+    public static boolean serviceUserExists(Session session, String username) throws RepositoryException {
+        boolean result = false;
+        final Authorizable a = getAuthorizable(session, username);
+        if(a != null) {
+            final User u = (User)a;
+            result = u.isSystemUser();
+        }
+        return result;
+    }
+    
     public static void deleteServiceUser(Session s, String username) throws RepositoryException {
         final Authorizable a = getUserManager(s).getAuthorizable(username);
         if(a == null) {
diff --git a/src/test/java/org/apache/sling/acldef/jcr/CreateServiceUsersTest.java b/src/test/java/org/apache/sling/acldef/jcr/CreateServiceUsersTest.java
index 0f09972..23e4174 100644
--- a/src/test/java/org/apache/sling/acldef/jcr/CreateServiceUsersTest.java
+++ b/src/test/java/org/apache/sling/acldef/jcr/CreateServiceUsersTest.java
@@ -57,6 +57,17 @@ public class CreateServiceUsersTest {
     }
     
     @Test
+    public void createUserMultipleTimes() throws Exception {
+        final String username = namePrefix + "_multiple";
+        U.assertServiceUser("before test", username, false);
+        final String input = "create service user " + username;
+        for(int i=0; i < 50; i++) {
+            U.parseAndExecute(input);
+        }
+        U.assertServiceUser("after creating it multiple times", username, true);
+    }
+    
+    @Test
     public void createDeleteMultipleTest() throws Exception {
         final int n = 50;
         

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.