You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by my...@apache.org on 2014/09/09 08:49:03 UTC

svn commit: r1623676 - in /sling/trunk/bundles: resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/ resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/impl/ resourceresolver/src/main/java/or...

Author: mykee
Date: Tue Sep  9 06:49:02 2014
New Revision: 1623676

URL: http://svn.apache.org/r1623676
Log:
SLING-3917 - Add transformQuery support to the ResourceAccessSecurity Implementation

Modified:
    sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/ResourceAccessGate.java
    sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/impl/ResourceAccessSecurityImpl.java
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java

Modified: sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/ResourceAccessGate.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/ResourceAccessGate.java?rev=1623676&r1=1623675&r2=1623676&view=diff
==============================================================================
--- sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/ResourceAccessGate.java (original)
+++ sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/ResourceAccessGate.java Tue Sep  9 06:49:02 2014
@@ -187,7 +187,8 @@ public interface ResourceAccessGate {
      *            the language in which the query is expressed
      * @param resourceResolver
      *            the resource resolver which resolves the query
-     * @return the transformed query
+     * @return the transformed query or the original query if no tranformation
+     *      took place. This method should never return <code>null</code>
      * @throws AccessSecurityException
      */
     public String transformQuery(String query, String language,

Modified: sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/impl/ResourceAccessSecurityImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/impl/ResourceAccessSecurityImpl.java?rev=1623676&r1=1623675&r2=1623676&view=diff
==============================================================================
--- sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/impl/ResourceAccessSecurityImpl.java (original)
+++ sling/trunk/bundles/resourceaccesssecurity/core/src/main/java/org/apache/sling/resourceaccesssecurity/impl/ResourceAccessSecurityImpl.java Tue Sep  9 06:49:02 2014
@@ -339,7 +339,20 @@ public abstract class ResourceAccessSecu
             final String language,
             final ResourceResolver resourceResolver)
     throws AccessSecurityException {
-        return query;
+        String returnValue = query;
+
+        for (ResourceAccessGateHandler handler : allHandlers) {
+            returnValue = handler.getResourceAccessGate().transformQuery(
+                    returnValue, language, resourceResolver);
+            if (returnValue == null) {
+                throw new AccessSecurityException(
+                        "Method transformQuery in ResourceAccessGate "
+                                + handler.getResourceAccessGate().getClass()
+                                        .getName() + " returned null.");
+            }
+        }
+
+        return returnValue;
     }
 
     /**

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java?rev=1623676&r1=1623675&r2=1623676&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java Tue Sep  9 06:49:02 2014
@@ -30,11 +30,14 @@ import org.apache.sling.api.resource.Que
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceProvider;
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.security.AccessSecurityException;
 import org.apache.sling.api.security.ResourceAccessSecurity;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.resourceresolver.impl.ResourceAccessSecurityTracker;
 import org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext;
 import org.osgi.framework.Constants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * The provider handler is the common base class for the
@@ -43,6 +46,9 @@ import org.osgi.framework.Constants;
  */
 public abstract class ProviderHandler implements Comparable<ProviderHandler> {
 
+    /** Default logger */
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+    
     /** Service properties. */
     private final Map<String, Object> properties;
 
@@ -183,6 +189,45 @@ public abstract class ProviderHandler im
     /**
      * applies resource access security if configured
      */
+    protected String transformQuery ( final ResourceResolverContext ctx, final ResourceResolver resolver, final String query, final String language ) {
+        final ResourceAccessSecurityTracker tracker = ctx.getResourceAccessSecurityTracker();
+
+        String returnValue = query;
+
+        if (useResourceAccessSecurity) {
+            final ResourceAccessSecurity resourceAccessSecurity = tracker
+                    .getProviderResourceAccessSecurity();
+            if (resourceAccessSecurity != null) {
+                try {
+                    returnValue = resourceAccessSecurity.transformQuery(
+                            returnValue, language, resolver);
+                } catch (AccessSecurityException e) {
+                    logger.error(
+                            "AccessSecurityException occurred while trying to transform the query {} (language {}).",
+                            new Object[] { query, language }, e);
+                }
+            }
+        }
+
+        final ResourceAccessSecurity resourceAccessSecurity = tracker
+                .getApplicationResourceAccessSecurity();
+        if (resourceAccessSecurity != null) {
+            try {
+                returnValue = resourceAccessSecurity.transformQuery(
+                        returnValue, language, resolver);
+            } catch (AccessSecurityException e) {
+                logger.error(
+                        "AccessSecurityException occurred while trying to transform the query {} (language {}).",
+                        new Object[] { query, language }, e);
+            }
+        }
+
+        return returnValue;
+    }
+
+    /**
+     * applies resource access security if configured
+     */
     protected Iterator<Resource> getReadableChildrenIterator ( final ResourceResolverContext ctx, final Iterator<Resource> childrenIterator ) {
         Iterator<Resource> returnValue = null;
         if ( childrenIterator != null ) {

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java?rev=1623676&r1=1623675&r2=1623676&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java Tue Sep  9 06:49:02 2014
@@ -143,8 +143,9 @@ public class RootResourceProviderEntry e
                     nextResourceIter = null;
                     while ( i.hasNext() && nextResourceIter == null ) {
                         final QueriableResourceProvider adap = i.next();
-                        nextResourceIter = adap.findResources(resolver, query, language);
                         actProviderHandler = queriableProviders.getProviderHandler(ctx, adap);
+                        String transformedQuery = actProviderHandler.transformQuery(ctx, resolver, query, language);
+                        nextResourceIter = adap.findResources(resolver, transformedQuery, language);
                     }
                 }
                 if ( nextResourceIter != null ) {