You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by en...@apache.org on 2025/08/20 15:56:04 UTC
(sling-org-apache-sling-jcr-jackrabbit-accessmanager) branch master updated: SLING-12868 migrate to Sling API 3.x and Jakarta Servlet (#26)
This is an automated email from the ASF dual-hosted git repository.
enorman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-jackrabbit-accessmanager.git
The following commit(s) were added to refs/heads/master by this push:
new c8ef5a8 SLING-12868 migrate to Sling API 3.x and Jakarta Servlet (#26)
c8ef5a8 is described below
commit c8ef5a871a8ca22925aa0f9bd005d0d628c4bca7
Author: Eric Norman <en...@apache.org>
AuthorDate: Wed Aug 20 08:56:00 2025 -0700
SLING-12868 migrate to Sling API 3.x and Jakarta Servlet (#26)
---
.sling-module.json | 5 +
pom.xml | 55 ++-
.../jackrabbit/accessmanager/PrivilegesInfo.java | 148 +-----
.../accessmanager/impl/PrincipalAceHelper.java | 8 +-
.../jcr/jackrabbit/accessmanager/package-info.java | 2 +-
.../post/AbstractAccessGetServlet.java | 24 +-
.../post/AbstractAccessPostServlet.java | 172 +++----
.../accessmanager/post/AbstractAccessServlet.java | 4 +-
.../accessmanager/post/AbstractGetAceServlet.java | 12 +-
.../accessmanager/post/AbstractGetAclServlet.java | 62 +--
.../accessmanager/post/DeleteAcesServlet.java | 16 +-
.../post/DeletePrincipalAcesServlet.java | 11 +-
.../accessmanager/post/GetAceServlet.java | 5 +-
.../accessmanager/post/GetAclServlet.java | 5 +-
.../accessmanager/post/GetEffectiveAceServlet.java | 7 +-
.../accessmanager/post/GetEffectiveAclServlet.java | 7 +-
.../accessmanager/post/GetPrincipalAceServlet.java | 12 +-
.../accessmanager/post/ModifyAceServlet.java | 63 ++-
.../post/ModifyPrincipalAceServlet.java | 18 +-
.../accessmanager/post/package-info.java | 2 +-
.../{post => }/LocalPrivilegeTest.java | 6 +-
.../{post => }/LocalRestrictionTest.java | 8 +-
.../jackrabbit/accessmanager/ModifyAceTest.java | 39 +-
.../PrivilegesInfoAccessRightsTest.java | 114 +++++
.../it/AccessManagerClientTestSupport.java | 102 +++--
.../accessmanager/it/AccessManagerTestSupport.java | 58 ++-
.../accessmanager/it/AccessPrivilegesInfoIT.java | 34 +-
.../it/CustomPostResponseCreatorImpl.java | 16 +-
.../jcr/jackrabbit/accessmanager/it/GetAceIT.java | 28 +-
.../accessmanager/it/GetAceServiceIT.java | 24 +-
.../jcr/jackrabbit/accessmanager/it/GetAclIT.java | 24 +-
.../jcr/jackrabbit/accessmanager/it/GetEaceIT.java | 34 +-
.../accessmanager/it/GetEaceServiceIT.java | 23 +-
.../jcr/jackrabbit/accessmanager/it/GetPaceIT.java | 16 +-
.../jackrabbit/accessmanager/it/ModifyAceIT.java | 164 +++----
.../accessmanager/it/ModifyAceServiceIT.java | 30 +-
.../accessmanager/it/ModifyPrincipalAceIT.java | 10 +-
.../it/PrincipalAceServiceTestSupport.java | 14 +-
.../accessmanager/it/PrincipalAceTestSupport.java | 14 +-
.../accessmanager/it/PrivilegesInfoIT.java | 52 +--
.../jackrabbit/accessmanager/it/RemoveAcesIT.java | 42 +-
.../accessmanager/it/RemovePrincipalAcesIT.java | 24 +-
.../post/AbstractAccessPostServletTest.java | 508 +++++++++++++++++++++
.../post/AbstractAccessServletTest.java | 5 +-
src/test/resources/exam.properties | 21 +
45 files changed, 1244 insertions(+), 804 deletions(-)
diff --git a/.sling-module.json b/.sling-module.json
new file mode 100644
index 0000000..cfad4d2
--- /dev/null
+++ b/.sling-module.json
@@ -0,0 +1,5 @@
+{
+ "jenkins": {
+ "jdks": [17, 21]
+ }
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 6145d1e..40f1632 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
</parent>
<artifactId>org.apache.sling.jcr.jackrabbit.accessmanager</artifactId>
- <version>4.0.3-SNAPSHOT</version>
+ <version>5.0.0-SNAPSHOT</version>
<name>Apache Sling JCR Jackrabbit Access Manager</name>
<description>
Provides POST operations for JCR Jackrabbit Access Management
@@ -42,13 +42,14 @@
</scm>
<properties>
- <sling.java.version>8</sling.java.version>
+ <sling.java.version>17</sling.java.version>
<project.build.outputTimestamp>2024-01-08T23:41:57Z</project.build.outputTimestamp>
- <org.ops4j.pax.exam.version>4.13.3</org.ops4j.pax.exam.version>
+ <org.ops4j.pax.exam.version>4.14.0</org.ops4j.pax.exam.version>
<!-- To debug the pax process, override this with -D -->
<pax.vm.options>-Xmx512M</pax.vm.options>
<oak.version>1.44.0</oak.version>
+ <slf4j.version>2.0.17</slf4j.version>
</properties>
<build>
@@ -105,16 +106,27 @@
<artifactId>org.osgi.annotation.versioning</artifactId>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.jetbrains</groupId>
+ <artifactId>annotations</artifactId>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>jakarta.servlet</groupId>
+ <artifactId>jakarta.servlet-api</artifactId>
+ <version>6.0.0</version>
+ <scope>provided</scope>
+ </dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
- <version>2.25.4</version>
+ <version>3.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -126,7 +138,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.servlets.post</artifactId>
- <version>2.3.22</version>
+ <version>3.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -143,6 +155,7 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
+ <version>${slf4j.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -186,13 +199,19 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.testing.sling-mock-oak</artifactId>
- <version>3.1.10-1.44.0</version>
+ <version>4.0.0-1.62.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.testing.sling-mock.junit4</artifactId>
- <version>3.4.12</version>
+ <version>3.5.4</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.testing.paxexam</artifactId>
+ <version>4.1.2</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -225,12 +244,6 @@
<version>${org.ops4j.pax.exam.version}</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.testing.paxexam</artifactId>
- <version>4.0.0</version>
- <scope>test</scope>
- </dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
@@ -259,7 +272,7 @@
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
- <version>4.2.0</version>
+ <version>4.3.0</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -273,10 +286,24 @@
<version>7.0.5</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>5.11.0</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
+ <version>${slf4j.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.http.wrappers</artifactId>
+ <version>1.1.10</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/PrivilegesInfo.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/PrivilegesInfo.java
index f093629..553454b 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/PrivilegesInfo.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/PrivilegesInfo.java
@@ -18,7 +18,6 @@ package org.apache.sling.jcr.jackrabbit.accessmanager;
import java.security.Principal;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Locale;
@@ -31,21 +30,11 @@ import java.util.stream.Collectors;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
-import javax.jcr.Value;
-import javax.jcr.ValueFactory;
-import javax.jcr.ValueFormatException;
import javax.jcr.security.AccessControlManager;
import javax.jcr.security.Privilege;
-import jakarta.json.JsonArray;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonString;
-import jakarta.json.JsonValue;
-import jakarta.json.JsonValue.ValueType;
import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.jackrabbit.api.security.principal.PrincipalManager;
-import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionDefinition;
-import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
import org.apache.sling.jcr.jackrabbit.accessmanager.impl.JsonConvert;
import org.osgi.framework.Bundle;
@@ -55,6 +44,9 @@ import org.osgi.framework.ServiceReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonValue;
+
/**
* Helper class to assist in the usage of access control from scripts.
*/
@@ -109,41 +101,42 @@ public class PrivilegesInfo {
}
public String getPrivilegeSetDisplayName(Locale locale) {
- if (denied != null && !denied.isEmpty()) {
+ String displayName = null;
+ ResourceBundle rb = getResourceBundle(locale);
+ if (!denied.isEmpty()) {
//if there are any denied privileges, then this is a custom privilege set
- return getResourceBundle(locale).getString("privilegeset.custom");
+ displayName = rb.getString("privilegeset.custom");
} else {
if (granted.isEmpty()) {
//appears to have an empty privilege set
- return getResourceBundle(locale).getString("privilegeset.none");
- }
-
- if (granted.size() == 1) {
+ displayName = rb.getString("privilegeset.none");
+ } else if (granted.size() == 1) {
//check if the single privilege is jcr:all or jcr:read
Iterator<Privilege> iterator = granted.iterator();
Privilege next = iterator.next();
if (PrivilegeConstants.JCR_ALL.equals(next.getName())) {
//full control privilege set
- return getResourceBundle(locale).getString("privilegeset.all");
+ displayName = rb.getString("privilegeset.all");
} else if (PrivilegeConstants.JCR_READ.equals(next.getName())) {
//readonly privilege set
- return getResourceBundle(locale).getString("privilegeset.readonly");
+ displayName = rb.getString("privilegeset.readonly");
}
} else if (granted.size() == 2) {
//check if the two privileges are jcr:read and jcr:write
- Iterator<Privilege> iterator = granted.iterator();
- Privilege next = iterator.next();
- Privilege next2 = iterator.next();
- if ( (PrivilegeConstants.JCR_READ.equals(next.getName()) && PrivilegeConstants.JCR_WRITE.equals(next2.getName())) ||
- (PrivilegeConstants.JCR_READ.equals(next2.getName()) && PrivilegeConstants.JCR_WRITE.equals(next.getName())) ) {
+ boolean hasRead = granted.stream().anyMatch(p -> PrivilegeConstants.JCR_READ.equals(p.getName()));
+ boolean hasWrite = granted.stream().anyMatch(p -> PrivilegeConstants.JCR_WRITE.equals(p.getName()));
+ if (hasRead && hasWrite) {
//read/write privileges
- return getResourceBundle(locale).getString("privilegeset.readwrite");
+ displayName = rb.getString("privilegeset.readwrite");
}
}
//some other set of privileges
- return getResourceBundle(locale).getString("privilegeset.custom");
+ if (displayName == null) {
+ displayName = rb.getString("privilegeset.custom");
+ }
}
+ return displayName;
}
}
@@ -212,8 +205,7 @@ public class PrivilegesInfo {
}
if (privilege != null) {
JsonValue value = entry.getValue();
- if (value instanceof JsonObject) {
- JsonObject privilegeObj = (JsonObject)value;
+ if (value instanceof JsonObject privilegeObj) {
if (privilegeObj.containsKey(JsonConvert.KEY_ALLOW)) {
rights.granted.add(privilege);
}
@@ -261,102 +253,6 @@ public class PrivilegesInfo {
return declaredAccessRights.get(principal);
}
- /**
- * Returns the restrictions for the specified path.
- *
- * @param node the node to inspect
- * @param principalId the principalId to get the access rights for
- * @return map of restrictions (key is restriction name, value is Value or Value[])
- * @throws RepositoryException if any errors reading the information
- * @deprecated don't use this as it assumes that all the privileges have the same restrictions which may not be true
- */
- @Deprecated
- public Map<String, Object> getDeclaredRestrictionsForPrincipal(Node node, String principalId) throws RepositoryException {
- return getDeclaredRestrictionsForPrincipal(node.getSession(), node.getPath(), principalId);
- }
-
- /**
- * Returns the restrictions for the specified path.
- *
- * @param session the session for the current user
- * @param absPath the path to get the privileges for
- * @param principalId the principalId to get the access rights for
- * @return map of restrictions (key is restriction name, value is Value or Value[])
- * @throws RepositoryException if any errors reading the information
- * @deprecated don't use this as it assumes that all the privileges have the same restrictions which may not be true
- */
- @Deprecated
- public Map<String, Object> getDeclaredRestrictionsForPrincipal(Session session, String absPath, String principalId) throws RepositoryException {
- JsonObject aclJson = useGetAcl(json -> {
- try {
- return json.getAcl(session, absPath);
- } catch (RepositoryException e) {
- logger.warn("Failed to load Acl", e);
- }
- return null;
- });
-
- Map<String, Object> map;
- if (aclJson == null) {
- map = Collections.emptyMap();
- } else {
- Map<String, RestrictionDefinition> srMap = new HashMap<>();
- useRestrictionProvider(restrictionProvider -> {
- Set<RestrictionDefinition> supportedRestrictions = restrictionProvider.getSupportedRestrictions(absPath);
- for (RestrictionDefinition restrictionDefinition : supportedRestrictions) {
- srMap.put(restrictionDefinition.getName(), restrictionDefinition);
- }
- return null;
- });
-
- ValueFactory valueFactory = session.getValueFactory();
- map = new HashMap<>();
- aclJson.values().stream()
- .filter(val -> val instanceof JsonObject && ((JsonObject)val).getString(JsonConvert.KEY_PRINCIPAL).equals(principalId))
- .forEach(item -> {
- JsonObject privilegesObj = ((JsonObject)item).getJsonObject(JsonConvert.KEY_PRIVILEGES);
- if (privilegesObj != null) {
- privilegesObj.values()
- .forEach(privItem -> {
- if (privItem instanceof JsonObject) {
- JsonObject privilegeObj = (JsonObject)privItem;
- JsonValue jsonValue = privilegeObj.get(JsonConvert.KEY_ALLOW);
- if (jsonValue instanceof JsonObject) {
- JsonObject restriction = (JsonObject)jsonValue;
- restriction.entrySet().stream()
- .forEach(restrictionItem -> {
- String restrictionName = restrictionItem.getKey();
- int type = srMap.get(restrictionName).getRequiredType().tag();
- JsonValue value = restrictionItem.getValue();
- if (ValueType.ARRAY.equals(value.getValueType())) {
- JsonArray jsonArray = ((JsonArray)value);
- Value [] restrictionValues = new Value[jsonArray.size()];
- for (int i=0; i < jsonArray.size(); i++) {
- try {
- restrictionValues[i] = valueFactory.createValue(jsonArray.getString(i), type);
- } catch (ValueFormatException e) {
- logger.warn("Failed to create restriction value", e);
- }
- }
- map.put(restrictionName, restrictionValues);
- } else if (value instanceof JsonString){
- try {
- Value restrictionValue = valueFactory.createValue(((JsonString)value).getString(), type);
- map.put(restrictionName, restrictionValue);
- } catch (ValueFormatException e) {
- logger.warn("Failed to create restriction value", e);
- }
- }
- });
- }
- }
- });
- }
- });
- }
- return map;
- }
-
/**
* Returns the mapping of effective access rights that have been set for the resource at
* the given path.
@@ -675,8 +571,4 @@ public class PrivilegesInfo {
return useSvc(GetEffectiveAcl.class, fn);
}
- private static <T> T useRestrictionProvider(Function<RestrictionProvider, T> fn) {
- return useSvc(RestrictionProvider.class, fn);
- }
-
}
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/impl/PrincipalAceHelper.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/impl/PrincipalAceHelper.java
index ccc7783..cde78ad 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/impl/PrincipalAceHelper.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/impl/PrincipalAceHelper.java
@@ -19,7 +19,7 @@ package org.apache.sling.jcr.jackrabbit.accessmanager.impl;
import javax.jcr.security.AccessControlEntry;
import org.apache.jackrabbit.api.security.authorization.PrincipalAccessControlList;
-import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
import org.apache.sling.api.request.RequestPathInfo;
import org.apache.sling.api.resource.ResourceUtil;
import org.jetbrains.annotations.NotNull;
@@ -42,7 +42,7 @@ public class PrincipalAceHelper {
* @param request the current request
* @return the effect path
*/
- public static String getEffectivePath(SlingHttpServletRequest request) {
+ public static String getEffectivePath(SlingJakartaHttpServletRequest request) {
String effectivePath = request.getResource().getPath();
if (ResourceUtil.isNonExistingResource(request.getResource())) {
// for non-existing resource trim the selectors and extension
@@ -82,8 +82,8 @@ public class PrincipalAceHelper {
*/
public static boolean matchesResourcePath(String resourcePath, AccessControlEntry entry) {
boolean matches = false;
- if (entry instanceof PrincipalAccessControlList.Entry) {
- String effectivePath = ((PrincipalAccessControlList.Entry)entry).getEffectivePath();
+ if (entry instanceof PrincipalAccessControlList.Entry paclEntry) {
+ String effectivePath = paclEntry.getEffectivePath();
if (resourcePath == null) {
matches = effectivePath == null;
} else {
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java
index eec419c..c8ac520 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/package-info.java
@@ -17,7 +17,7 @@
* under the License.
*/
-@org.osgi.annotation.versioning.Version("4.0.0")
+@org.osgi.annotation.versioning.Version("5.0.0")
package org.apache.sling.jcr.jackrabbit.accessmanager;
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessGetServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessGetServlet.java
index b7cbf5f..2b9c935 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessGetServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessGetServlet.java
@@ -39,8 +39,6 @@ import javax.jcr.security.AccessControlEntry;
import javax.jcr.security.AccessControlList;
import javax.jcr.security.AccessControlPolicy;
import javax.jcr.security.Privilege;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletResponse;
import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
@@ -48,8 +46,8 @@ import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
import org.apache.jackrabbit.api.security.authorization.PrincipalAccessControlList;
import org.apache.jackrabbit.api.security.principal.PrincipalManager;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionDefinition;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
+import org.apache.sling.api.SlingJakartaHttpServletResponse;
import org.apache.sling.api.resource.ResourceNotFoundException;
import org.apache.sling.jcr.jackrabbit.accessmanager.LocalPrivilege;
import org.apache.sling.jcr.jackrabbit.accessmanager.LocalRestriction;
@@ -61,16 +59,18 @@ import org.jetbrains.annotations.Nullable;
import jakarta.json.Json;
import jakarta.json.JsonObject;
import jakarta.json.stream.JsonGenerator;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public abstract class AbstractAccessGetServlet extends AbstractAccessServlet {
/* (non-Javadoc)
- * @see org.apache.sling.api.servlets.SlingSafeMethodsServlet#doGet(org.apache.sling.api.SlingHttpServletRequest, org.apache.sling.api.SlingHttpServletResponse)
+ * @see org.apache.sling.api.servlets.SlingJakartaSafeMethodsServlet#doGet(org.apache.sling.api.SlingJakartaHttpServletRequest, org.apache.sling.api.SlingJakartaHttpServletResponse)
*/
@Override
- protected void doGet(SlingHttpServletRequest request,
- SlingHttpServletResponse response) throws ServletException,
+ protected void doGet(SlingJakartaHttpServletRequest request,
+ SlingJakartaHttpServletResponse response) throws ServletException,
IOException {
try {
@@ -112,7 +112,7 @@ public abstract class AbstractAccessGetServlet extends AbstractAccessServlet {
/**
* Return the path where the action should be applied
*/
- protected @Nullable String getItemPath(SlingHttpServletRequest request) {
+ protected @Nullable String getItemPath(SlingJakartaHttpServletRequest request) {
return request.getResource().getPath();
}
@@ -221,17 +221,17 @@ public abstract class AbstractAccessGetServlet extends AbstractAccessServlet {
.forEach(entry -> {
DeclarationType dt = null;
String effectivePath = null;
- if (entry instanceof PrincipalAccessControlList.Entry) {
+ if (entry instanceof PrincipalAccessControlList.Entry paclEntry) {
// for principal-based ACE, the effectivePath comes from the entry
- effectivePath = ((PrincipalAccessControlList.Entry)entry).getEffectivePath();
+ effectivePath = paclEntry.getEffectivePath();
if (effectivePath == null) {
// special case
effectivePath = PrincipalAceHelper.RESOURCE_PATH_REPOSITORY;
}
dt = DeclarationType.PRINCIPAL;
- } else if (accessControlPolicy instanceof JackrabbitAccessControlList) {
+ } else if (accessControlPolicy instanceof JackrabbitAccessControlList jacList) {
// for basic ACE, the effectivePath comes from the ACL path
- effectivePath = ((JackrabbitAccessControlList)accessControlPolicy).getPath();
+ effectivePath = jacList.getPath();
dt = DeclarationType.NODE;
}
List<AccessControlEntry> entriesForPath = effectivePathToEntriesMap.computeIfAbsent(effectivePath, key -> new ArrayList<>());
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessPostServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessPostServlet.java
index 95d2bf3..d422878 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessPostServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessPostServlet.java
@@ -30,29 +30,29 @@ import javax.jcr.security.AccessControlList;
import javax.jcr.security.AccessControlManager;
import javax.jcr.security.AccessControlPolicy;
import javax.jcr.security.AccessControlPolicyIterator;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.SlingHttpServletResponse;
-import org.apache.sling.api.request.header.MediaRangeList;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
+import org.apache.sling.api.SlingJakartaHttpServletResponse;
+import org.apache.sling.api.request.header.JakartaMediaRangeList;
import org.apache.sling.api.resource.ResourceNotFoundException;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.wrappers.SlingRequestPaths;
import org.apache.sling.jcr.jackrabbit.accessmanager.impl.PrincipalAceHelper;
-import org.apache.sling.servlets.post.AbstractPostResponse;
-import org.apache.sling.servlets.post.HtmlResponse;
-import org.apache.sling.servlets.post.JSONResponse;
+import org.apache.sling.servlets.post.JakartaHtmlResponse;
+import org.apache.sling.servlets.post.JakartaJSONResponse;
+import org.apache.sling.servlets.post.JakartaPostResponse;
+import org.apache.sling.servlets.post.JakartaPostResponseCreator;
import org.apache.sling.servlets.post.Modification;
-import org.apache.sling.servlets.post.PostResponse;
-import org.apache.sling.servlets.post.PostResponseCreator;
import org.apache.sling.servlets.post.SlingPostConstants;
import org.jetbrains.annotations.Nullable;
import org.osgi.framework.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Base class for all the POST servlets for the AccessManager operations
*/
@@ -65,21 +65,21 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
private final transient Logger log = LoggerFactory.getLogger(getClass());
/** Sorted list of post response creator holders. */
- private final List<PostResponseCreatorHolder> postResponseCreators = new ArrayList<>();
+ private final List<JakartaPostResponseCreatorHolder> postResponseCreators = new ArrayList<>();
/** Cached array of post response creators used during request processing. */
- private transient PostResponseCreator[] cachedPostResponseCreators = new PostResponseCreator[0];
+ private transient JakartaPostResponseCreator[] cachedPostResponseCreators = new JakartaPostResponseCreator[0];
/* (non-Javadoc)
- * @see org.apache.sling.api.servlets.SlingAllMethodsServlet#doPost(org.apache.sling.api.SlingHttpServletRequest, org.apache.sling.api.SlingHttpServletResponse)
+ * @see org.apache.sling.api.servlets.SlingJakartaAllMethodsServlet#doPost(org.apache.sling.api.SlingJakartaHttpServletRequest, org.apache.sling.api.SlingJakartaHttpServletResponse)
*/
@Override
- protected void doPost(SlingHttpServletRequest request,
- SlingHttpServletResponse httpResponse) throws ServletException,
+ protected void doPost(SlingJakartaHttpServletRequest request,
+ SlingJakartaHttpServletResponse httpResponse) throws ServletException,
IOException {
// prepare the response
- PostResponse response = createPostResponse(request);
+ JakartaPostResponse response = createPostResponse(request);
response.setReferer(request.getHeader("referer"));
// calculate the paths
@@ -176,21 +176,6 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
}
}
- /**
- * Creates an instance of a HtmlResponse.
- * @param req The request being serviced
- * @return a {@link org.apache.sling.servlets.post.JSONResponse} if any of these conditions are true:
- * <ul>
- * <li>the response content type is application/json
- * </ul>
- * or a {@link org.apache.sling.servlets.post.HtmlResponse} otherwise
- * @deprecated use {@link #createPostResponse(SlingHttpServletRequest)} instead
- */
- @Deprecated
- protected AbstractPostResponse createHtmlResponse(SlingHttpServletRequest req) {
- return (AbstractPostResponse)createPostResponse(req);
- }
-
/**
* Creates an instance of a PostResponse.
* @param req The request being serviced
@@ -202,34 +187,34 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
* </ul>
* or a {@link org.apache.sling.api.servlets.PostResponse} otherwise
*/
- PostResponse createPostResponse(final SlingHttpServletRequest req) {
- for (final PostResponseCreator creator : cachedPostResponseCreators) {
- final PostResponse response = creator.createPostResponse(req);
+ JakartaPostResponse createPostResponse(final SlingJakartaHttpServletRequest req) {
+ for (final JakartaPostResponseCreator creator : cachedPostResponseCreators) {
+ final JakartaPostResponse response = creator.createPostResponse(req);
if (response != null) {
return response;
}
}
//for backward compatibility, if no "accept" request param or header is supplied
- // then prefer the SlingHttpServletRequest#getResponseContentType value
- MediaRangeList mediaRangeList = null;
- String queryParam = req.getParameter(MediaRangeList.PARAM_ACCEPT);
+ // then prefer the SlingJakartaHttpServletRequest#getResponseContentType value
+ JakartaMediaRangeList mediaRangeList = null;
+ String queryParam = req.getParameter(JakartaMediaRangeList.PARAM_ACCEPT);
if (queryParam == null || queryParam.trim().length() == 0) {
- String headerValue = req.getHeader(MediaRangeList.HEADER_ACCEPT);
+ String headerValue = req.getHeader(JakartaMediaRangeList.HEADER_ACCEPT);
if (headerValue == null || headerValue.trim().length() == 0) {
//no param or header supplied, so try the response content type
- mediaRangeList = new MediaRangeList(req.getResponseContentType());
+ mediaRangeList = new JakartaMediaRangeList(req.getResponseContentType());
}
}
// Fall through to default behavior
if (mediaRangeList == null) {
- mediaRangeList = new MediaRangeList(req);
+ mediaRangeList = new JakartaMediaRangeList(req);
}
- if (JSONResponse.RESPONSE_CONTENT_TYPE.equals(mediaRangeList.prefer("text/html", JSONResponse.RESPONSE_CONTENT_TYPE))) {
- return new JSONResponse();
+ if (JakartaJSONResponse.RESPONSE_CONTENT_TYPE.equals(mediaRangeList.prefer("text/html", JakartaJSONResponse.RESPONSE_CONTENT_TYPE))) {
+ return new JakartaJSONResponse();
} else {
- return new HtmlResponse();
+ return new JakartaHtmlResponse();
}
}
@@ -240,41 +225,10 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
* @param response the response
* @param changes the changes to report
* @throws RepositoryException if any errors applying the changes
- *
- * @deprecated use {@link #handleOperation(SlingHttpServletRequest, PostResponse, List)} instead
*/
- @Deprecated
- protected void handleOperation(SlingHttpServletRequest request,
- AbstractPostResponse response, List<Modification> changes) throws RepositoryException {
- handleOperation(request, (PostResponse)response, changes);
- }
-
- /**
- * Extending Servlet should implement this operation to do the work
- *
- * @param request the sling http request to process
- * @param response the response
- * @param changes the changes to report
- * @throws RepositoryException if any errors applying the changes
- */
- protected abstract void handleOperation(SlingHttpServletRequest request,
- PostResponse response, List<Modification> changes) throws RepositoryException;
-
+ protected abstract void handleOperation(SlingJakartaHttpServletRequest request,
+ JakartaPostResponse response, List<Modification> changes) throws RepositoryException;
- /**
- * compute redirect URL (SLING-126)
- *
- * @param request the sling http request to process
- * @param ctx the post processor
- * @return the redirect location or <code>null</code>
- * @throws IOException if there is something invalid with the :redirect value
- * @deprecated use {@link #getRedirectUrl(HttpServletRequest, PostResponse)} instead
- */
- @Deprecated
- protected String getRedirectUrl(HttpServletRequest request, AbstractPostResponse ctx) throws IOException {
- return getRedirectUrl(request, (PostResponse)ctx);
- }
-
/**
* compute redirect URL (SLING-126)
*
@@ -283,7 +237,7 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
* @return the redirect location or <code>null</code>
* @throws IOException if there is something invalid with the :redirect value
*/
- protected String getRedirectUrl(HttpServletRequest request, PostResponse ctx) throws IOException {
+ protected String getRedirectUrl(HttpServletRequest request, JakartaPostResponse ctx) throws IOException {
// redirect param has priority (but see below, magic star)
String result = request.getParameter(SlingPostConstants.RP_REDIRECT_TO);
if (result != null) {
@@ -329,7 +283,7 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
return result;
}
- protected boolean isSetStatus(SlingHttpServletRequest request) {
+ protected boolean isSetStatus(SlingJakartaHttpServletRequest request) {
String statusParam = request.getParameter(SlingPostConstants.RP_STATUS);
if (statusParam == null) {
log.debug(
@@ -368,7 +322,7 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
* @param request the sling http request to process
* @return the resolved path of the found item
*/
- protected String getItemPath(SlingHttpServletRequest request) {
+ protected String getItemPath(SlingJakartaHttpServletRequest request) {
if (allowNonExistingPaths()) {
return PrincipalAceHelper.getEffectivePath(request);
} else {
@@ -384,7 +338,7 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
* @param path the path to externalize
* @return the url
*/
- protected String externalizePath(SlingHttpServletRequest request,
+ protected String externalizePath(SlingJakartaHttpServletRequest request,
String path) {
if (path == null) {
if (allowNonExistingPaths()) {
@@ -456,8 +410,8 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
// check for an existing access control list to edit
AccessControlPolicy[] policies = accessControlManager.getPolicies(resourcePath);
for (AccessControlPolicy policy : policies) {
- if (policy instanceof AccessControlList) {
- return (AccessControlList) policy;
+ if (policy instanceof AccessControlList acList) {
+ return acList;
}
}
@@ -466,8 +420,8 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
AccessControlPolicyIterator applicablePolicies = accessControlManager.getApplicablePolicies(resourcePath);
while (applicablePolicies.hasNext()) {
AccessControlPolicy policy = applicablePolicies.nextAccessControlPolicy();
- if (policy instanceof AccessControlList) {
- return (AccessControlList) policy;
+ if (policy instanceof AccessControlList acList) {
+ return acList;
}
}
}
@@ -500,8 +454,8 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
// check for an existing access control list to edit
AccessControlPolicy[] policies = accessControlManager.getPolicies(resourcePath);
for (AccessControlPolicy policy : policies) {
- if (policy instanceof AccessControlList) {
- acl = (AccessControlList) policy;
+ if (policy instanceof AccessControlList acList) {
+ acl = acList;
}
}
@@ -510,8 +464,8 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
AccessControlPolicyIterator applicablePolicies = accessControlManager.getApplicablePolicies(resourcePath);
while (applicablePolicies.hasNext()) {
AccessControlPolicy policy = applicablePolicies.nextAccessControlPolicy();
- if (policy instanceof AccessControlList) {
- acl = (AccessControlList) policy;
+ if (policy instanceof AccessControlList acList) {
+ acl = acList;
}
}
}
@@ -530,13 +484,13 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
// @Reference(service = PostResponseCreator.class,
// cardinality = ReferenceCardinality.MULTIPLE,
// policy = ReferencePolicy.DYNAMIC)
- protected void bindPostResponseCreator(final PostResponseCreator creator, final Map<String, Object> properties) {
- final PostResponseCreatorHolder nngh = new PostResponseCreatorHolder(creator, getRanking(properties));
+ protected void bindPostResponseCreator(final JakartaPostResponseCreator creator, final Map<String, Object> properties) {
+ final JakartaPostResponseCreatorHolder nngh = new JakartaPostResponseCreatorHolder(creator, getRanking(properties));
synchronized ( this.postResponseCreators ) {
int index = 0;
while ( index < this.postResponseCreators.size() &&
- nngh.getRanking() < this.postResponseCreators.get(index).getRanking() ) {
+ nngh.ranking() < this.postResponseCreators.get(index).ranking() ) {
index++;
}
if ( index == this.postResponseCreators.size() ) {
@@ -554,12 +508,12 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
* @param creator the response creator service reference
* @param properties the component properties for the service reference
*/
- protected void unbindPostResponseCreator(final PostResponseCreator creator, final Map<String, Object> properties) {
+ protected void unbindPostResponseCreator(final JakartaPostResponseCreator creator, final Map<String, Object> properties) {
synchronized ( this.postResponseCreators ) {
- final Iterator<PostResponseCreatorHolder> i = this.postResponseCreators.iterator();
+ final Iterator<JakartaPostResponseCreatorHolder> i = this.postResponseCreators.iterator();
while ( i.hasNext() ) {
- final PostResponseCreatorHolder current = i.next();
- if ( current.getCreator() == creator ) {
+ final JakartaPostResponseCreatorHolder current = i.next();
+ if ( current.creator() == creator ) {
i.remove();
}
}
@@ -572,10 +526,10 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
* This method is called by sync'ed methods, no need to add additional syncing.
*/
private void updatePostResponseCreatorCache() {
- final PostResponseCreator[] localCache = new PostResponseCreator[this.postResponseCreators.size()];
+ final JakartaPostResponseCreator[] localCache = new JakartaPostResponseCreator[this.postResponseCreators.size()];
int index = 0;
- for(final PostResponseCreatorHolder current : this.postResponseCreators) {
- localCache[index] = current.getCreator();
+ for(final JakartaPostResponseCreatorHolder current : this.postResponseCreators) {
+ localCache[index] = current.creator();
index++;
}
this.cachedPostResponseCreators = localCache;
@@ -583,25 +537,9 @@ public abstract class AbstractAccessPostServlet extends AbstractAccessServlet {
private int getRanking(final Map<String, Object> properties) {
final Object val = properties.get(Constants.SERVICE_RANKING);
- return val instanceof Integer ? (Integer)val : 0;
+ return val instanceof Integer intVal ? intVal : 0;
}
-
- private static final class PostResponseCreatorHolder {
- private final PostResponseCreator creator;
- private final int ranking;
- public PostResponseCreatorHolder(PostResponseCreator creator, int ranking) {
- this.creator = creator;
- this.ranking = ranking;
- }
-
- public PostResponseCreator getCreator() {
- return creator;
- }
-
- public int getRanking() {
- return ranking;
- }
+ private static final record JakartaPostResponseCreatorHolder(JakartaPostResponseCreator creator, int ranking) { }
- }
}
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessServlet.java
index a330d96..9e3cccb 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessServlet.java
@@ -21,12 +21,12 @@ import java.util.Set;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.CompositeRestrictionProvider;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
-import org.apache.sling.api.servlets.SlingAllMethodsServlet;
+import org.apache.sling.api.servlets.SlingJakartaAllMethodsServlet;
/**
* Base class for all the servlets for the AccessManager operations
*/
-public abstract class AbstractAccessServlet extends SlingAllMethodsServlet {
+public abstract class AbstractAccessServlet extends SlingJakartaAllMethodsServlet {
private static final long serialVersionUID = 6615497265938616188L;
private transient RestrictionProvider compositeRestrictionProvider = null;
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAceServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAceServlet.java
index 001dd77..7a1fb86 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAceServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAceServlet.java
@@ -66,8 +66,7 @@ public abstract class AbstractGetAceServlet extends AbstractAccessGetServlet {
Map<Privilege, LocalPrivilege> privilegeToLocalPrivilegesMap = new HashMap<>();
for (List<AccessControlEntry> accessControlEntries : effectivePathToEntriesMap.values()) {
for (AccessControlEntry accessControlEntry : accessControlEntries) {
- if (accessControlEntry instanceof JackrabbitAccessControlEntry) {
- JackrabbitAccessControlEntry jrAccessControlEntry = (JackrabbitAccessControlEntry)accessControlEntry;
+ if (accessControlEntry instanceof JackrabbitAccessControlEntry jrAccessControlEntry) {
Privilege[] privileges = jrAccessControlEntry.getPrivileges();
if (privileges != null) {
processACE(srMap, jrAccessControlEntry, privileges, privilegeToLocalPrivilegesMap);
@@ -102,13 +101,4 @@ public abstract class AbstractGetAceServlet extends AbstractAccessGetServlet {
protected abstract Map<String, List<AccessControlEntry>> getAccessControlEntriesMap(Session session, String absPath, Principal principal,
Map<Principal, Map<DeclarationType, Set<String>>> declaredAtPaths) throws RepositoryException;
- /**
- * @deprecated use {@link #getAccessControlEntriesMap(Session, String, Principal, Map)} instead
- */
- @Deprecated
- protected AccessControlEntry[] getAccessControlEntries(Session session, String absPath, Principal principal) throws RepositoryException {
- return getAccessControlEntriesMap(session, absPath, principal, new HashMap<>()).values().stream()
- .toArray(size -> new AccessControlEntry[size]);
- }
-
}
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java
index c65594e..541ee1f 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractGetAclServlet.java
@@ -30,39 +30,21 @@ import javax.jcr.Session;
import javax.jcr.security.AccessControlEntry;
import javax.jcr.security.AccessControlManager;
import javax.jcr.security.Privilege;
-import jakarta.json.Json;
-import jakarta.json.JsonArrayBuilder;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonObjectBuilder;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionDefinition;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
import org.apache.sling.jcr.jackrabbit.accessmanager.LocalPrivilege;
-import org.apache.sling.jcr.jackrabbit.accessmanager.LocalRestriction;
import org.apache.sling.jcr.jackrabbit.accessmanager.impl.JsonConvert;
import org.apache.sling.jcr.jackrabbit.accessmanager.impl.PrivilegesHelper;
+import jakarta.json.Json;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+
@SuppressWarnings({"serial", "java:S110"})
public abstract class AbstractGetAclServlet extends AbstractAccessGetServlet {
- /**
- * @deprecated since 3.0.12, To be removed when the exported package version goes to 4.0
- * use {@link JsonConvert#KEY_ORDER} instead
- */
- @Deprecated
- protected static final String KEY_ORDER = JsonConvert.KEY_ORDER;
- /**
- * @deprecated since 3.0.12, To be removed when the exported package version goes to 4.0
- */
- @Deprecated
- protected static final String KEY_DENIED = "denied";
- /**
- * @deprecated since 3.0.12, To be removed when the exported package version goes to 4.0
- */
- @Deprecated
- protected static final String KEY_GRANTED = "granted";
-
@Override
protected JsonObject internalJson(Session session, String resourcePath, String principalId) throws RepositoryException {
return internalGetAcl(session, resourcePath);
@@ -85,8 +67,7 @@ public abstract class AbstractGetAclServlet extends AbstractAccessGetServlet {
for (Entry<String, List<AccessControlEntry>> entry : effectivePathToEntriesMap.entrySet()) {
List<AccessControlEntry> accessControlEntries = entry.getValue();
for (AccessControlEntry accessControlEntry : accessControlEntries) {
- if (accessControlEntry instanceof JackrabbitAccessControlEntry) {
- JackrabbitAccessControlEntry jrAccessControlEntry = (JackrabbitAccessControlEntry)accessControlEntry;
+ if (accessControlEntry instanceof JackrabbitAccessControlEntry jrAccessControlEntry) {
Privilege[] privileges = jrAccessControlEntry.getPrivileges();
if (privileges != null) {
Principal principal = accessControlEntry.getPrincipal();
@@ -145,40 +126,7 @@ public abstract class AbstractGetAclServlet extends AbstractAccessGetServlet {
}
- /**
- * @deprecated use {@link JsonConvert#addRestrictions(JsonObjectBuilder, String, Set)} instead
- */
- @Deprecated
- protected void addRestrictions(JsonObjectBuilder privilegeObj, String key, Set<LocalRestriction> restrictions) {
- JsonConvert.addRestrictions(privilegeObj, key, restrictions);
- }
-
- /**
- * @deprecated use {@link JsonConvert#addTo(javax.json.JsonArrayBuilder, Object)} instead
- */
- @Deprecated
- protected JsonObjectBuilder addTo(JsonObjectBuilder builder, String key, Object value) {
- return JsonConvert.addTo(builder, key, value);
- }
-
- /**
- * @deprecated use {@link JsonConvert#addTo(JsonObjectBuilder, String, Object)} instead
- */
- @Deprecated
- protected JsonArrayBuilder addTo(JsonArrayBuilder builder, Object value) {
- return JsonConvert.addTo(builder, value);
- }
-
protected abstract Map<String, List<AccessControlEntry>> getAccessControlEntriesMap(Session session, String absPath,
Map<Principal, Map<DeclarationType, Set<String>>> declaredAtPaths) throws RepositoryException;
- /**
- * @deprecated use {@link #getAccessControlEntriesMap(Session, String, Map)} instead
- */
- @Deprecated
- protected AccessControlEntry[] getAccessControlEntries(Session session, String absPath) throws RepositoryException {
- return getAccessControlEntriesMap(session, absPath, new HashMap<>()).values().stream()
- .toArray(size -> new AccessControlEntry[size]);
- }
-
}
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/DeleteAcesServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/DeleteAcesServlet.java
index 71d0177..083d272 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/DeleteAcesServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/DeleteAcesServlet.java
@@ -27,15 +27,15 @@ import javax.jcr.Session;
import javax.jcr.security.AccessControlEntry;
import javax.jcr.security.AccessControlList;
import javax.jcr.security.AccessControlManager;
-import javax.servlet.Servlet;
+import jakarta.servlet.Servlet;
import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.jackrabbit.api.security.principal.PrincipalManager;
-import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
import org.apache.sling.jcr.jackrabbit.accessmanager.DeleteAces;
import org.apache.sling.servlets.post.Modification;
-import org.apache.sling.servlets.post.PostResponse;
-import org.apache.sling.servlets.post.PostResponseCreator;
+import org.apache.sling.servlets.post.JakartaPostResponse;
+import org.apache.sling.servlets.post.JakartaPostResponseCreator;
import org.apache.sling.servlets.post.SlingPostConstants;
import org.jetbrains.annotations.NotNull;
import org.osgi.service.component.annotations.Component;
@@ -90,7 +90,7 @@ import org.slf4j.LoggerFactory;
bind = "bindPostResponseCreator",
cardinality = ReferenceCardinality.MULTIPLE,
policyOption = ReferencePolicyOption.GREEDY,
- service = PostResponseCreator.class)
+ service = JakartaPostResponseCreator.class)
})
@SuppressWarnings("java:S110")
public class DeleteAcesServlet extends AbstractAccessPostServlet implements DeleteAces {
@@ -102,11 +102,11 @@ public class DeleteAcesServlet extends AbstractAccessPostServlet implements Dele
private final transient Logger log = LoggerFactory.getLogger(getClass());
/* (non-Javadoc)
- * @see org.apache.sling.jackrabbit.accessmanager.post.AbstractAccessPostServlet#handleOperation(org.apache.sling.api.SlingHttpServletRequest, org.apache.sling.servlets.post.PostResponse, java.util.List)
+ * @see org.apache.sling.jackrabbit.accessmanager.post.AbstractAccessPostServlet#handleOperation(org.apache.sling.api.SlingJakartaHttpServletRequest, org.apache.sling.servlets.post.JakartaPostResponse, java.util.List)
*/
@Override
- protected void handleOperation(SlingHttpServletRequest request,
- PostResponse htmlResponse, List<Modification> changes)
+ protected void handleOperation(SlingJakartaHttpServletRequest request,
+ JakartaPostResponse htmlResponse, List<Modification> changes)
throws RepositoryException {
Session session = request.getResourceResolver().adaptTo(Session.class);
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/DeletePrincipalAcesServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/DeletePrincipalAcesServlet.java
index 1d0c80d..4446ec5 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/DeletePrincipalAcesServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/DeletePrincipalAcesServlet.java
@@ -27,14 +27,13 @@ import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.security.AccessControlEntry;
import javax.jcr.security.AccessControlPolicy;
-import javax.servlet.Servlet;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlManager;
import org.apache.jackrabbit.api.security.authorization.PrincipalAccessControlList;
import org.apache.sling.jcr.jackrabbit.accessmanager.DeletePrincipalAces;
import org.apache.sling.jcr.jackrabbit.accessmanager.impl.PrincipalAceHelper;
+import org.apache.sling.servlets.post.JakartaPostResponseCreator;
import org.apache.sling.servlets.post.Modification;
-import org.apache.sling.servlets.post.PostResponseCreator;
import org.jetbrains.annotations.NotNull;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
@@ -43,6 +42,8 @@ import org.osgi.service.component.annotations.ReferencePolicyOption;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import jakarta.servlet.Servlet;
+
/**
* <p>
* Sling Post Servlet implementation for deleting the principal ACE for a set of principals on a JCR
@@ -88,7 +89,7 @@ import org.slf4j.LoggerFactory;
bind = "bindPostResponseCreator",
cardinality = ReferenceCardinality.MULTIPLE,
policyOption = ReferencePolicyOption.GREEDY,
- service = PostResponseCreator.class)
+ service = JakartaPostResponseCreator.class)
})
@SuppressWarnings("java:S110")
public class DeletePrincipalAcesServlet extends DeleteAcesServlet implements DeletePrincipalAces {
@@ -177,8 +178,8 @@ public class DeletePrincipalAcesServlet extends DeleteAcesServlet implements Del
// check for an existing access control list to edit
AccessControlPolicy[] policies = jacm.getPolicies(principal);
for (AccessControlPolicy policy : policies) {
- if (policy instanceof PrincipalAccessControlList) {
- acl = (PrincipalAccessControlList) policy;
+ if (policy instanceof PrincipalAccessControlList pacList) {
+ acl = pacList;
}
}
return acl;
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAceServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAceServlet.java
index f729561..04acfe9 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAceServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAceServlet.java
@@ -28,8 +28,6 @@ import javax.jcr.Session;
import javax.jcr.security.AccessControlEntry;
import javax.jcr.security.AccessControlManager;
import javax.jcr.security.AccessControlPolicy;
-import jakarta.json.JsonObject;
-import javax.servlet.Servlet;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
import org.apache.sling.jcr.jackrabbit.accessmanager.GetAce;
@@ -38,6 +36,9 @@ import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicyOption;
+import jakarta.json.JsonObject;
+import jakarta.servlet.Servlet;
+
/**
* <p>
* Sling Get Servlet implementation for getting the ACE for a principal on a JCR
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java
index abea572..d197363 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetAclServlet.java
@@ -26,8 +26,6 @@ import javax.jcr.Session;
import javax.jcr.security.AccessControlEntry;
import javax.jcr.security.AccessControlManager;
import javax.jcr.security.AccessControlPolicy;
-import jakarta.json.JsonObject;
-import javax.servlet.Servlet;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
import org.apache.sling.jcr.jackrabbit.accessmanager.GetAcl;
@@ -36,6 +34,9 @@ import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicyOption;
+import jakarta.json.JsonObject;
+import jakarta.servlet.Servlet;
+
/**
* <p>
* Sling GET servlet implementation for dumping the declared ACL of a resource to JSON.
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAceServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAceServlet.java
index 6a2650f..9902998 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAceServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAceServlet.java
@@ -28,9 +28,6 @@ import javax.jcr.Session;
import javax.jcr.security.AccessControlEntry;
import javax.jcr.security.AccessControlManager;
import javax.jcr.security.AccessControlPolicy;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonObjectBuilder;
-import javax.servlet.Servlet;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
import org.apache.sling.jcr.jackrabbit.accessmanager.GetEffectiveAce;
@@ -40,6 +37,10 @@ import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicyOption;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.servlet.Servlet;
+
/**
* <p>
* Sling Get Servlet implementation for getting the effective ACE for a principal on a JCR
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java
index f218ac6..e308598 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetEffectiveAclServlet.java
@@ -26,9 +26,6 @@ import javax.jcr.Session;
import javax.jcr.security.AccessControlEntry;
import javax.jcr.security.AccessControlManager;
import javax.jcr.security.AccessControlPolicy;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonObjectBuilder;
-import javax.servlet.Servlet;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
import org.apache.sling.jcr.jackrabbit.accessmanager.GetEffectiveAcl;
@@ -38,6 +35,10 @@ import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicyOption;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.servlet.Servlet;
+
/**
* <p>
* Sling GET servlet implementation for dumping the declared ACL of a resource to JSON.
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetPrincipalAceServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetPrincipalAceServlet.java
index 35ea1d9..2472ae7 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetPrincipalAceServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/GetPrincipalAceServlet.java
@@ -28,15 +28,13 @@ import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.security.AccessControlEntry;
import javax.jcr.security.AccessControlManager;
-import jakarta.json.JsonObject;
-import javax.servlet.Servlet;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlManager;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlPolicy;
import org.apache.jackrabbit.api.security.authorization.PrincipalAccessControlList;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
-import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
import org.apache.sling.jcr.jackrabbit.accessmanager.GetPrincipalAce;
import org.apache.sling.jcr.jackrabbit.accessmanager.impl.PrincipalAceHelper;
import org.jetbrains.annotations.NotNull;
@@ -46,6 +44,9 @@ import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicyOption;
+import jakarta.json.JsonObject;
+import jakarta.servlet.Servlet;
+
/**
* <p>
* Sling Get Servlet implementation for getting the principal based ACE for a principal on a JCR
@@ -99,7 +100,7 @@ public class GetPrincipalAceServlet extends AbstractGetAceServlet implements Get
private static final long serialVersionUID = 1654062732084983394L;
@Override
- protected @Nullable String getItemPath(SlingHttpServletRequest request) {
+ protected @Nullable String getItemPath(SlingJakartaHttpServletRequest request) {
return PrincipalAceHelper.getEffectivePath(request);
}
@@ -118,8 +119,7 @@ public class GetPrincipalAceServlet extends AbstractGetAceServlet implements Get
protected Map<String, List<AccessControlEntry>> getAccessControlEntriesMap(Session session, String absPath,
Principal principal, Map<Principal, Map<DeclarationType, Set<String>>> declaredAtPaths) throws RepositoryException {
AccessControlManager acMgr = session.getAccessControlManager();
- if (acMgr instanceof JackrabbitAccessControlManager) {
- JackrabbitAccessControlManager jacMgr = (JackrabbitAccessControlManager)acMgr;
+ if (acMgr instanceof JackrabbitAccessControlManager jacMgr) {
JackrabbitAccessControlPolicy[] policies = jacMgr.getPolicies(principal);
return entriesSortedByEffectivePath(policies, ace -> matchesPrincipalAccessControlEntry(ace, absPath, principal), declaredAtPaths);
} else {
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/ModifyAceServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/ModifyAceServlet.java
index aa0e833..bf1f6e6 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/ModifyAceServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/ModifyAceServlet.java
@@ -46,7 +46,6 @@ import javax.jcr.security.AccessControlManager;
import javax.jcr.security.AccessControlPolicy;
import javax.jcr.security.AccessControlPolicyIterator;
import javax.jcr.security.Privilege;
-import javax.servlet.Servlet;
import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
@@ -56,14 +55,14 @@ import org.apache.jackrabbit.api.security.principal.PrincipalManager;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionDefinition;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
-import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
import org.apache.sling.jcr.jackrabbit.accessmanager.LocalPrivilege;
import org.apache.sling.jcr.jackrabbit.accessmanager.LocalRestriction;
import org.apache.sling.jcr.jackrabbit.accessmanager.ModifyAce;
import org.apache.sling.jcr.jackrabbit.accessmanager.impl.PrivilegesHelper;
+import org.apache.sling.servlets.post.JakartaPostResponse;
+import org.apache.sling.servlets.post.JakartaPostResponseCreator;
import org.apache.sling.servlets.post.Modification;
-import org.apache.sling.servlets.post.PostResponse;
-import org.apache.sling.servlets.post.PostResponseCreator;
import org.apache.sling.servlets.post.SlingPostConstants;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -72,6 +71,8 @@ import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicyOption;
+import jakarta.servlet.Servlet;
+
/**
* <p>
* Sling Post Servlet implementation for modifying the ACEs for a principal on a JCR
@@ -144,7 +145,7 @@ reference = {
bind = "bindPostResponseCreator",
cardinality = ReferenceCardinality.MULTIPLE,
policyOption = ReferencePolicyOption.GREEDY,
- service = PostResponseCreator.class)
+ service = JakartaPostResponseCreator.class)
})
@SuppressWarnings("java:S110")
public class ModifyAceServlet extends AbstractAccessPostServlet implements ModifyAce {
@@ -212,11 +213,11 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
SlingPostConstants.SUFFIX_DELETE));
/* (non-Javadoc)
- * @see org.apache.sling.jackrabbit.accessmanager.post.AbstractAccessPostServlet#handleOperation(org.apache.sling.api.SlingHttpServletRequest, org.apache.sling.servlets.post.PostResponse, java.util.List)
+ * @see org.apache.sling.jackrabbit.accessmanager.post.AbstractAccessPostServlet#handleOperation(org.apache.sling.api.SlingJakartaHttpServletRequest, org.apache.sling.servlets.post.JakartaPostResponse, java.util.List)
*/
@Override
- protected void handleOperation(SlingHttpServletRequest request,
- PostResponse response, List<Modification> changes)
+ protected void handleOperation(SlingJakartaHttpServletRequest request,
+ JakartaPostResponse response, List<Modification> changes)
throws RepositoryException {
Session session = request.getResourceResolver().adaptTo(Session.class);
String resourcePath = getItemPath(request);
@@ -352,9 +353,9 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
protected @Nullable JackrabbitAccessControlEntry getJackrabbitAccessControlEntry(@NotNull AccessControlEntry entry, @NotNull String resourcePath,
@NotNull Principal forPrincipal) {
JackrabbitAccessControlEntry jrEntry = null;
- if (entry instanceof JackrabbitAccessControlEntry &&
+ if (entry instanceof JackrabbitAccessControlEntry jacEntry &&
entry.getPrincipal().equals(forPrincipal)) {
- jrEntry = (JackrabbitAccessControlEntry)entry;
+ jrEntry = jacEntry;
}
return jrEntry;
}
@@ -365,7 +366,7 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
* @param pattern the regex pattern to match
* @return map of parameter names to Matcher that match the pattern
*/
- protected @NotNull Map<String, Matcher> getMatchedRequestParameterNames(@NotNull SlingHttpServletRequest request, @NotNull Pattern pattern) {
+ protected @NotNull Map<String, Matcher> getMatchedRequestParameterNames(@NotNull SlingJakartaHttpServletRequest request, @NotNull Pattern pattern) {
Map<String, Matcher> keys = new HashMap<>();
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
@@ -387,7 +388,7 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
* @param privilegeToLocalPrivilegesMap the map containing the declared LocalPrivilege items
*/
protected void processPostedPrivilegeDeleteParams(@NotNull AccessControlManager acm,
- @NotNull SlingHttpServletRequest request,
+ @NotNull SlingJakartaHttpServletRequest request,
@NotNull Map<Privilege, LocalPrivilege> privilegeToLocalPrivilegesMap) throws RepositoryException {
@NotNull
Map<String, Matcher> postedPrivilegeDeleteNames = getMatchedRequestParameterNames(request, PRIVILEGE_PATTERN_DELETE);
@@ -419,7 +420,7 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
* @param privilegeToLocalPrivilegesMap the map containing the declared LocalPrivilege items
*/
protected void processPostedRestrictionDeleteParams(@NotNull AccessControlManager acm,
- @NotNull SlingHttpServletRequest request,
+ @NotNull SlingJakartaHttpServletRequest request,
@NotNull Map<String, RestrictionDefinition> srMap,
@NotNull Map<Privilege, LocalPrivilege> privilegeToLocalPrivilegesMap) throws RepositoryException {
@NotNull
@@ -492,7 +493,7 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
* @param generalRestrictions the general restrictions that are not for a specific privilege
*/
protected Set<LocalRestriction> postedRestrictionsForPrivilege(
- @NotNull SlingHttpServletRequest request,
+ @NotNull SlingJakartaHttpServletRequest request,
@NotNull Map<String, RestrictionDefinition> srMap,
@NotNull Privilege forPrivilege,
@NotNull PrivilegeValues forAllowOrDeny,
@@ -537,7 +538,7 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
* @param paramName the request parameter name that contains the restriction values
*/
protected LocalRestriction toLocalRestriction(
- @NotNull SlingHttpServletRequest request,
+ @NotNull SlingJakartaHttpServletRequest request,
@NotNull Map<String, RestrictionDefinition> srMap,
@NotNull String restrictionName,
@NotNull String paramName) throws RepositoryException {
@@ -577,7 +578,7 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
* @param privilegeLongestDepthMap the map of privileges to their longest depth
*/
protected void processPostedPrivilegeAndRestrictionParams(@NotNull AccessControlManager acm,
- @NotNull SlingHttpServletRequest request,
+ @NotNull SlingJakartaHttpServletRequest request,
@NotNull Map<String, RestrictionDefinition> srMap,
@NotNull Map<Privilege, LocalPrivilege> privilegeToLocalPrivilegesMap,
@NotNull Map<Privilege, Integer> privilegeLongestDepthMap) throws RepositoryException {
@@ -645,7 +646,7 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
List<PrivilegeValues> privilegeValues = paramValues.stream()
.map(PrivilegeValues::valueOfParam)
.sorted((v1, v2) -> Integer.compare(v2.ordinal(), v1.ordinal()))
- .collect(Collectors.toList());
+ .toList();
boolean none = false;
boolean allow = false;
Set<LocalRestriction> allowRestrictions = Collections.emptySet();
@@ -653,13 +654,11 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
Set<LocalRestriction> denyRestrictions = Collections.emptySet();
for (PrivilegeValues value : privilegeValues) {
switch (value) {
- case DENY:
- case DENIED:
+ case DENY, DENIED:
deny = true;
denyRestrictions = postedRestrictionsForPrivilege(request, srMap, privilege, value, generalRestrictions);
break;
- case ALLOW:
- case GRANTED:
+ case ALLOW, GRANTED:
allow = true;
allowRestrictions = postedRestrictionsForPrivilege(request, srMap, privilege, value, generalRestrictions);
break;
@@ -730,8 +729,8 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
AccessControlPolicy[] policies = acm.getPolicies(resourcePath);
JackrabbitAccessControlList acl = null;
for (AccessControlPolicy policy : policies) {
- if (policy instanceof JackrabbitAccessControlList) {
- acl = (JackrabbitAccessControlList) policy;
+ if (policy instanceof JackrabbitAccessControlList jacList) {
+ acl = jacList;
break;
}
}
@@ -739,8 +738,8 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
AccessControlPolicyIterator applicablePolicies = acm.getApplicablePolicies(resourcePath);
while (applicablePolicies.hasNext()) {
AccessControlPolicy policy = applicablePolicies.nextAccessControlPolicy();
- if (policy instanceof JackrabbitAccessControlList) {
- acl = (JackrabbitAccessControlList) policy;
+ if (policy instanceof JackrabbitAccessControlList jacList) {
+ acl = jacList;
break;
}
}
@@ -839,8 +838,8 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
}
if (!privilegesSet.isEmpty()) {
- if (acl instanceof PrincipalAccessControlList) {
- ((PrincipalAccessControlList)acl).addEntry(resourcePath, privilegesSet.toArray(new Privilege[privilegesSet.size()]), restrictions, mvRestrictions);
+ if (acl instanceof PrincipalAccessControlList pacList) {
+ pacList.addEntry(resourcePath, privilegesSet.toArray(new Privilege[privilegesSet.size()]), restrictions, mvRestrictions);
} else {
acl.addEntry(principal, privilegesSet.toArray(new Privilege[privilegesSet.size()]), isAllow, restrictions, mvRestrictions);
}
@@ -873,9 +872,7 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
if (order == null || order.length() == 0) {
return; //nothing to do
}
- if (acl instanceof JackrabbitAccessControlList) {
- JackrabbitAccessControlList jacl = (JackrabbitAccessControlList)acl;
-
+ if (acl instanceof JackrabbitAccessControlList jacl) {
AccessControlEntry[] accessControlEntries = jacl.getAccessControlEntries();
if (accessControlEntries.length <= 1) {
return; //only one ACE, so nothing to reorder.
@@ -1077,12 +1074,10 @@ public class ModifyAceServlet extends AbstractAccessPostServlet implements Modif
// process the new privileges
for (Entry<PrivilegeValues, Set<Privilege>> entry : privilegeValueToPrivilegesMap.entrySet()) {
switch (entry.getKey()) {
- case GRANTED:
- case ALLOW:
+ case GRANTED, ALLOW:
PrivilegesHelper.allow(privilegeToLocalPrivilegesMap, localRestrictions, entry.getValue());
break;
- case DENIED:
- case DENY:
+ case DENIED, DENY:
PrivilegesHelper.deny(privilegeToLocalPrivilegesMap, localRestrictions, entry.getValue());
break;
case NONE:
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/ModifyPrincipalAceServlet.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/ModifyPrincipalAceServlet.java
index 4963693..e0d4adf 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/ModifyPrincipalAceServlet.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/ModifyPrincipalAceServlet.java
@@ -29,7 +29,6 @@ import javax.jcr.security.AccessControlEntry;
import javax.jcr.security.AccessControlManager;
import javax.jcr.security.AccessControlPolicy;
import javax.jcr.security.Privilege;
-import javax.servlet.Servlet;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
@@ -40,7 +39,7 @@ import org.apache.sling.jcr.jackrabbit.accessmanager.LocalPrivilege;
import org.apache.sling.jcr.jackrabbit.accessmanager.LocalRestriction;
import org.apache.sling.jcr.jackrabbit.accessmanager.ModifyPrincipalAce;
import org.apache.sling.jcr.jackrabbit.accessmanager.impl.PrincipalAceHelper;
-import org.apache.sling.servlets.post.PostResponseCreator;
+import org.apache.sling.servlets.post.JakartaPostResponseCreator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.osgi.service.component.annotations.Component;
@@ -48,6 +47,8 @@ import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicyOption;
+import jakarta.servlet.Servlet;
+
/**
* <p>
* Sling Post Servlet implementation for modifying the principalbased ACE for a principal on a JCR
@@ -119,7 +120,7 @@ reference = {
bind = "bindPostResponseCreator",
cardinality = ReferenceCardinality.MULTIPLE,
policyOption = ReferencePolicyOption.GREEDY,
- service = PostResponseCreator.class)
+ service = JakartaPostResponseCreator.class)
})
@SuppressWarnings("java:S110")
public class ModifyPrincipalAceServlet extends ModifyAceServlet implements ModifyPrincipalAce {
@@ -162,20 +163,19 @@ public class ModifyPrincipalAceServlet extends ModifyAceServlet implements Modif
protected JackrabbitAccessControlList getAcl(@NotNull AccessControlManager acm, String resourcePath, Principal principal)
throws RepositoryException {
JackrabbitAccessControlList acl = null;
- if (acm instanceof JackrabbitAccessControlManager) {
- JackrabbitAccessControlManager jacm = (JackrabbitAccessControlManager)acm;
+ if (acm instanceof JackrabbitAccessControlManager jacm) {
AccessControlPolicy[] policies = jacm.getPolicies(principal);
for (AccessControlPolicy policy : policies) {
- if (policy instanceof PrincipalAccessControlList) {
- acl = (PrincipalAccessControlList) policy;
+ if (policy instanceof PrincipalAccessControlList pacList) {
+ acl = pacList;
break;
}
}
if (acl == null) {
AccessControlPolicy[] applicablePolicies = jacm.getApplicablePolicies(principal);
for (AccessControlPolicy policy : applicablePolicies) {
- if (policy instanceof PrincipalAccessControlList) {
- acl = (PrincipalAccessControlList) policy;
+ if (policy instanceof PrincipalAccessControlList pacList) {
+ acl = pacList;
break;
}
}
diff --git a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java
index 53e5ed7..c459617 100644
--- a/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java
+++ b/src/main/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/package-info.java
@@ -17,7 +17,7 @@
* under the License.
*/
-@org.osgi.annotation.versioning.Version("4.0.0")
+@org.osgi.annotation.versioning.Version("5.0.0")
package org.apache.sling.jcr.jackrabbit.accessmanager.post;
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/LocalPrivilegeTest.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/LocalPrivilegeTest.java
similarity index 98%
rename from src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/LocalPrivilegeTest.java
rename to src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/LocalPrivilegeTest.java
index d05ac22..9d0457c 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/LocalPrivilegeTest.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/LocalPrivilegeTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sling.jcr.jackrabbit.accessmanager.post;
+package org.apache.sling.jcr.jackrabbit.accessmanager;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -42,8 +42,6 @@ import org.apache.jackrabbit.oak.spi.security.authorization.restriction.Restrict
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
import org.apache.jackrabbit.value.ValueFactoryImpl;
-import org.apache.sling.jcr.jackrabbit.accessmanager.LocalPrivilege;
-import org.apache.sling.jcr.jackrabbit.accessmanager.LocalRestriction;
import org.apache.sling.testing.mock.sling.ResourceResolverType;
import org.apache.sling.testing.mock.sling.junit.SlingContext;
import org.jetbrains.annotations.NotNull;
@@ -73,7 +71,7 @@ public class LocalPrivilegeTest {
return acm.privilegeFromName(privilegeName);
}
- private RestrictionDefinition rd(String restrictionName) throws Exception {
+ private RestrictionDefinition rd(String restrictionName) {
if (srMap == null) {
//make a temp map for quick lookup below
@NotNull
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/LocalRestrictionTest.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/LocalRestrictionTest.java
similarity index 96%
rename from src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/LocalRestrictionTest.java
rename to src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/LocalRestrictionTest.java
index 9c9353b..e1f3f1b 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/LocalRestrictionTest.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/LocalRestrictionTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sling.jcr.jackrabbit.accessmanager.post;
+package org.apache.sling.jcr.jackrabbit.accessmanager;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
@@ -29,7 +29,6 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Set;
-import javax.jcr.RepositoryException;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
@@ -39,7 +38,6 @@ import org.apache.jackrabbit.oak.spi.security.authorization.restriction.Composit
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionDefinition;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
import org.apache.jackrabbit.value.ValueFactoryImpl;
-import org.apache.sling.jcr.jackrabbit.accessmanager.LocalRestriction;
import org.apache.sling.testing.mock.sling.ResourceResolverType;
import org.apache.sling.testing.mock.sling.junit.SlingContext;
import org.jetbrains.annotations.NotNull;
@@ -59,11 +57,11 @@ public class LocalRestrictionTest {
private Map<String, RestrictionDefinition> srMap;
@Before
- public void setup() throws RepositoryException {
+ public void setup() {
context.registerService(new RestrictionProviderImpl());
}
- private RestrictionDefinition rd(String restrictionName) throws Exception {
+ private RestrictionDefinition rd(String restrictionName) {
if (srMap == null) {
//make a temp map for quick lookup below
@NotNull
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/ModifyAceTest.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/ModifyAceTest.java
index c224b47..20c9fe3 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/ModifyAceTest.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/ModifyAceTest.java
@@ -16,14 +16,28 @@
*/
package org.apache.sling.jcr.jackrabbit.accessmanager;
-import java.util.Collection;
+import static org.junit.Assert.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyMap;
+import static org.mockito.ArgumentMatchers.anySet;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.times;
+
+import java.util.List;
import java.util.Map;
+import java.util.Set;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.Value;
+import javax.jcr.ValueFactory;
+import javax.jcr.security.Privilege;
+import org.apache.jackrabbit.value.ValueFactoryImpl;
import org.junit.Test;
+import org.mockito.Mockito;
/**
* Tests to verify the ModifyAce default methods
@@ -36,22 +50,35 @@ public class ModifyAceTest {
@Test(expected = UnsupportedRepositoryOperationException.class)
public void testModify1() throws RepositoryException {
- modifyAce.modifyAce(null, null, null, (Map<String, String>)null, null, false);
+ modifyAce.modifyAce(Mockito.mock(Session.class), "resourcePath", "principalId",
+ Map.of("privilege1", "granted"), "order", false);
}
- @Test(expected = UnsupportedRepositoryOperationException.class)
+ @Test
public void testModify2() throws RepositoryException{
- modifyAce.modifyAce(null, null, null, null, null, null, null, null);
+ modifyAce = Mockito.spy(modifyAce);
+ assertThrows(UnsupportedRepositoryOperationException.class, () -> {
+ ValueFactory vf = ValueFactoryImpl.getInstance();
+ modifyAce.modifyAce(Mockito.mock(Session.class), "resourcePath", "principalId",
+ Map.of("privilege1", "granted"), "order", Map.of("restriction1", vf.createValue("value1")),
+ Map.of("mvRestriction", new Value[] {vf.createValue("value2")}), Set.of("removeRestrition1"));
+ });
+ Mockito.verify(modifyAce, times(1)).modifyAce(any(Session.class), anyString(),
+ anyString(), anyMap(), anyString(), anyMap(), anyMap(), anySet(), anyBoolean());
}
@Test(expected = UnsupportedRepositoryOperationException.class)
public void testModify3() throws RepositoryException {
- modifyAce.modifyAce(null, null, null, null, null, null, null, null, false);
+ ValueFactory vf = ValueFactoryImpl.getInstance();
+ modifyAce.modifyAce(Mockito.mock(Session.class), "resourcePath", "principalId",
+ Map.of("privilege1", "granted"), "order", Map.of("restriction1", vf.createValue("value1")),
+ Map.of("mvRestriction", new Value[] {vf.createValue("value2")}), Set.of("removeRestrition1"), false);
}
@Test(expected = UnsupportedRepositoryOperationException.class)
public void testModify4() throws RepositoryException {
- modifyAce.modifyAce(null, null, null, (Collection<LocalPrivilege>)null, null, false);
+ modifyAce.modifyAce(Mockito.mock(Session.class), "resourcePath", "principalId",
+ List.of(new LocalPrivilege(Mockito.mock(Privilege.class))), "order", false);
}
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/PrivilegesInfoAccessRightsTest.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/PrivilegesInfoAccessRightsTest.java
new file mode 100644
index 0000000..35784fd
--- /dev/null
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/PrivilegesInfoAccessRightsTest.java
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.jcr.jackrabbit.accessmanager;
+
+import static org.junit.Assert.*;
+
+import java.util.Locale;
+
+import javax.jcr.security.Privilege;
+
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
+import org.apache.sling.jcr.jackrabbit.accessmanager.PrivilegesInfo.AccessRights;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+/**
+ *
+ */
+public class PrivilegesInfoAccessRightsTest {
+
+ private AccessRights accessRights = new AccessRights();
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.PrivilegesInfo.AccessRights#getGranted()}.
+ */
+ @Test
+ public void testGetGranted() {
+ assertNotNull(accessRights.getGranted());
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.PrivilegesInfo.AccessRights#getDenied()}.
+ */
+ @Test
+ public void testGetDenied() {
+ assertNotNull(accessRights.getDenied());
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.PrivilegesInfo.AccessRights#getPrivilegeSetDisplayName(java.util.Locale)}.
+ */
+ @Test
+ public void testGetPrivilegeSetDisplayNameForNone() {
+ assertEquals("None", accessRights.getPrivilegeSetDisplayName(Locale.getDefault()));
+ }
+ @Test
+ public void testGetPrivilegeSetDisplayNameForCustom() {
+ accessRights.getDenied().add(mockPrivilege(Privilege.JCR_LOCK_MANAGEMENT));
+ assertEquals("Custom", accessRights.getPrivilegeSetDisplayName(Locale.getDefault()));
+ }
+ @Test
+ public void testGetPrivilegeSetDisplayNameForAll() {
+ accessRights.getGranted().add(mockPrivilege(PrivilegeConstants.JCR_ALL));
+ assertEquals("Full Control", accessRights.getPrivilegeSetDisplayName(Locale.getDefault()));
+ }
+ @Test
+ public void testGetPrivilegeSetDisplayNameForReadOnly() {
+ accessRights.getGranted().add(mockPrivilege(PrivilegeConstants.JCR_READ));
+ assertEquals("Read Only", accessRights.getPrivilegeSetDisplayName(Locale.getDefault()));
+ }
+ @Test
+ public void testGetPrivilegeSetDisplayNameForReadWrite() {
+ accessRights.getGranted().add(mockPrivilege(PrivilegeConstants.JCR_READ));
+ accessRights.getGranted().add(mockPrivilege(PrivilegeConstants.JCR_WRITE));
+ assertEquals("Read/Write", accessRights.getPrivilegeSetDisplayName(Locale.getDefault()));
+ }
+ @Test
+ public void testGetPrivilegeSetDisplayNameForOther1() {
+ accessRights.getGranted().add(mockPrivilege(PrivilegeConstants.JCR_READ));
+ accessRights.getGranted().add(mockPrivilege(PrivilegeConstants.JCR_LOCK_MANAGEMENT));
+ assertEquals("Custom", accessRights.getPrivilegeSetDisplayName(Locale.getDefault()));
+ }
+ @Test
+ public void testGetPrivilegeSetDisplayNameForOther2() {
+ accessRights.getGranted().add(mockPrivilege(PrivilegeConstants.JCR_WRITE));
+ accessRights.getGranted().add(mockPrivilege(PrivilegeConstants.JCR_LOCK_MANAGEMENT));
+ assertEquals("Custom", accessRights.getPrivilegeSetDisplayName(Locale.getDefault()));
+ }
+ @Test
+ public void testGetPrivilegeSetDisplayNameForOther3() {
+ accessRights.getGranted().add(mockPrivilege(PrivilegeConstants.JCR_READ));
+ accessRights.getGranted().add(mockPrivilege(PrivilegeConstants.JCR_WRITE));
+ accessRights.getGranted().add(mockPrivilege(PrivilegeConstants.JCR_LOCK_MANAGEMENT));
+ assertEquals("Custom", accessRights.getPrivilegeSetDisplayName(Locale.getDefault()));
+ }
+ @Test
+ public void testGetPrivilegeSetDisplayNameForNonRootLocale() {
+ assertEquals("None", accessRights.getPrivilegeSetDisplayName(Locale.ROOT));
+ // call again to use the cached resourceBundle field
+ assertEquals("None", accessRights.getPrivilegeSetDisplayName(Locale.ROOT));
+ // try again with a different locale to recalculate the resourceBundle field
+ assertEquals("None", accessRights.getPrivilegeSetDisplayName(Locale.ENGLISH));
+ }
+
+ private Privilege mockPrivilege(String name) {
+ Privilege privilege = Mockito.mock(Privilege.class);
+ Mockito.when(privilege.getName()).thenReturn(name);
+ return privilege;
+ }
+}
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/AccessManagerClientTestSupport.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/AccessManagerClientTestSupport.java
index 2aab271..b630c45 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/AccessManagerClientTestSupport.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/AccessManagerClientTestSupport.java
@@ -20,8 +20,6 @@ package org.apache.sling.jcr.jackrabbit.accessmanager.it;
import static org.apache.sling.testing.paxexam.SlingOptions.slingBundleresource;
import static org.apache.sling.testing.paxexam.SlingOptions.slingCommonsCompiler;
-import static org.apache.sling.testing.paxexam.SlingOptions.slingJcrJackrabbitAccessmanager;
-import static org.apache.sling.testing.paxexam.SlingOptions.slingJcrJackrabbitUsermanager;
import static org.apache.sling.testing.paxexam.SlingOptions.slingScriptingJavascript;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -39,7 +37,6 @@ import java.net.URISyntaxException;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.List;
@@ -47,7 +44,10 @@ import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
-import javax.servlet.http.HttpServletResponse;
+import javax.jcr.LoginException;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
import org.apache.http.Header;
import org.apache.http.HttpHost;
@@ -74,9 +74,14 @@ import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
-import org.apache.sling.api.resource.LoginException;
+import org.apache.jackrabbit.api.JackrabbitSession;
+import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.Group;
+import org.apache.jackrabbit.api.security.user.User;
+import org.apache.jackrabbit.api.security.user.UserManager;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
+import org.apache.sling.jcr.api.SlingRepository;
import org.awaitility.Awaitility;
import org.junit.After;
import org.junit.Before;
@@ -89,6 +94,7 @@ import jakarta.json.JsonException;
import jakarta.json.JsonObject;
import jakarta.json.JsonReader;
import jakarta.json.JsonValue;
+import jakarta.servlet.http.HttpServletResponse;
/**
* base class for tests doing http requests to verify calls to the accessmanager
@@ -129,6 +135,11 @@ public abstract class AccessManagerClientTestSupport extends AccessManagerTestSu
protected String testGroupId = null;
protected String testFolderUrl = null;
+ @Inject
+ protected SlingRepository repository;
+
+ protected Session adminSession;
+
@Override
protected Option[] additionalOptions() throws IOException {
// optionally create a tinybundle that contains a test script
@@ -136,9 +147,6 @@ public abstract class AccessManagerClientTestSupport extends AccessManagerTestSu
return new Option[]{
slingBundleresource(),
- // for usermanager support
- slingJcrJackrabbitAccessmanager(),
- slingJcrJackrabbitUsermanager(),
// add javascript support for the test script
slingCommonsCompiler(),
when(bundle != null).useOptions(slingScriptingJavascript()),
@@ -195,9 +203,12 @@ public abstract class AccessManagerClientTestSupport extends AccessManagerTestSu
.disableRedirectHandling()
.build();
- // SLING-12081 - wait for the "users" resource to be available to try to avoid flaky
- // failures while creating test users
- Awaitility.await("users resource available")
+ adminSession = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
+ assertNotNull("Expected adminSession to not be null", adminSession);
+
+ // SLING-12081 - wait for the /content resource to be available to try to avoid flaky
+ // failures
+ Awaitility.await("content resource available")
.atMost(10000, TimeUnit.MILLISECONDS)
.pollInterval(1000, TimeUnit.MILLISECONDS)
.ignoreException(LoginException.class)
@@ -206,13 +217,15 @@ public abstract class AccessManagerClientTestSupport extends AccessManagerTestSu
authInfo.put(ResourceResolverFactory.USER, "admin");
authInfo.put(ResourceResolverFactory.PASSWORD, "admin".toCharArray());
try (ResourceResolver resourceResolver = resourceResolverFactory.getResourceResolver(authInfo)) {
- return resourceResolver.getResource("/system/userManager/user") != null;
+ return resourceResolver.getResource("/content") != null;
}
});
}
@After
public void after() throws Exception {
+ adminSession.refresh(false);
+
Credentials creds = new UsernamePasswordCredentials("admin", "admin");
if (testFolderUrl != null) {
@@ -223,18 +236,15 @@ public abstract class AccessManagerClientTestSupport extends AccessManagerTestSu
}
if (testGroupId != null) {
//remove the test user if it exists.
- String postUrl = String.format("%s/system/userManager/group/%s.delete.html", baseServerUri, testGroupId);
- assertAuthenticatedPostStatus(creds, postUrl, HttpServletResponse.SC_OK, Collections.emptyList(), null);
+ maybeRemoveAuthorizable(testGroupId);
}
if (testUserId != null) {
//remove the test user if it exists.
- String postUrl = String.format("%s/system/userManager/user/%s.delete.html", baseServerUri, testUserId);
- assertAuthenticatedPostStatus(creds, postUrl, HttpServletResponse.SC_OK, Collections.emptyList(), null);
+ maybeRemoveAuthorizable(testUserId);
}
if (testUserId2 != null) {
//remove the test user if it exists.
- String postUrl = String.format("%s/system/userManager/user/%s.delete.html", baseServerUri, testUserId2);
- assertAuthenticatedPostStatus(creds, postUrl, HttpServletResponse.SC_OK, Collections.emptyList(), null);
+ maybeRemoveAuthorizable(testUserId2);
}
// close/cleanup the test user http client
@@ -246,6 +256,11 @@ public abstract class AccessManagerClientTestSupport extends AccessManagerTestSu
// clear out other state
httpContext = null;
baseServerUri = null;
+
+ if (adminSession.hasPendingChanges()) {
+ adminSession.save();
+ }
+ adminSession.logout();
}
/**
@@ -427,37 +442,36 @@ public abstract class AccessManagerClientTestSupport extends AccessManagerTestSu
});
}
- protected String createTestUser() throws IOException {
- String postUrl = String.format("%s/system/userManager/user.create.html", baseServerUri);
-
+ protected void maybeRemoveAuthorizable(String id) throws RepositoryException {
+ UserManager userManager = ((JackrabbitSession)adminSession).getUserManager();
+ Authorizable authorizable = userManager.getAuthorizable(id);
+ if (authorizable != null) {
+ authorizable.remove();
+ adminSession.save();
+ }
+ }
+ protected String createTestUser() throws RepositoryException {
+ UserManager userManager = ((JackrabbitSession)adminSession).getUserManager();
String userId = "testUser" + getNextInt();
- List<NameValuePair> postParams = new ArrayList<>();
- postParams.add(new BasicNameValuePair(":name", userId));
- postParams.add(new BasicNameValuePair("pwd", "testPwd"));
- postParams.add(new BasicNameValuePair("pwdConfirm", "testPwd"));
- Credentials creds = new UsernamePasswordCredentials("admin", "admin");
- final String msg = "Unexpected status while attempting to create test user at " + postUrl;
- assertAuthenticatedPostStatus(creds, postUrl, HttpServletResponse.SC_OK, postParams, msg);
-
- final String sessionInfoUrl = String.format("%s/system/sling/info.sessionInfo.json", baseServerUri);
- assertAuthenticatedHttpStatus(creds, sessionInfoUrl, HttpServletResponse.SC_OK,
- "session info failed for user " + userId);
-
- return userId;
+ User user = userManager.createUser(userId, "testPwd");
+ adminSession.save();
+ return user.getID();
}
- protected String createTestGroup() throws IOException {
- String postUrl = String.format("%s/system/userManager/group.create.html", baseServerUri);
-
+ protected String createTestGroup() throws RepositoryException {
+ UserManager userManager = ((JackrabbitSession)adminSession).getUserManager();
String groupId = "testGroup" + getNextInt();
- List<NameValuePair> postParams = new ArrayList<>();
- postParams.add(new BasicNameValuePair(":name", groupId));
-
- Credentials creds = new UsernamePasswordCredentials("admin", "admin");
- final String msg = "Unexpected status while attempting to create test group at " + postUrl;
- assertAuthenticatedPostStatus(creds, postUrl, HttpServletResponse.SC_OK, postParams, msg);
+ Group group = userManager.createGroup(groupId);
+ adminSession.save();
+ return group.getID();
+ }
- return groupId;
+ protected void addUserToGroup(String userId, String groupId) throws RepositoryException {
+ UserManager userManager = ((JackrabbitSession)adminSession).getUserManager();
+ Group group = userManager.getAuthorizable(groupId, Group.class);
+ User user = userManager.getAuthorizable(userId, User.class);
+ group.addMember(user);
+ adminSession.save();
}
protected String createTestFolder() throws IOException {
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/AccessManagerTestSupport.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/AccessManagerTestSupport.java
index 42099b8..48deebd 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/AccessManagerTestSupport.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/AccessManagerTestSupport.java
@@ -18,19 +18,20 @@ package org.apache.sling.jcr.jackrabbit.accessmanager.it;
import static org.apache.felix.hc.api.FormattingResultLog.msHumanReadable;
import static org.apache.sling.testing.paxexam.SlingOptions.awaitility;
+import static org.apache.sling.testing.paxexam.SlingOptions.paxLoggingApi;
import static org.apache.sling.testing.paxexam.SlingOptions.slingQuickstartOakTar;
import static org.apache.sling.testing.paxexam.SlingOptions.versionResolver;
import static org.awaitility.Awaitility.await;
import static org.junit.Assert.assertNotNull;
import static org.ops4j.pax.exam.CoreOptions.composite;
-import static org.ops4j.pax.exam.CoreOptions.frameworkProperty;
import static org.ops4j.pax.exam.CoreOptions.junitBundles;
import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
import static org.ops4j.pax.exam.CoreOptions.options;
import static org.ops4j.pax.exam.CoreOptions.streamBundle;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
import static org.ops4j.pax.exam.CoreOptions.vmOption;
import static org.ops4j.pax.exam.CoreOptions.when;
-import static org.ops4j.pax.tinybundles.core.TinyBundles.withBnd;
+import static org.ops4j.pax.tinybundles.TinyBundles.bndBuilder;
import java.io.BufferedWriter;
import java.io.IOException;
@@ -57,8 +58,8 @@ import org.ops4j.pax.exam.Configuration;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.options.ModifiableCompositeOption;
import org.ops4j.pax.exam.options.extra.VMOption;
-import org.ops4j.pax.tinybundles.core.TinyBundle;
-import org.ops4j.pax.tinybundles.core.TinyBundles;
+import org.ops4j.pax.tinybundles.TinyBundle;
+import org.ops4j.pax.tinybundles.TinyBundles;
import org.osgi.framework.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -101,17 +102,18 @@ public abstract class AccessManagerTestSupport extends TestSupport {
vmOption = new VMOption(vmOpt);
}
- // newer version of sling.api and dependencies for SLING-10034
+ // SLING-12868 - newer version of sling.api and dependencies
// may remove at a later date if the superclass includes these versions or later
- versionResolver.setVersion("org.apache.sling", "org.apache.sling.api", "2.27.2");
- versionResolver.setVersion("org.apache.sling", "org.apache.sling.engine", "2.15.6");
- versionResolver.setVersion("org.apache.sling", "org.apache.sling.resourceresolver", "1.10.0");
- versionResolver.setVersion("org.apache.sling", "org.apache.sling.servlets.resolver", "2.9.14");
-
- // workaround for FELIX-6656 - use jetty 4.x version instead of the 5.x version
- // may remove at a later date after http.jetty-5.1.2 is released and used
- versionResolver.setVersion("org.apache.felix", "org.apache.felix.http.jetty", "4.2.0");
- versionResolver.setVersion("org.apache.felix", "org.apache.felix.http.servlet-api", "2.0.0");
+ versionResolver.setVersionFromProject("org.apache.sling", "org.apache.sling.api");
+ versionResolver.setVersion("org.apache.sling", "org.apache.sling.engine", "3.0.0");
+ versionResolver.setVersion("org.apache.felix", "org.apache.felix.http.servlet-api", "6.1.0");
+ versionResolver.setVersion("org.apache.sling", "org.apache.sling.resourceresolver", "2.0.0");
+ versionResolver.setVersion("org.apache.sling", "org.apache.sling.auth.core", "2.0.0");
+ versionResolver.setVersion("commons-fileupload", "commons-fileupload", "1.6.0");
+ versionResolver.setVersion("org.apache.sling", "org.apache.sling.scripting.spi", "2.0.0");
+ versionResolver.setVersion("org.apache.sling", "org.apache.sling.scripting.core", "3.0.0");
+ versionResolver.setVersion("org.apache.sling", "org.apache.sling.servlets.resolver", "3.0.0");
+ versionResolver.setVersionFromProject("org.apache.sling", "org.apache.sling.servlets.post");
return options(
composite(
@@ -119,15 +121,21 @@ public abstract class AccessManagerTestSupport extends TestSupport {
when(vmOption != null).useOptions(vmOption),
optionalRemoteDebug(),
slingQuickstart(),
+ paxLoggingApi(), // newer version to provide the 2.x version of slf4j
+ systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"),
testBundle("bundle.filename"),
+ // SLING-12868 - begin extra bundles for sling api 3.x
+ mavenBundle()
+ .groupId("org.apache.felix")
+ .artifactId("org.apache.felix.http.wrappers")
+ .version("6.1.0"),
+ mavenBundle()
+ .groupId("org.apache.sling")
+ .artifactId("org.apache.sling.commons.johnzon")
+ .version("2.0.0"),
+ // end extra bundles for sling api 3.x
junitBundles(),
awaitility()
- ).add(
- // jakarta impl of JSON apis
- frameworkProperty("org.apache.aries.spifly.auto.consumers").value("jakarta.json-api"),
- frameworkProperty("org.apache.aries.spifly.auto.providers").value("org.eclipse.parsson"),
- mavenBundle().groupId("jakarta.json").artifactId("jakarta.json-api").version("2.1.1"),
- mavenBundle().groupId("org.eclipse.parsson").artifactId("parsson").version("1.1.1")
).add(
additionalOptions()
).remove(
@@ -263,7 +271,7 @@ public abstract class AccessManagerTestSupport extends TestSupport {
try (final InputStream is = getClass().getResourceAsStream(resourcePath)) {
assertNotNull("Expecting resource to be found:" + resourcePath, is);
logger.info("Adding resource to bundle, path={}, resource={}", pathInBundle, resourcePath);
- bundle.add(pathInBundle, is);
+ bundle.addResource(pathInBundle, is);
}
}
@@ -285,15 +293,15 @@ public abstract class AccessManagerTestSupport extends TestSupport {
*/
protected Option buildBundleResourcesBundle(final String header, final Collection<String> content) throws IOException {
final TinyBundle bundle = TinyBundles.bundle();
- bundle.set(Constants.BUNDLE_SYMBOLICNAME, BUNDLE_SYMBOLICNAME);
- bundle.set(SLING_BUNDLE_RESOURCES_HEADER, header);
- bundle.set("Require-Capability", "osgi.extender;filter:=\"(&(osgi.extender=org.apache.sling.bundleresource)(version<=1.1.0)(!(version>=2.0.0)))\"");
+ bundle.setHeader(Constants.BUNDLE_SYMBOLICNAME, BUNDLE_SYMBOLICNAME);
+ bundle.setHeader(SLING_BUNDLE_RESOURCES_HEADER, header);
+ bundle.setHeader("Require-Capability", "osgi.extender;filter:=\"(&(osgi.extender=org.apache.sling.bundleresource)(version<=1.1.0)(!(version>=2.0.0)))\"");
for (final String entry : content) {
addContent(bundle, entry);
}
return streamBundle(
- bundle.build(withBnd())
+ bundle.build(bndBuilder())
).start();
}
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/AccessPrivilegesInfoIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/AccessPrivilegesInfoIT.java
index 9b0e8f9..0be0bc8 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/AccessPrivilegesInfoIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/AccessPrivilegesInfoIT.java
@@ -27,10 +27,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import jakarta.json.JsonArray;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import javax.servlet.http.HttpServletResponse;
+import javax.jcr.RepositoryException;
import org.apache.http.NameValuePair;
import org.apache.http.auth.Credentials;
@@ -44,6 +41,11 @@ import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.servlet.http.HttpServletResponse;
+
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
public class AccessPrivilegesInfoIT extends AccessManagerClientTestSupport {
@@ -59,7 +61,7 @@ public class AccessPrivilegesInfoIT extends AccessManagerClientTestSupport {
* testuser granted read / denied write
*/
@Test
- public void testDeniedWriteForUser() throws IOException, JsonException {
+ public void testDeniedWriteForUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -97,7 +99,7 @@ public class AccessPrivilegesInfoIT extends AccessManagerClientTestSupport {
* testuser granted read / granted write
*/
@Test
- public void testGrantedWriteForUser() throws IOException, JsonException {
+ public void testGrantedWriteForUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -153,7 +155,7 @@ public class AccessPrivilegesInfoIT extends AccessManagerClientTestSupport {
* group testuser granted read / denied write
*/
@Test
- public void testDeniedWriteForGroup() throws IOException, JsonException {
+ public void testDeniedWriteForGroup() throws IOException, JsonException, RepositoryException {
testGroupId = createTestGroup();
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -161,10 +163,7 @@ public class AccessPrivilegesInfoIT extends AccessManagerClientTestSupport {
Credentials adminCreds = new UsernamePasswordCredentials("admin", "admin");
//add testUserId to testGroup
- String groupPostUrl = String.format("%s/system/userManager/group/%s.update.html", baseServerUri, testGroupId);
- List<NameValuePair> groupPostParams = new ArrayList<>();
- groupPostParams.add(new BasicNameValuePair(":member", testUserId));
- assertAuthenticatedPostStatus(adminCreds, groupPostUrl, HttpServletResponse.SC_OK, groupPostParams, null);
+ addUserToGroup(testUserId, testGroupId);
//assign some privileges
String postUrl = testFolderUrl + ".modifyAce.html";
@@ -198,7 +197,7 @@ public class AccessPrivilegesInfoIT extends AccessManagerClientTestSupport {
* group testuser granted read / granted write
*/
@Test
- public void testGrantedWriteForGroup() throws IOException, JsonException {
+ public void testGrantedWriteForGroup() throws IOException, JsonException, RepositoryException {
testGroupId = createTestGroup();
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -206,10 +205,7 @@ public class AccessPrivilegesInfoIT extends AccessManagerClientTestSupport {
Credentials adminCreds = new UsernamePasswordCredentials("admin", "admin");
//add testUserId to testGroup
- String groupPostUrl = String.format("%s/system/userManager/group/%s.update.html", baseServerUri, testGroupId);
- List<NameValuePair> groupPostParams = new ArrayList<>();
- groupPostParams.add(new BasicNameValuePair(":member", testUserId));
- assertAuthenticatedPostStatus(adminCreds, groupPostUrl, HttpServletResponse.SC_OK, groupPostParams, null);
+ addUserToGroup(testUserId, testGroupId);
//assign some privileges
String postUrl = testFolderUrl + ".modifyAce.html";
@@ -263,7 +259,7 @@ public class AccessPrivilegesInfoIT extends AccessManagerClientTestSupport {
* Test the fix for SLING-1090
*/
@Test
- public void testSLING1090() throws IOException {
+ public void testSLING1090() throws IOException, RepositoryException {
testUserId = createTestUser();
//grant jcr: removeChildNodes to the root node
@@ -298,7 +294,7 @@ public class AccessPrivilegesInfoIT extends AccessManagerClientTestSupport {
* Test for SLING-7835, PrivilegesInfo#getDeclaredAccessRights returns incorrect information
*/
@Test
- public void testDeclaredAclForUser() throws IOException, JsonException {
+ public void testDeclaredAclForUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testUserId2 = createTestUser();
@@ -399,7 +395,7 @@ public class AccessPrivilegesInfoIT extends AccessManagerClientTestSupport {
* Test for SLING-7835, PrivilegesInfo#getEffectiveAccessRights returns incorrect information
*/
@Test
- public void testEffectiveAclForUser() throws IOException, JsonException {
+ public void testEffectiveAclForUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testUserId2 = createTestUser();
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/CustomPostResponseCreatorImpl.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/CustomPostResponseCreatorImpl.java
index 4af6407..25204af 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/CustomPostResponseCreatorImpl.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/CustomPostResponseCreatorImpl.java
@@ -18,21 +18,21 @@ package org.apache.sling.jcr.jackrabbit.accessmanager.it;
import java.io.IOException;
-import javax.servlet.http.HttpServletResponse;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
+import org.apache.sling.servlets.post.AbstractJakartaPostResponse;
+import org.apache.sling.servlets.post.JakartaPostResponse;
+import org.apache.sling.servlets.post.JakartaPostResponseCreator;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.servlets.post.AbstractPostResponse;
-import org.apache.sling.servlets.post.PostResponse;
-import org.apache.sling.servlets.post.PostResponseCreator;
+import jakarta.servlet.http.HttpServletResponse;
/**
* Sample implementation of the PostResponseCreator interface.
*/
-public class CustomPostResponseCreatorImpl implements PostResponseCreator {
+public class CustomPostResponseCreatorImpl implements JakartaPostResponseCreator {
- public PostResponse createPostResponse(SlingHttpServletRequest req) {
+ public JakartaPostResponse createPostResponse(SlingJakartaHttpServletRequest req) {
if ("custom".equals(req.getParameter(":responseType"))) {
- return new AbstractPostResponse() {
+ return new AbstractJakartaPostResponse() {
public void onChange(String type, String... arguments) {
// NO-OP
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetAceIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetAceIT.java
index 6a25abd..a7948e0 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetAceIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetAceIT.java
@@ -24,11 +24,7 @@ import java.io.IOException;
import java.util.List;
import java.util.stream.Stream;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonString;
-import jakarta.json.JsonValue;
-import javax.servlet.http.HttpServletResponse;
+import javax.jcr.RepositoryException;
import org.apache.http.NameValuePair;
import org.apache.http.auth.Credentials;
@@ -41,6 +37,12 @@ import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonString;
+import jakarta.json.JsonValue;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Tests for the 'ace' Sling Get Operation
*/
@@ -48,7 +50,7 @@ import org.ops4j.pax.exam.spi.reactors.PerClass;
@ExamReactorStrategy(PerClass.class)
public class GetAceIT extends AccessManagerClientTestSupport {
- protected void commonDeclaredAceForUser(String selector) throws IOException {
+ protected void commonDeclaredAceForUser(String selector) throws IOException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests",
"{ \"jcr:primaryType\": \"nt:unstructured\", \"child\" : { \"childPropOne\" : true } }");
@@ -82,7 +84,7 @@ public class GetAceIT extends AccessManagerClientTestSupport {
* ACE servlet returns correct information
*/
@Test
- public void testDeclaredAceForUser() throws IOException, JsonException {
+ public void testDeclaredAceForUser() throws IOException, JsonException, RepositoryException {
commonDeclaredAceForUser("ace");
}
@@ -90,7 +92,7 @@ public class GetAceIT extends AccessManagerClientTestSupport {
* ACE servlet returns correct information
*/
@Test
- public void testTidyDeclaredAceForUser() throws IOException, JsonException {
+ public void testTidyDeclaredAceForUser() throws IOException, JsonException, RepositoryException {
commonDeclaredAceForUser("tidy.ace");
}
@@ -98,7 +100,7 @@ public class GetAceIT extends AccessManagerClientTestSupport {
* ACE servlet returns 404 when no declared ACE
*/
@Test
- public void testNoDeclaredAceForUser() throws IOException, JsonException {
+ public void testNoDeclaredAceForUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests",
"{ \"jcr:primaryType\": \"nt:unstructured\", \"child\" : { \"childPropOne\" : true } }");
@@ -121,7 +123,7 @@ public class GetAceIT extends AccessManagerClientTestSupport {
* ACE servlet returns 404 when no read access rights permissions
*/
@Test
- public void testNoAccessToDeclaredAceForUser() throws IOException, JsonException {
+ public void testNoAccessToDeclaredAceForUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests",
"{ \"jcr:primaryType\": \"nt:unstructured\", \"child\" : { \"childPropOne\" : true } }");
@@ -144,7 +146,7 @@ public class GetAceIT extends AccessManagerClientTestSupport {
* ACE servlet returns restriction details for leaf of also allowed aggregate
*/
@Test
- public void testDeclaredAceWithLeafRestrictionForUser() throws IOException, JsonException {
+ public void testDeclaredAceWithLeafRestrictionForUser() throws IOException, JsonException, RepositoryException {
commonDeclaredAceWithLeafRestrictionForUser(1);
}
@@ -153,11 +155,11 @@ public class GetAceIT extends AccessManagerClientTestSupport {
* update to verify that the ordering doesn't get broken during update
*/
@Test
- public void testDeclaredAceWithLeafRestrictionForUserAfterSecondUpdate() throws IOException, JsonException {
+ public void testDeclaredAceWithLeafRestrictionForUserAfterSecondUpdate() throws IOException, JsonException, RepositoryException {
commonDeclaredAceWithLeafRestrictionForUser(2);
}
- protected void commonDeclaredAceWithLeafRestrictionForUser(int numberOfUpdateAceCalls) throws IOException {
+ protected void commonDeclaredAceWithLeafRestrictionForUser(int numberOfUpdateAceCalls) throws IOException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests",
"{ \"jcr:primaryType\": \"nt:unstructured\" }");
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetAceServiceIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetAceServiceIT.java
index 53f99c0..17863b7 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetAceServiceIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetAceServiceIT.java
@@ -27,16 +27,12 @@ import javax.inject.Inject;
import javax.jcr.Node;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
-import jakarta.json.JsonObject;
import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
import org.apache.sling.api.resource.ResourceNotFoundException;
-import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.jcr.jackrabbit.accessmanager.GetAce;
import org.apache.sling.jcr.jackrabbit.accessmanager.ModifyAce;
import org.junit.After;
@@ -47,6 +43,8 @@ import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
+import jakarta.json.JsonObject;
+
/**
* Tests for the 'modifyAce' inproc service
*/
@@ -60,29 +58,27 @@ public class GetAceServiceIT extends AccessManagerClientTestSupport {
@Inject
private GetAce getAce;
- @Inject
- protected SlingRepository repository;
-
- protected Session adminSession;
-
private Node testNode;
@Before
- public void setup() throws RepositoryException {
- adminSession = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
- assertNotNull("Expected adminSession to not be null", adminSession);
+ @Override
+ public void before() throws Exception {
+ super.before();
+
testNode = adminSession.getRootNode().addNode("testNode");
adminSession.save();
}
@After
- public void teardown() throws RepositoryException {
+ @Override
+ public void after() throws Exception {
adminSession.refresh(false);
testNode.remove();
if (adminSession.hasPendingChanges()) {
adminSession.save();
}
- adminSession.logout();
+
+ super.after();
}
protected JsonObject ace(String path, String principalId) throws RepositoryException {
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetAclIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetAclIT.java
index 3858ce7..d3cb600 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetAclIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetAclIT.java
@@ -23,9 +23,7 @@ import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.List;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import javax.servlet.http.HttpServletResponse;
+import javax.jcr.RepositoryException;
import org.apache.http.NameValuePair;
import org.apache.http.auth.Credentials;
@@ -37,6 +35,10 @@ import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Tests for the 'acl' and 'eacl' Sling Get Operation
*/
@@ -48,7 +50,7 @@ public class GetAclIT extends AccessManagerClientTestSupport {
* Test for SLING-2600, Effective ACL servlet returns incorrect information
*/
@Test
- public void testEffectiveAclForUser() throws IOException, JsonException {
+ public void testEffectiveAclForUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testUserId2 = createTestUser();
@@ -110,7 +112,7 @@ public class GetAclIT extends AccessManagerClientTestSupport {
* Test for SLING-2600, Effective ACL servlet returns incorrect information
*/
@Test
- public void testEffectiveAclMergeForUserReplacePrivilegeOnChild() throws IOException, JsonException {
+ public void testEffectiveAclMergeForUserReplacePrivilegeOnChild() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests",
@@ -153,7 +155,7 @@ public class GetAclIT extends AccessManagerClientTestSupport {
* Test for SLING-2600, Effective ACL servlet returns incorrect information
*/
@Test
- public void testEffectiveAclMergeForUserFewerPrivilegesGrantedOnChild() throws IOException, JsonException {
+ public void testEffectiveAclMergeForUserFewerPrivilegesGrantedOnChild() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests",
@@ -195,7 +197,7 @@ public class GetAclIT extends AccessManagerClientTestSupport {
* Test for SLING-2600, Effective ACL servlet returns incorrect information
*/
@Test
- public void testEffectiveAclMergeForUserMorePrivilegesGrantedOnChild() throws IOException, JsonException {
+ public void testEffectiveAclMergeForUserMorePrivilegesGrantedOnChild() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests",
@@ -237,7 +239,7 @@ public class GetAclIT extends AccessManagerClientTestSupport {
* Test for SLING-2600, Effective ACL servlet returns incorrect information
*/
@Test
- public void testEffectiveAclMergeForUserSubsetOfPrivilegesDeniedOnChild2() throws IOException, JsonException {
+ public void testEffectiveAclMergeForUserSubsetOfPrivilegesDeniedOnChild2() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests",
@@ -294,7 +296,7 @@ public class GetAclIT extends AccessManagerClientTestSupport {
* Test for SLING-2600, Effective ACL servlet returns incorrect information
*/
@Test
- public void testEffectiveAclMergeForUserSupersetOfPrivilegesDeniedOnChild() throws IOException, JsonException {
+ public void testEffectiveAclMergeForUserSupersetOfPrivilegesDeniedOnChild() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests",
@@ -335,7 +337,7 @@ public class GetAclIT extends AccessManagerClientTestSupport {
* Test for SLING-2600, Effective ACL servlet returns incorrect information
*/
@Test
- public void testEffectiveAclMergeForUserSupersetOfPrivilegesDeniedOnChild2() throws IOException, JsonException {
+ public void testEffectiveAclMergeForUserSupersetOfPrivilegesDeniedOnChild2() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests",
@@ -376,7 +378,7 @@ public class GetAclIT extends AccessManagerClientTestSupport {
* ACL servlet returns 404 when no read access rights permissions
*/
@Test
- public void testNoAccessToDeclaredAclForUser() throws IOException, JsonException {
+ public void testNoAccessToDeclaredAclForUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests",
"{ \"jcr:primaryType\": \"nt:unstructured\", \"child\" : { \"childPropOne\" : true } }");
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetEaceIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetEaceIT.java
index f6fa56c..cfcabe0 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetEaceIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetEaceIT.java
@@ -26,12 +26,7 @@ import java.net.URI;
import java.util.List;
import java.util.stream.Stream;
-import jakarta.json.JsonArray;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonString;
-import jakarta.json.JsonValue;
-import javax.servlet.http.HttpServletResponse;
+import javax.jcr.RepositoryException;
import org.apache.http.NameValuePair;
import org.apache.http.auth.Credentials;
@@ -44,6 +39,13 @@ import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonString;
+import jakarta.json.JsonValue;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Tests for the 'eace' Sling Get Operation
*/
@@ -51,7 +53,7 @@ import org.ops4j.pax.exam.spi.reactors.PerClass;
@ExamReactorStrategy(PerClass.class)
public class GetEaceIT extends AccessManagerClientTestSupport {
- protected void commonEffectiveAceForUser(String selector) throws IOException {
+ protected void commonEffectiveAceForUser(String selector) throws IOException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests1",
"{ \"jcr:primaryType\": \"nt:unstructured\", \"child\" : { \"childPropOne\" : true } }");
@@ -90,7 +92,7 @@ public class GetEaceIT extends AccessManagerClientTestSupport {
* Effective ACE servlet returns correct information
*/
@Test
- public void testEffectiveAceForUser() throws IOException, JsonException {
+ public void testEffectiveAceForUser() throws IOException, JsonException, RepositoryException {
commonEffectiveAceForUser("eace");
}
@@ -98,7 +100,7 @@ public class GetEaceIT extends AccessManagerClientTestSupport {
* Effective ACE servlet returns correct information
*/
@Test
- public void testTidyEffectiveAceForUser() throws IOException, JsonException {
+ public void testTidyEffectiveAceForUser() throws IOException, JsonException, RepositoryException {
commonEffectiveAceForUser("tidy.eace");
}
@@ -106,7 +108,7 @@ public class GetEaceIT extends AccessManagerClientTestSupport {
* Effective ACE servlet returns correct information
*/
@Test
- public void testNoEffectiveAceForUser() throws IOException, JsonException {
+ public void testNoEffectiveAceForUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testUserId2 = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests2",
@@ -129,7 +131,7 @@ public class GetEaceIT extends AccessManagerClientTestSupport {
* Effective ACE servlet returns 404 when no read access rights permissions
*/
@Test
- public void testNoAccessToEffectiveAceForUser() throws IOException, JsonException {
+ public void testNoAccessToEffectiveAceForUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests2",
"{ \"jcr:primaryType\": \"nt:unstructured\", \"child\" : { \"childPropOne\" : true } }");
@@ -152,7 +154,7 @@ public class GetEaceIT extends AccessManagerClientTestSupport {
* ACE servlet returns restriction details for leaf of also allowed aggregate
*/
@Test
- public void testEffectiveAceWithLeafRestrictionForUser() throws IOException, JsonException {
+ public void testEffectiveAceWithLeafRestrictionForUser() throws IOException, JsonException, RepositoryException {
commonEffectiveAceWithLeafRestrictionForUser(1);
}
@@ -161,11 +163,11 @@ public class GetEaceIT extends AccessManagerClientTestSupport {
* update to verify that the ordering doesn't get broken during update
*/
@Test
- public void testEffectiveAceWithLeafRestrictionForUserAfterSecondUpdate() throws IOException, JsonException {
+ public void testEffectiveAceWithLeafRestrictionForUserAfterSecondUpdate() throws IOException, JsonException, RepositoryException {
commonEffectiveAceWithLeafRestrictionForUser(2);
}
- protected void commonEffectiveAceWithLeafRestrictionForUser(int numberOfUpdateAceCalls) throws IOException {
+ protected void commonEffectiveAceWithLeafRestrictionForUser(int numberOfUpdateAceCalls) throws IOException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests2",
"{ \"jcr:primaryType\": \"nt:unstructured\", \"child\" : { \"childPropOne\" : true } }");
@@ -231,7 +233,7 @@ public class GetEaceIT extends AccessManagerClientTestSupport {
* declaredAt structure
*/
@Test
- public void testDeclaredAtArrayInEffectiveAceForUser() throws IOException {
+ public void testDeclaredAtArrayInEffectiveAceForUser() throws IOException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests1",
"{ \"jcr:primaryType\": \"nt:unstructured\", \"child\" : { \"childPropOne\" : true } }");
@@ -283,7 +285,7 @@ public class GetEaceIT extends AccessManagerClientTestSupport {
* Effective ACE servlet returns correct information
*/
@Test
- public void testEffectiveAceForUserWithMergedRestrictionValues() throws IOException, JsonException {
+ public void testEffectiveAceForUserWithMergedRestrictionValues() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests2",
"{ \"jcr:primaryType\": \"nt:unstructured\", \"child\" : { \"childPropOne\" : true, \"childPropTwo\" : \"two\" } }");
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetEaceServiceIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetEaceServiceIT.java
index 72f49a0..a44fefd 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetEaceServiceIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetEaceServiceIT.java
@@ -27,16 +27,12 @@ import javax.inject.Inject;
import javax.jcr.Node;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
-import jakarta.json.JsonObject;
import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
import org.apache.sling.api.resource.ResourceNotFoundException;
-import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.jcr.jackrabbit.accessmanager.GetEffectiveAce;
import org.apache.sling.jcr.jackrabbit.accessmanager.ModifyAce;
import org.junit.After;
@@ -47,6 +43,8 @@ import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
+import jakarta.json.JsonObject;
+
/**
* Tests for the 'modifyAce' inproc service
*/
@@ -60,29 +58,26 @@ public class GetEaceServiceIT extends AccessManagerClientTestSupport {
@Inject
private GetEffectiveAce getEffectiveAce;
- @Inject
- protected SlingRepository repository;
-
- protected Session adminSession;
-
private Node testNode;
@Before
- public void setup() throws RepositoryException {
- adminSession = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
- assertNotNull("Expected adminSession to not be null", adminSession);
+ @Override
+ public void before() throws Exception {
+ super.before();
testNode = adminSession.getRootNode().addNode("testNode");
adminSession.save();
}
@After
- public void teardown() throws RepositoryException {
+ @Override
+ public void after() throws Exception {
adminSession.refresh(false);
testNode.remove();
if (adminSession.hasPendingChanges()) {
adminSession.save();
}
- adminSession.logout();
+
+ super.after();
}
protected JsonObject ace(String path, String principalId) throws RepositoryException {
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetPaceIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetPaceIT.java
index b312ef7..dcaef66 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetPaceIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/GetPaceIT.java
@@ -25,12 +25,7 @@ import java.net.URI;
import java.util.List;
import java.util.stream.Stream;
-import jakarta.json.JsonArray;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonString;
-import jakarta.json.JsonValue;
-import javax.servlet.http.HttpServletResponse;
+import javax.jcr.RepositoryException;
import org.apache.http.NameValuePair;
import org.apache.http.auth.Credentials;
@@ -43,6 +38,13 @@ import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonString;
+import jakarta.json.JsonValue;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Tests for the 'pace' Sling Get Operation
*/
@@ -90,7 +92,7 @@ public class GetPaceIT extends PrincipalAceTestSupport {
* Privilege ACE servlet returns 404 when no read access rights permissions
*/
@Test
- public void testNoAccessToPrivilegeAceForUser() throws IOException, JsonException {
+ public void testNoAccessToPrivilegeAceForUser() throws IOException, JsonException, RepositoryException {
String testServiceUserId = "pacetestuser";
testFolderUrl = createTestFolder(null, "sling-tests1",
"{ \"jcr:primaryType\": \"nt:unstructured\", \"child\" : { \"childPropOne\" : true } }");
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/ModifyAceIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/ModifyAceIT.java
index ff03d2d..59d758b 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/ModifyAceIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/ModifyAceIT.java
@@ -31,21 +31,15 @@ import java.util.Map.Entry;
import java.util.Set;
import java.util.stream.Stream;
-import jakarta.json.JsonArray;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonString;
-import jakarta.json.JsonValue;
-import jakarta.json.JsonValue.ValueType;
-import javax.servlet.http.HttpServletResponse;
+import javax.jcr.RepositoryException;
import org.apache.http.NameValuePair;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
import org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
-import org.apache.sling.servlets.post.JSONResponse;
-import org.apache.sling.servlets.post.PostResponseCreator;
+import org.apache.sling.servlets.post.JakartaJSONResponse;
+import org.apache.sling.servlets.post.JakartaPostResponseCreator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -57,6 +51,14 @@ import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceRegistration;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonString;
+import jakarta.json.JsonValue;
+import jakarta.json.JsonValue.ValueType;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Tests for the 'modifyAce' Sling Post Operation
*/
@@ -64,7 +66,7 @@ import org.osgi.framework.ServiceRegistration;
@ExamReactorStrategy(PerClass.class)
public class ModifyAceIT extends AccessManagerClientTestSupport {
- private ServiceRegistration<PostResponseCreator> serviceReg;
+ private ServiceRegistration<JakartaPostResponseCreator> serviceReg;
private ServiceRegistration<RestrictionProvider> serviceReg2;
private VerifyAce verifyTrue = jsonValue -> assertEquals(ValueType.TRUE, jsonValue.getValueType());
@@ -73,7 +75,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
public void before() throws Exception {
Bundle bundle = FrameworkUtil.getBundle(getClass());
Dictionary<String, Object> props = new Hashtable<>(); // NOSONAR
- serviceReg = bundle.getBundleContext().registerService(PostResponseCreator.class,
+ serviceReg = bundle.getBundleContext().registerService(JakartaPostResponseCreator.class,
new CustomPostResponseCreatorImpl(), props);
serviceReg2 = bundle.getBundleContext().registerService(RestrictionProvider.class,
new CustomRestrictionProviderImpl(), props);
@@ -95,7 +97,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
}
@Test
- public void testModifyAceForUser() throws IOException, JsonException {
+ public void testModifyAceForUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -127,7 +129,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* Test for SLING-7831
*/
@Test
- public void testModifyAceCustomPostResponse() throws IOException, JsonException {
+ public void testModifyAceCustomPostResponse() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -144,7 +146,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
}
@Test
- public void testModifyAceForGroup() throws IOException, JsonException {
+ public void testModifyAceForGroup() throws IOException, JsonException, RepositoryException {
testGroupId = createTestGroup();
testFolderUrl = createTestFolder();
@@ -180,7 +182,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* request.
*/
@Test
- public void testMergeAceForUser() throws IOException, JsonException {
+ public void testMergeAceForUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -251,7 +253,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* request.
*/
@Test
- public void testMergeAceForUserSplitAggregatePrincipal() throws IOException, JsonException {
+ public void testMergeAceForUserSplitAggregatePrincipal() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -297,7 +299,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* request.
*/
@Test
- public void testMergeAceForUserCombineAggregatePrivilege() throws IOException, JsonException {
+ public void testMergeAceForUserCombineAggregatePrivilege() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -353,7 +355,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* a grant privilege
*/
@Test
- public void testMergeAceForUserDenyPrivilegeAfterGrantPrivilege() throws IOException, JsonException {
+ public void testMergeAceForUserDenyPrivilegeAfterGrantPrivilege() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -399,7 +401,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
assertPrivilege(privilegesObject2, true, PrivilegeValues.DENY, PrivilegeConstants.JCR_NODE_TYPE_MANAGEMENT);
}
- protected void commonAddAceOrderBy(String order) throws IOException {
+ protected void commonAddAceOrderBy(String order) throws IOException, RepositoryException {
createAceOrderTestFolderWithOneAce();
testGroupId = createTestGroup();
@@ -425,7 +427,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* the ACL
*/
@Test
- public void testAddAceOrderByEmpty() throws IOException, JsonException {
+ public void testAddAceOrderByEmpty() throws IOException, JsonException, RepositoryException {
commonAddAceOrderBy("");
}
@@ -434,7 +436,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* the ACL
*/
@Test
- public void testAddAceOrderByNull() throws IOException, JsonException {
+ public void testAddAceOrderByNull() throws IOException, JsonException, RepositoryException {
commonAddAceOrderBy(null);
}
@@ -443,7 +445,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* the ACL
*/
@Test
- public void testAddAceOrderByFirst() throws IOException, JsonException {
+ public void testAddAceOrderByFirst() throws IOException, JsonException, RepositoryException {
createAceOrderTestFolderWithOneAce();
testGroupId = createTestGroup();
@@ -469,7 +471,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* the ACL
*/
@Test
- public void testAddAceOrderByLast() throws IOException, JsonException {
+ public void testAddAceOrderByLast() throws IOException, JsonException, RepositoryException {
createAceOrderTestFolderWithOneAce();
testGroupId = createTestGroup();
@@ -496,7 +498,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* the ACL
*/
@Test
- public void testAddAceOrderByBefore() throws IOException, JsonException {
+ public void testAddAceOrderByBefore() throws IOException, JsonException, RepositoryException {
createAceOrderTestFolderWithOneAce();
testGroupId = createTestGroup();
@@ -522,7 +524,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* the ACL
*/
@Test
- public void testAddAceOrderByAfter() throws IOException, JsonException {
+ public void testAddAceOrderByAfter() throws IOException, JsonException, RepositoryException {
createAceOrderTestFolderWithOneAce();
testGroupId = createTestGroup();
@@ -548,7 +550,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* the ACL
*/
@Test
- public void testAddAceOrderByNumeric() throws IOException, JsonException {
+ public void testAddAceOrderByNumeric() throws IOException, JsonException, RepositoryException {
createAceOrderTestFolderWithOneAce();
testGroupId = createTestGroup();
@@ -598,7 +600,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* leaves the ACE in the same position in the ACL
*/
@Test
- public void testUpdateAcePreservePosition() throws IOException, JsonException {
+ public void testUpdateAcePreservePosition() throws IOException, JsonException, RepositoryException {
createAceOrderTestFolderWithOneAce();
testGroupId = createTestGroup();
@@ -626,7 +628,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
/**
* Helper to create a test folder with a single ACE pre-created
*/
- private void createAceOrderTestFolderWithOneAce() throws IOException, JsonException {
+ private void createAceOrderTestFolderWithOneAce() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -688,7 +690,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* Test for SLING-1677
*/
@Test
- public void testModifyAceResponseAsJSON() throws IOException, JsonException {
+ public void testModifyAceResponseAsJSON() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -711,7 +713,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* Test for SLING-3010
*/
@Test
- public void testMergeAceForUserGrantNestedAggregatePrivilegeAfterDenySuperAggregatePrivilege() throws IOException, JsonException {
+ public void testMergeAceForUserGrantNestedAggregatePrivilegeAfterDenySuperAggregatePrivilege() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -756,7 +758,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* Test for SLING-3010
*/
@Test
- public void testMergeAceForUserGrantAggregatePrivilegePartsAfterDenyAggregatePrivilege() throws IOException, JsonException {
+ public void testMergeAceForUserGrantAggregatePrivilegePartsAfterDenyAggregatePrivilege() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -801,7 +803,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* the ACL
*/
@Test
- public void testAddAceWithRestriction() throws IOException, JsonException {
+ public void testAddAceWithRestriction() throws IOException, JsonException, RepositoryException {
createAceOrderTestFolderWithOneAce();
testGroupId = createTestGroup();
@@ -871,7 +873,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* the ACL
*/
@Test
- public void testUpdateAceToMergeNewRestriction() throws IOException, JsonException {
+ public void testUpdateAceToMergeNewRestriction() throws IOException, JsonException, RepositoryException {
createAceOrderTestFolderWithOneAce();
testGroupId = createTestGroup();
@@ -958,7 +960,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-8117 - Test to verify removing a restriction from an ACE
*/
@Test
- public void testUpdateAceToRemoveRestriction() throws IOException, JsonException {
+ public void testUpdateAceToRemoveRestriction() throws IOException, JsonException, RepositoryException {
createAceOrderTestFolderWithOneAce();
testGroupId = createTestGroup();
@@ -1040,7 +1042,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* if a new value with the same name has also been supplied
*/
@Test
- public void testUpdateAceToRemoveRestrictionWithConflict() throws IOException, JsonException {
+ public void testUpdateAceToRemoveRestrictionWithConflict() throws IOException, JsonException, RepositoryException {
createAceOrderTestFolderWithOneAce();
testGroupId = createTestGroup();
@@ -1128,7 +1130,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
// update the ACE
List<NameValuePair> postParams = new AcePostParamsBuilder(invalidUserId)
- .with(":http-equiv-accept", JSONResponse.RESPONSE_CONTENT_TYPE)
+ .with(":http-equiv-accept", JakartaJSONResponse.RESPONSE_CONTENT_TYPE)
.withPrivilege(PrivilegeConstants.JCR_READ, PrivilegeValues.ALLOW)
.withPrivilege(PrivilegeConstants.JCR_WRITE, PrivilegeValues.DENY)
.withPrivilege(PrivilegeConstants.JCR_MODIFY_ACCESS_CONTROL, PrivilegeValues.BOGUS)//invalid value should be ignored.
@@ -1145,14 +1147,14 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* returns the list of principals that were changed
*/
@Test
- public void testModifyAceChangesInResponse() throws IOException, JsonException {
+ public void testModifyAceChangesInResponse() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
// update the ACE
List<NameValuePair> postParams = new AcePostParamsBuilder(testUserId)
- .with(":http-equiv-accept", JSONResponse.RESPONSE_CONTENT_TYPE)
+ .with(":http-equiv-accept", JakartaJSONResponse.RESPONSE_CONTENT_TYPE)
.withPrivilege(PrivilegeConstants.JCR_READ, PrivilegeValues.ALLOW)
.withPrivilege(PrivilegeConstants.JCR_WRITE, PrivilegeValues.DENY)
.withPrivilege(PrivilegeConstants.JCR_MODIFY_ACCESS_CONTROL, PrivilegeValues.BOGUS)//invalid value should be ignored.
@@ -1169,7 +1171,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
assertEquals(testUserId, change.getString("argument"));
}
- private void testModifyAceRedirect(String redirectTo, int expectedStatus) throws IOException {
+ private void testModifyAceRedirect(String redirectTo, int expectedStatus) throws IOException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -1183,17 +1185,17 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
}
@Test
- public void testModifyAceValidRedirect() throws IOException, JsonException {
+ public void testModifyAceValidRedirect() throws IOException, JsonException, RepositoryException {
testModifyAceRedirect("/*.html", HttpServletResponse.SC_MOVED_TEMPORARILY);
}
@Test
- public void testModifyAceInvalidRedirectWithAuthority() throws IOException, JsonException {
+ public void testModifyAceInvalidRedirectWithAuthority() throws IOException, JsonException, RepositoryException {
testModifyAceRedirect("https://sling.apache.org", SC_UNPROCESSABLE_ENTITY);
}
@Test
- public void testModifyAceInvalidRedirectWithInvalidURI() throws IOException, JsonException {
+ public void testModifyAceInvalidRedirectWithInvalidURI() throws IOException, JsonException, RepositoryException {
testModifyAceRedirect("https://", SC_UNPROCESSABLE_ENTITY);
}
@@ -1202,7 +1204,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceAddAllowPrivilegeRestriction() throws IOException, JsonException {
+ public void testModifyAceAddAllowPrivilegeRestriction() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -1251,7 +1253,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceAddDenyPrivilegeRestriction() throws IOException, JsonException {
+ public void testModifyAceAddDenyPrivilegeRestriction() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -1300,7 +1302,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceAddAllowAndDenyPrivilegeRestriction() throws IOException, JsonException {
+ public void testModifyAceAddAllowAndDenyPrivilegeRestriction() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -1349,7 +1351,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify modifying an ACE to remove a privilege
*/
@Test
- public void testModifyAceDeleteWriteAllowPrivilege() throws IOException, JsonException {
+ public void testModifyAceDeleteWriteAllowPrivilege() throws IOException, JsonException, RepositoryException {
commonModifyAceDeleteWritePrivilege();
// remove just the allow privilege and leave the deny privilege active
@@ -1379,7 +1381,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify modifying an ACE to remove a privilege
*/
@Test
- public void testModifyAceDeleteWritePrivilegeWithInvalidValue() throws IOException, JsonException {
+ public void testModifyAceDeleteWritePrivilegeWithInvalidValue() throws IOException, JsonException, RepositoryException {
commonModifyAceDeleteWritePrivilege();
// remove with an invalid value
@@ -1418,7 +1420,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify modifying an ACE to remove a privilege
*/
@Test
- public void testModifyAceDeleteWriteDenyPrivilege() throws IOException, JsonException {
+ public void testModifyAceDeleteWriteDenyPrivilege() throws IOException, JsonException, RepositoryException {
commonModifyAceDeleteWritePrivilege();
// remove just the deny privilege and leave the allow privilege active
@@ -1448,7 +1450,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify modifying an ACE to remove a privilege
*/
@Test
- public void testModifyAceDeleteWriteAllPrivilege() throws IOException, JsonException {
+ public void testModifyAceDeleteWriteAllPrivilege() throws IOException, JsonException, RepositoryException {
commonModifyAceDeleteWritePrivilege();
// remove both the allow and the deny privilege
@@ -1465,7 +1467,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
assertPrivilege(groupPrivilegesObject2, false, PrivilegeValues.DENY, PrivilegeConstants.JCR_WRITE);
}
- protected void commonModifyAceDeleteWritePrivilege() throws IOException {
+ protected void commonModifyAceDeleteWritePrivilege() throws IOException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -1508,7 +1510,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* The allow restriction wins out and the deny restriction is ignored
*/
@Test
- public void testModifyAceAllowWinsOverDenyWithSameRestrictions() throws IOException, JsonException {
+ public void testModifyAceAllowWinsOverDenyWithSameRestrictions() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -1540,7 +1542,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceDeleteAllowPrivilegeRestriction() throws IOException, JsonException {
+ public void testModifyAceDeleteAllowPrivilegeRestriction() throws IOException, JsonException, RepositoryException {
testModifyAceAddAllowAndDenyPrivilegeRestriction();
// update the ACE
@@ -1576,7 +1578,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceDeletePrivilegeRestrictionWithInvalidValue() throws IOException, JsonException {
+ public void testModifyAceDeletePrivilegeRestrictionWithInvalidValue() throws IOException, JsonException, RepositoryException {
testModifyAceAddAllowAndDenyPrivilegeRestriction();
// update the ACE
@@ -1624,7 +1626,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceDeleteDenyPrivilegeRestriction() throws IOException, JsonException {
+ public void testModifyAceDeleteDenyPrivilegeRestriction() throws IOException, JsonException, RepositoryException {
testModifyAceAddAllowAndDenyPrivilegeRestriction();
// update the ACE
@@ -1660,7 +1662,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceDeleteAllowAndDenyPrivilegeRestriction() throws IOException, JsonException {
+ public void testModifyAceDeleteAllowAndDenyPrivilegeRestriction() throws IOException, JsonException, RepositoryException {
testModifyAceAddAllowAndDenyPrivilegeRestriction();
// update the ACE
@@ -1684,7 +1686,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceAddPrivilegeRestrictionOnAggregateLeaf() throws IOException, JsonException {
+ public void testModifyAceAddPrivilegeRestrictionOnAggregateLeaf() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -1727,7 +1729,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceAddSamePrivilegeRestrictionOnAllAggregateLeafs() throws IOException, JsonException {
+ public void testModifyAceAddSamePrivilegeRestrictionOnAllAggregateLeafs() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -1760,7 +1762,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceAllowAllDenyReadAccessControl() throws IOException, JsonException {
+ public void testModifyAceAllowAllDenyReadAccessControl() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -1800,7 +1802,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceDenyAllAllowReadAccessControl() throws IOException, JsonException {
+ public void testModifyAceDenyAllAllowReadAccessControl() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -1840,7 +1842,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceDenyAllAllowReadProperties() throws IOException, JsonException {
+ public void testModifyAceDenyAllAllowReadProperties() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -1882,7 +1884,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceDenyAllGrantLeafsOfRepWrite() throws IOException, JsonException {
+ public void testModifyAceDenyAllGrantLeafsOfRepWrite() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -1925,7 +1927,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceDenyAllGrantModifyPropertiesAndOtherLeafsOfRepWrite() throws IOException, JsonException {
+ public void testModifyAceDenyAllGrantModifyPropertiesAndOtherLeafsOfRepWrite() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -1967,7 +1969,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceDenyAllGrantJcrWriteAndOtherLeafsOfRepWrite() throws IOException, JsonException {
+ public void testModifyAceDenyAllGrantJcrWriteAndOtherLeafsOfRepWrite() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -2007,7 +2009,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* SLING-11243 - Test to verify adding an ACE with privilege restriction
*/
@Test
- public void testModifyAceAllowAllDenyJcrWriteAndOtherLeafsOfRepWrite() throws IOException, JsonException {
+ public void testModifyAceAllowAllDenyJcrWriteAndOtherLeafsOfRepWrite() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -2048,7 +2050,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* The allow restriction wins out and the deny restriction is ignored
*/
@Test
- public void testModifyAceAllowReadAndDenyRead() throws IOException, JsonException {
+ public void testModifyAceAllowReadAndDenyRead() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -2077,7 +2079,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* The allow restriction wins out and the deny restriction is ignored
*/
@Test
- public void testModifyAceDenyReadAndAllowRead() throws IOException, JsonException {
+ public void testModifyAceDenyReadAndAllowRead() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -2106,7 +2108,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* The allow restriction wins out and the deny restriction is ignored
*/
@Test
- public void testModifyAceAllowReadAndNoneRead() throws IOException, JsonException {
+ public void testModifyAceAllowReadAndNoneRead() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -2136,7 +2138,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* The allow restriction wins out and the deny restriction is ignored
*/
@Test
- public void testModifyAceAllowReadRestrictionAndDenySameReadRestriction() throws IOException, JsonException {
+ public void testModifyAceAllowReadRestrictionAndDenySameReadRestriction() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -2175,7 +2177,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* The allow restriction wins out and the deny restriction is ignored
*/
@Test
- public void testModifyAceDenyReadRestrictionAndAllowSameReadRestriction() throws IOException, JsonException {
+ public void testModifyAceDenyReadRestrictionAndAllowSameReadRestriction() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -2214,7 +2216,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* The allow restriction wins out and the deny restriction is ignored
*/
@Test
- public void testModifyAceAllowReadRestrictionAndNoneSameReadRestriction() throws IOException, JsonException {
+ public void testModifyAceAllowReadRestrictionAndNoneSameReadRestriction() throws IOException, JsonException, RepositoryException {
testFolderUrl = createTestFolder();
testGroupId = createTestGroup();
@@ -2249,14 +2251,14 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
}
@Test
- public void testModifyAceForInvalidRestrictionName() throws IOException, JsonException {
+ public void testModifyAceForInvalidRestrictionName() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
// update the ACE
List<NameValuePair> postParams = new AcePostParamsBuilder(testUserId)
- .with(":http-equiv-accept", JSONResponse.RESPONSE_CONTENT_TYPE)
+ .with(":http-equiv-accept", JakartaJSONResponse.RESPONSE_CONTENT_TYPE)
.withRestriction("invalid_name", "hello")
.build();
String json = addOrUpdateAce(testFolderUrl, postParams, CONTENT_TYPE_JSON, HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
@@ -2267,14 +2269,14 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
}
@Test
- public void testModifyAceForInvalidPrivilegeName() throws IOException, JsonException {
+ public void testModifyAceForInvalidPrivilegeName() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
// update the ACE
List<NameValuePair> postParams = new AcePostParamsBuilder(testUserId)
- .with(":http-equiv-accept", JSONResponse.RESPONSE_CONTENT_TYPE)
+ .with(":http-equiv-accept", JakartaJSONResponse.RESPONSE_CONTENT_TYPE)
.withPrivilege("invalid_name", PrivilegeValues.ALLOW)
.build();
String json = addOrUpdateAce(testFolderUrl, postParams, CONTENT_TYPE_JSON, HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
@@ -2285,14 +2287,14 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
}
@Test
- public void testModifyAceForInvalidDeleteRestrictionName() throws IOException, JsonException {
+ public void testModifyAceForInvalidDeleteRestrictionName() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
// update the ACE
List<NameValuePair> postParams = new AcePostParamsBuilder(testUserId)
- .with(":http-equiv-accept", JSONResponse.RESPONSE_CONTENT_TYPE)
+ .with(":http-equiv-accept", JakartaJSONResponse.RESPONSE_CONTENT_TYPE)
.withDeletePrivilegeRestriction(PrivilegeConstants.JCR_READ, "invalid_name", DeleteValues.ALLOW)
.build();
String json = addOrUpdateAce(testFolderUrl, postParams, CONTENT_TYPE_JSON, HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
@@ -2303,14 +2305,14 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
}
@Test
- public void testModifyAceForInvalidDeleteRestrictionPrivilegeName() throws IOException, JsonException {
+ public void testModifyAceForInvalidDeleteRestrictionPrivilegeName() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
// update the ACE
List<NameValuePair> postParams = new AcePostParamsBuilder(testUserId)
- .with(":http-equiv-accept", JSONResponse.RESPONSE_CONTENT_TYPE)
+ .with(":http-equiv-accept", JakartaJSONResponse.RESPONSE_CONTENT_TYPE)
.withDeletePrivilegeRestriction("invalid_name", AccessControlConstants.REP_GLOB, DeleteValues.ALLOW)
.build();
String json = addOrUpdateAce(testFolderUrl, postParams, CONTENT_TYPE_JSON, HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
@@ -2325,7 +2327,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* the ACL
*/
@Test
- public void testAddAceWithCustomRestriction() throws IOException, JsonException {
+ public void testAddAceWithCustomRestriction() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -2371,7 +2373,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* when there is a deny child privilege with the same restrictions as the parent
*/
@Test
- public void testNoAggregateAllowWhenDenyChildHasSameRestriction() throws IOException, JsonException {
+ public void testNoAggregateAllowWhenDenyChildHasSameRestriction() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -2419,7 +2421,7 @@ public class ModifyAceIT extends AccessManagerClientTestSupport {
* when there is an allow child privilege with the same restrictions as the parent
*/
@Test
- public void testNoAggregateDenyWhenAllowChildHasSameRestriction() throws IOException, JsonException {
+ public void testNoAggregateDenyWhenAllowChildHasSameRestriction() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/ModifyAceServiceIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/ModifyAceServiceIT.java
index f7166a0..ce1e3b3 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/ModifyAceServiceIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/ModifyAceServiceIT.java
@@ -31,19 +31,13 @@ import javax.inject.Inject;
import javax.jcr.Node;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
import javax.jcr.security.AccessControlException;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonString;
-import jakarta.json.JsonValue;
import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
import org.apache.sling.api.resource.ResourceNotFoundException;
-import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.jcr.jackrabbit.accessmanager.GetAcl;
import org.apache.sling.jcr.jackrabbit.accessmanager.LocalPrivilege;
import org.apache.sling.jcr.jackrabbit.accessmanager.ModifyAce;
@@ -55,6 +49,10 @@ import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonString;
+import jakarta.json.JsonValue;
+
/**
* Tests for the 'modifyAce' inproc service
*/
@@ -68,29 +66,29 @@ public class ModifyAceServiceIT extends AccessManagerClientTestSupport {
@Inject
private GetAcl getAcl;
- @Inject
- protected SlingRepository repository;
-
- protected Session adminSession;
-
private Node testNode;
+
@Before
- public void setup() throws RepositoryException {
- adminSession = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
- assertNotNull("Expected adminSession to not be null", adminSession);
+ @Override
+ public void before() throws Exception {
+ super.before();
+
testNode = adminSession.getRootNode().addNode("testNode");
adminSession.save();
}
+
@After
- public void teardown() throws RepositoryException {
+ @Override
+ public void after() throws Exception {
adminSession.refresh(false);
testNode.remove();
if (adminSession.hasPendingChanges()) {
adminSession.save();
}
- adminSession.logout();
+
+ super.after();
}
protected JsonObject acl(String path) throws RepositoryException {
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/ModifyPrincipalAceIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/ModifyPrincipalAceIT.java
index 09b7ba2..f489f59 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/ModifyPrincipalAceIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/ModifyPrincipalAceIT.java
@@ -22,9 +22,7 @@ import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import java.util.List;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import javax.servlet.http.HttpServletResponse;
+import javax.jcr.RepositoryException;
import org.apache.http.NameValuePair;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
@@ -34,6 +32,10 @@ import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Tests for the 'pace' Sling Get Operation
*/
@@ -75,7 +77,7 @@ public class ModifyPrincipalAceIT extends PrincipalAceTestSupport {
* Privilege ACE servlet returns error for non-service user
*/
@Test
- public void testModifyPrivilegeAceForNonServiceUser() throws IOException, JsonException {
+ public void testModifyPrivilegeAceForNonServiceUser() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder(null, "sling-tests",
"{ \"jcr:primaryType\": \"nt:unstructured\", \"child\" : { \"childPropOne\" : true } }");
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/PrincipalAceServiceTestSupport.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/PrincipalAceServiceTestSupport.java
index 9e72cac..adf661e 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/PrincipalAceServiceTestSupport.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/PrincipalAceServiceTestSupport.java
@@ -21,15 +21,13 @@ import static org.junit.Assert.assertNotNull;
import javax.inject.Inject;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-import jakarta.json.JsonObject;
-import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.jcr.jackrabbit.accessmanager.GetPrincipalAce;
import org.junit.After;
import org.junit.Before;
+import jakarta.json.JsonObject;
+
/**
* Base class for testing of the principal ACE operations
*/
@@ -38,19 +36,12 @@ public abstract class PrincipalAceServiceTestSupport extends PrincipalAceTestSup
@Inject
protected GetPrincipalAce getPrincipalAce;
- @Inject
- protected SlingRepository repository;
-
- protected Session adminSession;
-
protected Node testNode;
@Override
@Before
public void before() throws Exception {
super.before();
- adminSession = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
- assertNotNull("Expected adminSession to not be null", adminSession);
testNode = adminSession.getRootNode().addNode("testNode");
adminSession.save();
}
@@ -64,7 +55,6 @@ public abstract class PrincipalAceServiceTestSupport extends PrincipalAceTestSup
if (adminSession.hasPendingChanges()) {
adminSession.save();
}
- adminSession.logout();
}
super.after();
}
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/PrincipalAceTestSupport.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/PrincipalAceTestSupport.java
index 8f910b5..1dbd886 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/PrincipalAceTestSupport.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/PrincipalAceTestSupport.java
@@ -26,16 +26,16 @@ import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
import java.io.IOException;
import java.util.List;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import javax.servlet.http.HttpServletResponse;
-
import org.apache.http.NameValuePair;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
import org.ops4j.pax.exam.Option;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Base class for testing of the principal ACE operations
*/
@@ -64,8 +64,10 @@ public abstract class PrincipalAceTestSupport extends AccessManagerClientTestSup
.asOption(),
factoryConfiguration("org.apache.sling.jcr.repoinit.RepositoryInitializer")
.put("scripts", new String[] {
- "create service user pacetestuser with path /home/users/system/sling\n" +
- "create service user pacetestuser2 with path /home/users/system/sling\n"
+ """
+ create service user pacetestuser with path /home/users/system/sling
+ create service user pacetestuser2 with path /home/users/system/sling
+ """
})
.asOption()
).getOptions();
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/PrivilegesInfoIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/PrivilegesInfoIT.java
index 87aeeef..cb1d3e5 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/PrivilegesInfoIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/PrivilegesInfoIT.java
@@ -16,13 +16,11 @@
*/
package org.apache.sling.jcr.jackrabbit.accessmanager.it;
-import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
-import java.io.IOException;
import java.security.Principal;
import java.util.Collections;
import java.util.HashMap;
@@ -42,7 +40,6 @@ import javax.jcr.security.Privilege;
import org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
-import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.jcr.jackrabbit.accessmanager.ModifyAce;
import org.apache.sling.jcr.jackrabbit.accessmanager.PrivilegesInfo;
import org.apache.sling.jcr.jackrabbit.accessmanager.PrivilegesInfo.AccessRights;
@@ -63,20 +60,17 @@ public class PrivilegesInfoIT extends AccessManagerClientTestSupport {
@Inject
private ModifyAce modifyAce;
- @Inject
- protected SlingRepository repository;
-
- protected Session adminSession;
protected Session testUserSession;
private Node testNodeForAdmin;
private Node testNodeForTestUser;
@Before
- public void setup() throws RepositoryException, IOException {
+ @Override
+ public void before() throws Exception {
+ super.before();
+
testUserId = createTestUser();
- adminSession = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
- assertNotNull("Expected adminSession to not be null", adminSession);
testNodeForAdmin = adminSession.getRootNode().addNode("testNode");
setupTestUserAce();
adminSession.save();
@@ -101,14 +95,16 @@ public class PrivilegesInfoIT extends AccessManagerClientTestSupport {
}
@After
- public void teardown() throws RepositoryException {
+ @Override
+ public void after() throws Exception {
adminSession.refresh(false);
testNodeForAdmin.remove();
if (adminSession.hasPendingChanges()) {
adminSession.save();
}
- adminSession.logout();
testUserSession.logout();
+
+ super.after();
}
/**
@@ -226,38 +222,6 @@ public class PrivilegesInfoIT extends AccessManagerClientTestSupport {
assertTrue(rights.getGranted().contains(jcrReadPrivilege));
}
- /**
- * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.PrivilegesInfo#getDeclaredRestrictionsForPrincipal(javax.jcr.Node, java.lang.String)}.
- * @deprecated api deprecated, test left for regression testing
- */
- @Deprecated
- @Test
- public void testGetDeclaredRestrictionsForPrincipalNodeString() throws RepositoryException {
- setupEveryoneAce();
-
- PrivilegesInfo pi = new PrivilegesInfo();
- Map<String, Object> restrictions = pi.getDeclaredRestrictionsForPrincipal(testNodeForAdmin, "everyone");
- assertNotNull(restrictions);
- assertEquals(val(PropertyType.STRING, "/hello"), restrictions.get(AccessControlConstants.REP_GLOB));
- assertArrayEquals(vals(PropertyType.NAME, "child1", "child2"), (Value[])restrictions.get(AccessControlConstants.REP_ITEM_NAMES));
- }
-
- /**
- * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.PrivilegesInfo#getDeclaredRestrictionsForPrincipal(javax.jcr.Session, java.lang.String, java.lang.String)}.
- * @deprecated api deprecated, test left for regression testing
- */
- @Deprecated
- @Test
- public void testGetDeclaredRestrictionsForPrincipalSessionStringString() throws RepositoryException {
- setupEveryoneAce();
-
- PrivilegesInfo pi = new PrivilegesInfo();
- Map<String, Object> restrictions = pi.getDeclaredRestrictionsForPrincipal(adminSession, testNodeForAdmin.getPath(), "everyone");
- assertNotNull(restrictions);
- assertEquals(val(PropertyType.STRING, "/hello"), restrictions.get(AccessControlConstants.REP_GLOB));
- assertArrayEquals(vals(PropertyType.NAME, "child1", "child2"), (Value[])restrictions.get(AccessControlConstants.REP_ITEM_NAMES));
- }
-
/**
* Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.PrivilegesInfo#getEffectiveAccessRights(javax.jcr.Node)}.
*/
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/RemoveAcesIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/RemoveAcesIT.java
index 071d663..d125bd2 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/RemoveAcesIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/RemoveAcesIT.java
@@ -25,18 +25,20 @@ import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
+import javax.jcr.RepositoryException;
+
import jakarta.json.JsonArray;
import jakarta.json.JsonException;
import jakarta.json.JsonObject;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletResponse;
import org.apache.http.NameValuePair;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.message.BasicNameValuePair;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
-import org.apache.sling.servlets.post.JSONResponse;
-import org.apache.sling.servlets.post.PostResponseCreator;
+import org.apache.sling.servlets.post.JakartaJSONResponse;
+import org.apache.sling.servlets.post.JakartaPostResponseCreator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -55,14 +57,14 @@ import org.osgi.framework.ServiceRegistration;
@ExamReactorStrategy(PerClass.class)
public class RemoveAcesIT extends AccessManagerClientTestSupport {
- private ServiceRegistration<PostResponseCreator> serviceReg;
+ private ServiceRegistration<JakartaPostResponseCreator> serviceReg;
@Before
@Override
public void before() throws Exception {
Bundle bundle = FrameworkUtil.getBundle(getClass());
Dictionary<String, Object> props = new Hashtable<>(); // NOSONAR
- serviceReg = bundle.getBundleContext().registerService(PostResponseCreator.class,
+ serviceReg = bundle.getBundleContext().registerService(JakartaPostResponseCreator.class,
new CustomPostResponseCreatorImpl(), props);
super.before();
@@ -79,7 +81,7 @@ public class RemoveAcesIT extends AccessManagerClientTestSupport {
}
- private String createFolderWithAces(boolean addGroupAce) throws IOException, JsonException {
+ private String createFolderWithAces(boolean addGroupAce) throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
@@ -145,7 +147,7 @@ public class RemoveAcesIT extends AccessManagerClientTestSupport {
//test removing a single ace
@Test
- public void testRemoveAce() throws IOException, JsonException {
+ public void testRemoveAce() throws IOException, JsonException, RepositoryException {
String folderUrl = createFolderWithAces(false);
//remove the ace for the testUser principal
@@ -170,7 +172,7 @@ public class RemoveAcesIT extends AccessManagerClientTestSupport {
* Test for SLING-7831
*/
@Test
- public void testRemoveAceCustomPostResponse() throws IOException, JsonException {
+ public void testRemoveAceCustomPostResponse() throws IOException, JsonException, RepositoryException {
String folderUrl = createFolderWithAces(false);
//remove the ace for the testUser principal
@@ -186,7 +188,7 @@ public class RemoveAcesIT extends AccessManagerClientTestSupport {
//test removing multiple aces
@Test
- public void testRemoveAces() throws IOException, JsonException {
+ public void testRemoveAces() throws IOException, JsonException, RepositoryException {
String folderUrl = createFolderWithAces(true);
//remove the ace for the testUser principal
@@ -212,7 +214,7 @@ public class RemoveAcesIT extends AccessManagerClientTestSupport {
* Test for SLING-1677
*/
@Test
- public void testRemoveAcesResponseAsJSON() throws IOException, JsonException {
+ public void testRemoveAcesResponseAsJSON() throws IOException, JsonException, RepositoryException {
String folderUrl = createFolderWithAces(true);
//remove the ace for the testUser principal
@@ -234,14 +236,14 @@ public class RemoveAcesIT extends AccessManagerClientTestSupport {
* in a consistent way to other scenarios
*/
@Test
- public void testRemoveAceWhenAccessControlListDoesNotExist() throws IOException, JsonException {
+ public void testRemoveAceWhenAccessControlListDoesNotExist() throws IOException, JsonException, RepositoryException {
testUserId = createTestUser();
testFolderUrl = createTestFolder();
String postUrl = testFolderUrl + ".deleteAce.json";
List<NameValuePair> postParams = new ArrayList<>();
- postParams.add(new BasicNameValuePair(":http-equiv-accept", JSONResponse.RESPONSE_CONTENT_TYPE));
+ postParams.add(new BasicNameValuePair(":http-equiv-accept", JakartaJSONResponse.RESPONSE_CONTENT_TYPE));
postParams.add(new BasicNameValuePair(":applyTo", testUserId));
Credentials creds = new UsernamePasswordCredentials("admin", "admin");
@@ -259,7 +261,7 @@ public class RemoveAcesIT extends AccessManagerClientTestSupport {
* good error message instead of a NullPointerException
*/
@Test
- public void testRemoveAceForInvalidUser() throws IOException, JsonException {
+ public void testRemoveAceForInvalidUser() throws IOException, JsonException, RepositoryException {
String invalidUserId = "notRealUser123";
String folderUrl = createFolderWithAces(true);
@@ -267,7 +269,7 @@ public class RemoveAcesIT extends AccessManagerClientTestSupport {
String postUrl = folderUrl + ".deleteAce.json";
List<NameValuePair> postParams = new ArrayList<>();
- postParams.add(new BasicNameValuePair(":http-equiv-accept", JSONResponse.RESPONSE_CONTENT_TYPE));
+ postParams.add(new BasicNameValuePair(":http-equiv-accept", JakartaJSONResponse.RESPONSE_CONTENT_TYPE));
postParams.add(new BasicNameValuePair(":applyTo", invalidUserId));
Credentials creds = new UsernamePasswordCredentials("admin", "admin");
@@ -283,13 +285,13 @@ public class RemoveAcesIT extends AccessManagerClientTestSupport {
* returns the list of principals that were changed
*/
@Test
- public void testRemoveAceChangesInResponse() throws IOException, JsonException {
+ public void testRemoveAceChangesInResponse() throws IOException, JsonException, RepositoryException {
String folderUrl = createFolderWithAces(true);
String postUrl = folderUrl + ".deleteAce.json";
List<NameValuePair> postParams = new ArrayList<>();
- postParams.add(new BasicNameValuePair(":http-equiv-accept", JSONResponse.RESPONSE_CONTENT_TYPE));
+ postParams.add(new BasicNameValuePair(":http-equiv-accept", JakartaJSONResponse.RESPONSE_CONTENT_TYPE));
postParams.add(new BasicNameValuePair(":applyTo", testUserId));
Credentials creds = new UsernamePasswordCredentials("admin", "admin");
@@ -305,7 +307,7 @@ public class RemoveAcesIT extends AccessManagerClientTestSupport {
assertEquals(testUserId, change.getString("argument"));
}
- private void testRemoveAceRedirect(String redirectTo, int expectedStatus) throws IOException {
+ private void testRemoveAceRedirect(String redirectTo, int expectedStatus) throws IOException, JsonException, RepositoryException {
String folderUrl = createFolderWithAces(false);
//remove the ace for the testUser principal
@@ -318,17 +320,17 @@ public class RemoveAcesIT extends AccessManagerClientTestSupport {
}
@Test
- public void testRemoveAceValidRedirect() throws IOException, JsonException {
+ public void testRemoveAceValidRedirect() throws IOException, JsonException, RepositoryException {
testRemoveAceRedirect("/*.html", HttpServletResponse.SC_MOVED_TEMPORARILY);
}
@Test
- public void testRemoveAceInvalidRedirectWithAuthority() throws IOException, JsonException {
+ public void testRemoveAceInvalidRedirectWithAuthority() throws IOException, JsonException, RepositoryException {
testRemoveAceRedirect("https://sling.apache.org", SC_UNPROCESSABLE_ENTITY);
}
@Test
- public void testRemoveAceInvalidRedirectWithInvalidURI() throws IOException, JsonException {
+ public void testRemoveAceInvalidRedirectWithInvalidURI() throws IOException, JsonException, RepositoryException {
testRemoveAceRedirect("https://", SC_UNPROCESSABLE_ENTITY);
}
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/RemovePrincipalAcesIT.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/RemovePrincipalAcesIT.java
index 0b79674..4b910bb 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/RemovePrincipalAcesIT.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/it/RemovePrincipalAcesIT.java
@@ -26,18 +26,13 @@ import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
-import jakarta.json.JsonArray;
-import jakarta.json.JsonException;
-import jakarta.json.JsonObject;
-import javax.servlet.http.HttpServletResponse;
-
import org.apache.http.NameValuePair;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.message.BasicNameValuePair;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
-import org.apache.sling.servlets.post.JSONResponse;
-import org.apache.sling.servlets.post.PostResponseCreator;
+import org.apache.sling.servlets.post.JakartaJSONResponse;
+import org.apache.sling.servlets.post.JakartaPostResponseCreator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -49,6 +44,11 @@ import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceRegistration;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonException;
+import jakarta.json.JsonObject;
+import jakarta.servlet.http.HttpServletResponse;
+
/**
* Tests for the 'removeAce' Sling POST operation
*/
@@ -56,14 +56,14 @@ import org.osgi.framework.ServiceRegistration;
@ExamReactorStrategy(PerClass.class)
public class RemovePrincipalAcesIT extends PrincipalAceTestSupport {
- private ServiceRegistration<PostResponseCreator> serviceReg;
+ private ServiceRegistration<JakartaPostResponseCreator> serviceReg;
@Before
@Override
public void before() throws Exception {
Bundle bundle = FrameworkUtil.getBundle(getClass());
Dictionary<String, Object> props = new Hashtable<>(); // NOSONAR
- serviceReg = bundle.getBundleContext().registerService(PostResponseCreator.class,
+ serviceReg = bundle.getBundleContext().registerService(JakartaPostResponseCreator.class,
new CustomPostResponseCreatorImpl(), props);
super.before();
@@ -219,7 +219,7 @@ public class RemovePrincipalAcesIT extends PrincipalAceTestSupport {
String postUrl = testFolderUrl + ".deletePAce.json";
List<NameValuePair> postParams = new ArrayList<>();
- postParams.add(new BasicNameValuePair(":http-equiv-accept", JSONResponse.RESPONSE_CONTENT_TYPE));
+ postParams.add(new BasicNameValuePair(":http-equiv-accept", JakartaJSONResponse.RESPONSE_CONTENT_TYPE));
postParams.add(new BasicNameValuePair(":applyTo", "pacetestuser"));
Credentials creds = new UsernamePasswordCredentials("admin", "admin");
@@ -245,7 +245,7 @@ public class RemovePrincipalAcesIT extends PrincipalAceTestSupport {
String postUrl = folderUrl + ".deletePAce.json";
List<NameValuePair> postParams = new ArrayList<>();
- postParams.add(new BasicNameValuePair(":http-equiv-accept", JSONResponse.RESPONSE_CONTENT_TYPE));
+ postParams.add(new BasicNameValuePair(":http-equiv-accept", JakartaJSONResponse.RESPONSE_CONTENT_TYPE));
postParams.add(new BasicNameValuePair(":applyTo", invalidUserId));
Credentials creds = new UsernamePasswordCredentials("admin", "admin");
@@ -267,7 +267,7 @@ public class RemovePrincipalAcesIT extends PrincipalAceTestSupport {
String postUrl = folderUrl + ".deletePAce.json";
List<NameValuePair> postParams = new ArrayList<>();
- postParams.add(new BasicNameValuePair(":http-equiv-accept", JSONResponse.RESPONSE_CONTENT_TYPE));
+ postParams.add(new BasicNameValuePair(":http-equiv-accept", JakartaJSONResponse.RESPONSE_CONTENT_TYPE));
postParams.add(new BasicNameValuePair(":applyTo", "pacetestuser"));
Credentials creds = new UsernamePasswordCredentials("admin", "admin");
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessPostServletTest.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessPostServletTest.java
new file mode 100644
index 0000000..cd2e9df
--- /dev/null
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessPostServletTest.java
@@ -0,0 +1,508 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.jcr.jackrabbit.accessmanager.post;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.ArgumentMatchers.anyString;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.security.AccessControlList;
+import javax.jcr.security.AccessControlManager;
+import javax.jcr.security.AccessControlPolicy;
+
+import org.apache.jackrabbit.commons.iterator.AccessControlPolicyIteratorAdapter;
+import org.apache.sling.api.SlingJakartaHttpServletRequest;
+import org.apache.sling.api.SlingJakartaHttpServletResponse;
+import org.apache.sling.api.request.header.JakartaMediaRangeList;
+import org.apache.sling.api.resource.ResourceNotFoundException;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.wrappers.JavaxToJakartaRequestWrapper;
+import org.apache.sling.api.wrappers.JavaxToJakartaResponseWrapper;
+import org.apache.sling.jcr.jackrabbit.accessmanager.impl.PrincipalAceHelper;
+import org.apache.sling.servlethelpers.MockRequestPathInfo;
+import org.apache.sling.servlethelpers.MockSlingHttpServletRequest;
+import org.apache.sling.servlethelpers.MockSlingHttpServletResponse;
+import org.apache.sling.servlets.post.JakartaHtmlResponse;
+import org.apache.sling.servlets.post.JakartaJSONResponse;
+import org.apache.sling.servlets.post.JakartaPostResponse;
+import org.apache.sling.servlets.post.JakartaPostResponseCreator;
+import org.apache.sling.servlets.post.Modification;
+import org.apache.sling.servlets.post.SlingPostConstants;
+import org.apache.sling.testing.mock.sling.ResourceResolverType;
+import org.apache.sling.testing.mock.sling.junit.SlingContext;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.Test.None;
+import org.mockito.Mockito;
+import org.osgi.framework.Constants;
+
+import jakarta.servlet.ServletException;
+
+/**
+ * Simple test of the common AbstractAccessPostServlet
+ */
+public class AbstractAccessPostServletTest {
+
+ @Rule
+ public final SlingContext context = new SlingContext(ResourceResolverType.JCR_MOCK);
+
+ private TestAccessPostServlet taps = new TestAccessPostServlet();
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#doPost(org.apache.sling.api.SlingJakartaHttpServletRequest, org.apache.sling.api.SlingJakartaHttpServletResponse)}.
+ */
+ @Test
+ public void testDoPost() throws ServletException, IOException, RepositoryException {
+ MockSlingHttpServletRequest request = context.request();
+ MockSlingHttpServletResponse response = context.response();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+ SlingJakartaHttpServletResponse jakartaResponse = JavaxToJakartaResponseWrapper.toJakartaResponse(response);
+
+ ResourceResolver rr = context.resourceResolver();
+ Session jcrSession = rr.adaptTo(Session.class);
+ jcrSession.getRootNode().addNode("content").addNode("node1");
+ context.currentResource(rr.getResource("/content/node1"));
+
+ taps = Mockito.spy(taps);
+ Mockito.doAnswer(invocation -> {
+ @SuppressWarnings("unchecked")
+ List<Modification> changes = invocation.getArgument(2, List.class);
+ changes.add(Modification.onModified("/modified"));
+ changes.add(Modification.onDeleted("/deleted"));
+ changes.add(Modification.onMoved("/moveSrcPath", "/moveDestPath"));
+ changes.add(Modification.onCopied("/copySrcPath", "/copyDestPath"));
+ changes.add(Modification.onCreated("/created"));
+ changes.add(Modification.onOrder("/ordered", "beforesibling"));
+ changes.add(Modification.onCheckin("/checkin"));
+
+ return null;
+ }).when(taps).handleOperation(any(SlingJakartaHttpServletRequest.class), any(JakartaPostResponse.class), anyList());
+
+ taps.doPost(jakartaRequest, jakartaResponse);
+
+ assertEquals(SlingJakartaHttpServletResponse.SC_OK, jakartaResponse.getStatus());
+ }
+ @Test
+ public void testDoPostWithResourceNotFound() throws ServletException, IOException, RepositoryException {
+ MockSlingHttpServletRequest request = context.request();
+ MockSlingHttpServletResponse response = context.response();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+ SlingJakartaHttpServletResponse jakartaResponse = JavaxToJakartaResponseWrapper.toJakartaResponse(response);
+
+ ResourceResolver rr = context.resourceResolver();
+ context.currentResource(rr.resolve("/content/node1"));
+
+ taps = Mockito.spy(taps);
+ Mockito.doThrow(ResourceNotFoundException.class)
+ .when(taps).handleOperation(any(SlingJakartaHttpServletRequest.class), any(JakartaPostResponse.class), anyList());
+
+ taps.doPost(jakartaRequest, jakartaResponse);
+
+ assertEquals(SlingJakartaHttpServletResponse.SC_NOT_FOUND, jakartaResponse.getStatus());
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#validateResourcePath(javax.jcr.Session, java.lang.String)}.
+ * @throws RepositoryException
+ */
+ @Test
+ public void testValidateResourcePath() throws RepositoryException {
+ Session jcrSession = context.resourceResolver().adaptTo(Session.class);
+ assertThrows(ResourceNotFoundException.class, () -> taps.validateResourcePath(jcrSession, null));
+ assertThrows(ResourceNotFoundException.class, () -> taps.validateResourcePath(jcrSession, "/content/node1"));
+
+ // should not throw ResourceNotFoundException when the node exist
+ jcrSession.getRootNode().addNode("content").addNode("node1");
+ taps.validateResourcePath(jcrSession, "/content/node1");
+ }
+ @Test(expected = None.class)
+ public void testValidateResourcePathWithAllowNonExistingPath() throws RepositoryException {
+ taps = Mockito.spy(taps);
+ Mockito.doReturn(true).when(taps).allowNonExistingPaths();
+
+ Session jcrSession = context.resourceResolver().adaptTo(Session.class);
+ taps.validateResourcePath(jcrSession, "/content/node1");
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#createPostResponse(org.apache.sling.api.SlingJakartaHttpServletRequest)}.
+ */
+ @Test
+ public void testCreatePostResponseWithJakartaPostResponseCreator() {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ JakartaPostResponseCreator mockPostResponseCreator = Mockito.mock(JakartaPostResponseCreator.class);
+ Mockito.when(mockPostResponseCreator.createPostResponse(jakartaRequest)).thenReturn(null);
+ taps.bindPostResponseCreator(mockPostResponseCreator, Map.of());
+
+ assertTrue(taps.createPostResponse(jakartaRequest) instanceof JakartaHtmlResponse);
+
+ JakartaPostResponse mockPostResponse = Mockito.mock(JakartaPostResponse.class);
+ Mockito.when(mockPostResponseCreator.createPostResponse(jakartaRequest)).thenReturn(mockPostResponse);
+ assertEquals(mockPostResponse, taps.createPostResponse(jakartaRequest));
+ }
+ @Test
+ public void testCreatePostResponseWithNoAcceptParamOrHeader() {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ // first with no response content type specified
+ assertTrue(taps.createPostResponse(jakartaRequest) instanceof JakartaHtmlResponse);
+
+ // again with response content type specified
+ request.setResponseContentType("application/json");
+ assertTrue(taps.createPostResponse(jakartaRequest) instanceof JakartaJSONResponse);
+ }
+ @Test
+ public void testCreatePostResponseWithEmptyAcceptParamOrHeader() {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ request.setParameterMap(Map.of(JakartaMediaRangeList.PARAM_ACCEPT, ""));
+ request.setHeader(JakartaMediaRangeList.HEADER_ACCEPT, "");
+ assertTrue(taps.createPostResponse(jakartaRequest) instanceof JakartaHtmlResponse);
+ }
+ @Test
+ public void testCreatePostResponseWithAcceptParam() {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ request.setParameterMap(Map.of(JakartaMediaRangeList.PARAM_ACCEPT, "application/json"));
+ assertTrue(taps.createPostResponse(jakartaRequest) instanceof JakartaJSONResponse);
+ }
+ @Test
+ public void testCreatePostResponseWithAcceptHeader() {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ request.setHeader(JakartaMediaRangeList.HEADER_ACCEPT, "application/json");
+ assertTrue(taps.createPostResponse(jakartaRequest) instanceof JakartaJSONResponse);
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#getRedirectUrl(jakarta.servlet.http.HttpServletRequest, org.apache.sling.servlets.post.JakartaPostResponse)}.
+ */
+ @Test
+ public void testGetRedirectUrl() throws IOException {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ JakartaJSONResponse postResponse = new JakartaJSONResponse();
+ assertNull(taps.getRedirectUrl(jakartaRequest, postResponse));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_REDIRECT_TO, "/content/node"));
+ assertEquals("/content/node", taps.getRedirectUrl(jakartaRequest, postResponse));
+ }
+ @Test
+ public void testGetRedirectUrlWithHost() throws IOException {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ JakartaJSONResponse postResponse = new JakartaJSONResponse();
+ assertNull(taps.getRedirectUrl(jakartaRequest, postResponse));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_REDIRECT_TO, "https://localhost/content/node"));
+ assertThrows(IOException.class, () -> taps.getRedirectUrl(jakartaRequest, postResponse));
+ }
+ @Test
+ public void testGetRedirectUrlWithInvalidSyntax() throws IOException {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ JakartaJSONResponse postResponse = new JakartaJSONResponse();
+ assertNull(taps.getRedirectUrl(jakartaRequest, postResponse));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_REDIRECT_TO, "https://"));
+ assertThrows(IOException.class, () -> taps.getRedirectUrl(jakartaRequest, postResponse));
+ }
+ @Test
+ public void testGetRedirectUrlToCreated() throws IOException {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ JakartaJSONResponse postResponse = new JakartaJSONResponse();
+ postResponse.setPath("/content/node/node1");
+ assertNull(taps.getRedirectUrl(jakartaRequest, postResponse));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_REDIRECT_TO, "*"));
+ assertEquals("node1", taps.getRedirectUrl(jakartaRequest, postResponse));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_REDIRECT_TO, "/content/node/*"));
+ assertEquals("/content/node/node1", taps.getRedirectUrl(jakartaRequest, postResponse));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_REDIRECT_TO, "/content/node/*.html"));
+ assertEquals("/content/node/node1.html", taps.getRedirectUrl(jakartaRequest, postResponse));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_REDIRECT_TO, "/content/node/"));
+ assertEquals("/content/node/node1", taps.getRedirectUrl(jakartaRequest, postResponse));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_REDIRECT_TO, "/content/node/other"));
+ assertEquals("/content/node/other", taps.getRedirectUrl(jakartaRequest, postResponse));
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#isSetStatus(org.apache.sling.api.SlingJakartaHttpServletRequest)}.
+ */
+ @Test
+ public void testIsSetStatus() {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ assertTrue(taps.isSetStatus(jakartaRequest));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_STATUS, SlingPostConstants.STATUS_VALUE_BROWSER));
+ assertFalse(taps.isSetStatus(jakartaRequest));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_STATUS, SlingPostConstants.STATUS_VALUE_STANDARD));
+ assertTrue(taps.isSetStatus(jakartaRequest));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_STATUS, "other"));
+ assertTrue(taps.isSetStatus(jakartaRequest));
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#getItemPath(org.apache.sling.api.SlingJakartaHttpServletRequest)}.
+ */
+ @Test
+ public void testGetItemPath() throws RepositoryException {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ ResourceResolver rr = context.resourceResolver();
+ Session jcrSession = rr.adaptTo(Session.class);
+ jcrSession.getRootNode().addNode("content").addNode("node1");
+ context.currentResource(rr.getResource("/content/node1"));
+
+ assertEquals("/content/node1", taps.getItemPath(jakartaRequest));
+ }
+ @Test
+ public void testGetItemPathWithAllowNonExistingPaths() throws RepositoryException {
+ taps = Mockito.spy(taps);
+ Mockito.doReturn(true).when(taps).allowNonExistingPaths();
+
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ ResourceResolver rr = context.resourceResolver();
+ Session jcrSession = rr.adaptTo(Session.class);
+ jcrSession.getRootNode().addNode("content").addNode("node1");
+ context.currentResource(rr.getResource("/content/node1"));
+
+ assertEquals("/content/node1", taps.getItemPath(jakartaRequest));
+
+ MockRequestPathInfo rpi = (MockRequestPathInfo)jakartaRequest.getRequestPathInfo();
+ rpi.setResourcePath("/content");
+ context.currentResource(rr.resolve("/content/notexisting1"));
+ assertEquals("/content", taps.getItemPath(jakartaRequest));
+
+ rpi.setResourcePath(PrincipalAceHelper.RESOURCE_PATH_REPOSITORY);
+ assertNull(taps.getItemPath(jakartaRequest));
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#externalizePath(org.apache.sling.api.SlingJakartaHttpServletRequest, java.lang.String)}.
+ */
+ @Test
+ public void testExternalizePath() {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ assertNull(taps.externalizePath(jakartaRequest, null));
+ assertEquals("/path", taps.externalizePath(jakartaRequest, "/content/path"));
+ }
+ @Test
+ public void testExternalizePathWithAllowNonExistingPaths() {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ taps = Mockito.spy(taps);
+ Mockito.doReturn(true).when(taps).allowNonExistingPaths();
+ assertEquals(PrincipalAceHelper.RESOURCE_PATH_REPOSITORY, taps.externalizePath(jakartaRequest, null));
+ }
+ @Test
+ public void testExternalizePathWithDisplayExtension() {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_DISPLAY_EXTENSION, "ext"));
+ assertEquals("/path.ext", taps.externalizePath(jakartaRequest, "/content/path"));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_DISPLAY_EXTENSION, ""));
+ assertEquals("/path", taps.externalizePath(jakartaRequest, "/content/path"));
+
+ request.setParameterMap(Map.of(SlingPostConstants.RP_DISPLAY_EXTENSION, ".ext"));
+ assertEquals("/path.ext", taps.externalizePath(jakartaRequest, "/content/path"));
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#allowNonExistingPaths()}.
+ */
+ @Test
+ public void testAllowNonExistingPaths() {
+ assertFalse(taps.allowNonExistingPaths());
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#getParentPath(java.lang.String)}.
+ */
+ @Test
+ public void testGetParentPath() {
+ assertNull(taps.getParentPath(null));
+ assertEquals("/content", taps.getParentPath("/content/path"));
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#getAccessControlList(javax.jcr.security.AccessControlManager, java.lang.String, boolean)}.
+ */
+ @Test
+ public void testGetAccessControlList() throws RepositoryException {
+ AccessControlManager acManager = Mockito.mock(AccessControlManager.class);
+ Mockito.when(acManager.getPolicies(anyString())).thenReturn(new AccessControlPolicy[0]);
+ assertThrows(RepositoryException.class, () -> taps.getAccessControlList(acManager, "/content/node1", false));
+
+ Mockito.when(acManager.getApplicablePolicies(anyString())).thenReturn(AccessControlPolicyIteratorAdapter.EMPTY);
+ assertThrows(RepositoryException.class, () -> taps.getAccessControlList(acManager, "/content/node1", true));
+ }
+ @Test
+ public void testGetAccessControlListWithFoundACL() throws RepositoryException {
+ AccessControlManager acManager = Mockito.mock(AccessControlManager.class);
+ AccessControlPolicy mockNonAcl = Mockito.mock(AccessControlPolicy.class);
+ AccessControlList mockAcl = Mockito.mock(AccessControlList.class);
+ Mockito.when(acManager.getPolicies(anyString())).thenReturn(new AccessControlPolicy[] {mockNonAcl, mockAcl});
+ assertSame(mockAcl, taps.getAccessControlList(acManager, "/content/node1", false));
+ }
+ @Test
+ public void testGetAccessControlListWithCreatedNewACL() throws RepositoryException {
+ AccessControlManager acManager = Mockito.mock(AccessControlManager.class);
+ AccessControlPolicy mockNonAcl = Mockito.mock(AccessControlPolicy.class);
+ AccessControlList mockAcl = Mockito.mock(AccessControlList.class);
+ Mockito.when(acManager.getPolicies(anyString())).thenReturn(new AccessControlPolicy[0]);
+ Mockito.when(acManager.getApplicablePolicies(anyString())).thenReturn(new AccessControlPolicyIteratorAdapter(List.of(mockNonAcl, mockAcl)));
+
+ assertSame(mockAcl, taps.getAccessControlList(acManager, "/content/node1", true));
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#getAccessControlListOrNull(javax.jcr.security.AccessControlManager, java.lang.String, boolean)}.
+ */
+ @Test
+ public void testGetAccessControlListOrNull() throws RepositoryException {
+ AccessControlManager acManager = Mockito.mock(AccessControlManager.class);
+ Mockito.when(acManager.getPolicies(anyString())).thenReturn(new AccessControlPolicy[0]);
+ assertNull(taps.getAccessControlListOrNull(acManager, "/content/node1", false));
+
+ Mockito.when(acManager.getApplicablePolicies(anyString())).thenReturn(AccessControlPolicyIteratorAdapter.EMPTY);
+ assertNull(taps.getAccessControlListOrNull(acManager, "/content/node1", true));
+ }
+ @Test
+ public void testGetAccessControlListOrNullWithFoundACL() throws RepositoryException {
+ AccessControlManager acManager = Mockito.mock(AccessControlManager.class);
+ AccessControlPolicy mockNonAcl = Mockito.mock(AccessControlPolicy.class);
+ AccessControlList mockAcl = Mockito.mock(AccessControlList.class);
+ Mockito.when(acManager.getPolicies(anyString())).thenReturn(new AccessControlPolicy[] {mockNonAcl, mockAcl});
+ assertSame(mockAcl, taps.getAccessControlListOrNull(acManager, "/content/node1", false));
+ }
+ @Test
+ public void testGetAccessControlListOrNullWithCreatedNewACL() throws RepositoryException {
+ AccessControlManager acManager = Mockito.mock(AccessControlManager.class);
+ AccessControlPolicy mockNonAcl = Mockito.mock(AccessControlPolicy.class);
+ AccessControlList mockAcl = Mockito.mock(AccessControlList.class);
+ Mockito.when(acManager.getPolicies(anyString())).thenReturn(new AccessControlPolicy[0]);
+ Mockito.when(acManager.getApplicablePolicies(anyString())).thenReturn(new AccessControlPolicyIteratorAdapter(List.of(mockNonAcl, mockAcl)));
+
+ assertSame(mockAcl, taps.getAccessControlListOrNull(acManager, "/content/node1", true));
+ }
+
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#bindPostResponseCreator(org.apache.sling.servlets.post.JakartaPostResponseCreator, java.util.Map)}.
+ */
+ @Test
+ public void testBindPostResponseCreator() {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ JakartaPostResponseCreator mockCreator1 = Mockito.mock(JakartaPostResponseCreator.class);
+ taps.bindPostResponseCreator(mockCreator1, Map.of(Constants.SERVICE_RANKING, 1));
+
+ JakartaPostResponse mockPostResponse1 = Mockito.mock(JakartaPostResponse.class);
+ Mockito.when(mockCreator1.createPostResponse(jakartaRequest)).thenReturn(mockPostResponse1);
+ assertEquals(mockPostResponse1, taps.createPostResponse(jakartaRequest));
+
+ JakartaPostResponseCreator mockCreator3 = Mockito.mock(JakartaPostResponseCreator.class);
+ taps.bindPostResponseCreator(mockCreator3, Map.of(Constants.SERVICE_RANKING, 3));
+
+ JakartaPostResponse mockPostResponse3 = Mockito.mock(JakartaPostResponse.class);
+ Mockito.when(mockCreator3.createPostResponse(jakartaRequest)).thenReturn(mockPostResponse3);
+ assertEquals(mockPostResponse3, taps.createPostResponse(jakartaRequest));
+
+ JakartaPostResponseCreator mockCreator2 = Mockito.mock(JakartaPostResponseCreator.class);
+ taps.bindPostResponseCreator(mockCreator2, Map.of(Constants.SERVICE_RANKING, 2));
+ assertEquals(mockPostResponse3, taps.createPostResponse(jakartaRequest));
+ }
+
+ /**
+ * Test method for {@link org.apache.sling.jcr.jackrabbit.accessmanager.post.AbstractAccessPostServlet#unbindPostResponseCreator(org.apache.sling.servlets.post.JakartaPostResponseCreator, java.util.Map)}.
+ */
+ @Test
+ public void testUnbindPostResponseCreator() {
+ MockSlingHttpServletRequest request = context.request();
+ SlingJakartaHttpServletRequest jakartaRequest = JavaxToJakartaRequestWrapper.toJakartaRequest(request);
+
+ JakartaPostResponseCreator mockCreator1 = Mockito.mock(JakartaPostResponseCreator.class);
+ JakartaPostResponse mockPostResponse1 = Mockito.mock(JakartaPostResponse.class);
+ Mockito.when(mockCreator1.createPostResponse(jakartaRequest)).thenReturn(mockPostResponse1);
+ Map<String, Object> creatorProps1 = Map.of(Constants.SERVICE_RANKING, 1);
+ taps.bindPostResponseCreator(mockCreator1, creatorProps1);
+ assertEquals(mockPostResponse1, taps.createPostResponse(jakartaRequest));
+
+ JakartaPostResponseCreator mockCreator2 = Mockito.mock(JakartaPostResponseCreator.class);
+ JakartaPostResponse mockPostResponse2 = Mockito.mock(JakartaPostResponse.class);
+ Mockito.when(mockCreator2.createPostResponse(jakartaRequest)).thenReturn(mockPostResponse2);
+ Map<String, Object> creatorProps2 = Map.of(Constants.SERVICE_RANKING, 1);
+ taps.bindPostResponseCreator(mockCreator2, creatorProps2);
+ assertEquals(mockPostResponse2, taps.createPostResponse(jakartaRequest));
+
+ taps.unbindPostResponseCreator(mockCreator2, creatorProps1);
+ assertEquals(mockPostResponse1, taps.createPostResponse(jakartaRequest));
+ taps.unbindPostResponseCreator(mockCreator1, creatorProps2);
+ assertTrue(taps.createPostResponse(jakartaRequest) instanceof JakartaHtmlResponse);
+ }
+
+ private class TestAccessPostServlet extends AbstractAccessPostServlet {
+ private static final long serialVersionUID = -2948341218853558959L;
+
+ @Override
+ protected void handleOperation(SlingJakartaHttpServletRequest request, JakartaPostResponse response,
+ List<Modification> changes) throws RepositoryException {
+ // do nothing
+ }
+ }
+}
diff --git a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessServletTest.java b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessServletTest.java
index a684e02..fa2e76f 100644
--- a/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessServletTest.java
+++ b/src/test/java/org/apache/sling/jcr/jackrabbit/accessmanager/post/AbstractAccessServletTest.java
@@ -27,11 +27,10 @@ import org.junit.Test;
* Simple test of the common AbstractAccessServlet
*/
public class AbstractAccessServletTest {
+ private TestAccessServlet tas = new TestAccessServlet();
@Test
public void testBindRestrictionProvider() {
- TestAccessServlet tas = new TestAccessServlet();
-
//starts out empty
assertEquals("Expected the empty RestrictionProvider", RestrictionProvider.EMPTY, tas.getRestrictionProvider());
@@ -53,7 +52,6 @@ public class AbstractAccessServletTest {
@Test
public void testUnbindRestrictionProvider() {
- TestAccessServlet tas = new TestAccessServlet();
CustomRestrictionProviderImpl customRestrictionProvider = new CustomRestrictionProviderImpl();
tas.bindRestrictionProvider(customRestrictionProvider);
CustomRestrictionProviderImpl customRestrictionProvider2 = new CustomRestrictionProviderImpl();
@@ -74,7 +72,6 @@ public class AbstractAccessServletTest {
@Test
public void testGetRestrictionProvider() {
- TestAccessServlet tas = new TestAccessServlet();
assertNotNull(tas.getRestrictionProvider());
}
diff --git a/src/test/resources/exam.properties b/src/test/resources/exam.properties
new file mode 100644
index 0000000..486cdc6
--- /dev/null
+++ b/src/test/resources/exam.properties
@@ -0,0 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# Disable the default bundles provisioned under pax logging
+pax.exam.logging=none