sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ghenz...@apache.org
Subject [sling-org-apache-sling-engine] 01/01: SLING-9662 Use SlingUri as provided in request from auth.core
Date Wed, 23 Sep 2020 08:13:45 GMT
This is an automated email from the ASF dual-hosted git repository.

ghenzler pushed a commit to branch feature/SLING-9662-Introduce-SlingUri-Mapping-SPI_v3
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-engine.git

commit 7f1e3916ee3a88fb1c0448f7f9837cc316d80f40
Author: georg.henzler <georg.henzler@netcentric.biz>
AuthorDate: Mon Sep 21 17:13:00 2020 +0200

    SLING-9662 Use SlingUri as provided in request from auth.core
---
 pom.xml                                            |  4 +--
 .../sling/engine/impl/request/RequestData.java     | 38 ++++++++++++----------
 .../engine/impl/request/InitResourceTest.java      | 22 +++++++++----
 3 files changed, 37 insertions(+), 27 deletions(-)

diff --git a/pom.xml b/pom.xml
index 83d0419..9917ad6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -111,7 +111,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.6.0</version>
+            <version>2.23.0-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -123,7 +123,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.auth.core</artifactId>
-            <version>1.0.0</version>
+            <version>1.5.1-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
diff --git a/src/main/java/org/apache/sling/engine/impl/request/RequestData.java b/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
index 379eb83..b73a166 100644
--- a/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
+++ b/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
@@ -23,7 +23,6 @@ import static org.apache.sling.api.SlingConstants.SLING_CURRENT_SERVLET_NAME;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import java.util.ArrayList;
 
 import javax.servlet.Servlet;
@@ -46,8 +45,10 @@ import org.apache.sling.api.request.TooManyCallsException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.servlets.ServletResolver;
+import org.apache.sling.api.uri.SlingUri;
 import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
 import org.apache.sling.api.wrappers.SlingHttpServletResponseWrapper;
+import org.apache.sling.auth.core.AuthenticationSupport;
 import org.apache.sling.engine.impl.SlingHttpServletRequestImpl;
 import org.apache.sling.engine.impl.SlingHttpServletResponseImpl;
 import org.apache.sling.engine.impl.SlingMainServlet;
