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>.