@@ -213,8 +214,7 @@ public class RequestData {
         this.servletResponse = response;
 
         this.slingRequest = getSlingHttpServletRequestFactory().createRequest(this, this.servletRequest);
-        this.slingResponse = new SlingHttpServletResponseImpl(this,
-            servletResponse);
+        this.slingResponse = new SlingHttpServletResponseImpl(this, servletResponse);
 
         // Getting the RequestProgressTracker from the request attributes like
         // this should not be generally used, it's just a way to pass it from
@@ -237,19 +237,17 @@ public class RequestData {
         requestProgressTracker.startTimer("ResourceResolution");
         final SlingHttpServletRequest request = getSlingRequest();
 
-        StringBuffer requestURL = servletRequest.getRequestURL();
-        String path = request.getPathInfo();
-        if (requestURL.indexOf(";") > -1 && !path.contains(";")) {
-            final String decodedURL;
-            try {
-                decodedURL = URLDecoder.decode(requestURL.toString(), "UTF-8");
-            } catch (UnsupportedEncodingException e) {
-                throw new AssertionError("UTF-8 encoding is not supported");
-            }
-            path = path.concat(decodedURL.substring(decodedURL.indexOf(';')));
+        // Set by o.a.s.auth.core bundle
+        SlingUri slingUri = (SlingUri) request.getAttribute(AuthenticationSupport.REQUEST_ATTRIBUTE_URI);
+        if (slingUri == null) {
+            throw new IllegalStateException(
+                    "SlingUri not available as attribute of request (expected to be set in
bundle o.a.s.auth.core)");
         }
+        // ensure slingUri is bound to correct resource resolver
+        slingUri = slingUri.adjust(b -> b.setResourceResolver(resourceResolver));
+        request.setAttribute(AuthenticationSupport.REQUEST_ATTRIBUTE_URI, slingUri);
 
-        Resource resource = resourceResolver.resolve(request, path);
+        Resource resource = resourceResolver.resolve(request, slingUri.getPath());
         if (request.getAttribute(REQUEST_RESOURCE_PATH_ATTR) == null) {
             request.setAttribute(REQUEST_RESOURCE_PATH_ATTR, resource.getPath());
         }
@@ -262,10 +260,14 @@ public class RequestData {
     public void initServlet(final Resource resource,
             final ServletResolver sr) {
         // the resource and the request path info, will never be null
-        RequestPathInfo requestPathInfo = new SlingRequestPathInfo(resource);
-        ContentData contentData = setContent(resource, requestPathInfo);
-
-	    requestProgressTracker.log("Resource Path Info: {0}", requestPathInfo);
+        SlingUri slingUri = (SlingUri) getSlingRequest().getAttribute(AuthenticationSupport.REQUEST_ATTRIBUTE_URI);
+        ContentData contentData = setContent(resource, slingUri);
+
+        requestProgressTracker.log("Resource Path Info: resourcePath={0}, selectorString={1},
extension={2}, suffix={3}",
+                slingUri.getResourcePath(),
+                slingUri.getSelectorString(),
+                slingUri.getExtension(),
+                slingUri.getSuffix());
 
         // finally resolve the servlet for the resource
         requestProgressTracker.startTimer("ServletResolution");
diff --git a/src/test/java/org/apache/sling/engine/impl/request/InitResourceTest.java b/src/test/java/org/apache/sling/engine/impl/request/InitResourceTest.java
index 9e5f1ce..ea825e9 100644
--- a/src/test/java/org/apache/sling/engine/impl/request/InitResourceTest.java
+++ b/src/test/java/org/apache/sling/engine/impl/request/InitResourceTest.java
@@ -24,6 +24,9 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.apache.sling.api.request.RequestProgressTracker;
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.uri.SlingUri;
+import org.apache.sling.api.uri.SlingUriBuilder;
+import org.apache.sling.auth.core.AuthenticationSupport;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.junit.Before;
@@ -48,13 +51,13 @@ public class InitResourceTest {
     @Parameters(name="URL={0} path={1}")
     public static Collection<Object[]> data() {
         return Arrays.asList(new Object[][] {
-                { "/one;v=1.1", "one;v=1.1", "/one;v=1.1" },
-                { "/two;v=1.1", "two", "/two;v=1.1" },
+                { "/one;v=1.1", "one;v=1.1", "/one;v='1.1'" },
+                { "/two;v=1.1", "two", "/two;v='1.1'" },
                 { "/three", "three", "/three" },
                 { "/four%3Bv=1.1", "four", "/four" },
-                { "/five%3Bv=1.1", "five;v=1.1", "/five;v=1.1" },
-                { "/six;v=1.1", "six;v=1.1", "/six;v=1.1" },
-                { "/seven", "seven;v=1.1", "/seven;v=1.1" },
+                { "/five%3Bv=1.1", "five;v=1.1", "/five;v='1.1'" },
+                { "/six;v=1.1", "six;v=1.1", "/six;v='1.1'" },
+                { "/seven", "seven;v=1.1", "/seven;v='1.1'" },
         });
     }
 
@@ -73,8 +76,13 @@ public class InitResourceTest {
         resourceResolver = context.mock(ResourceResolver.class);
 
         context.checking(new Expectations() {{
-            allowing(req).getRequestURL();
-            will(returnValue(new StringBuffer(requestURL)));
+
+            allowing(req).getAttribute(AuthenticationSupport.REQUEST_ATTRIBUTE_URI);
+
+            SlingUri slingUri = SlingUriBuilder.create().setPath(expectedResolvePath).build();
+            will(returnValue(slingUri));
+
+            allowing(req).setAttribute(AuthenticationSupport.REQUEST_ATTRIBUTE_URI, slingUri);
 
             allowing(req).getRequestURI();
 


Mime
View raw message