Return-Path: X-Original-To: apmail-sling-commits-archive@www.apache.org Delivered-To: apmail-sling-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id CE658C52E for ; Thu, 4 Jul 2013 04:42:09 +0000 (UTC) Received: (qmail 59965 invoked by uid 500); 4 Jul 2013 04:42:08 -0000 Delivered-To: apmail-sling-commits-archive@sling.apache.org Received: (qmail 59940 invoked by uid 500); 4 Jul 2013 04:42:07 -0000 Mailing-List: contact commits-help@sling.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@sling.apache.org Delivered-To: mailing list commits@sling.apache.org Received: (qmail 59933 invoked by uid 99); 4 Jul 2013 04:42:04 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jul 2013 04:42:04 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jul 2013 04:41:57 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 931F023888CD; Thu, 4 Jul 2013 04:41:35 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1499653 - in /sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver: ./ src/main/java/org/apache/sling/resourceresolver/impl/ src/main/java/org/apache/sling/resourceresolver/impl/console/ src/main/java/org/apache/sling/... Date: Thu, 04 Jul 2013 04:41:34 -0000 To: commits@sling.apache.org From: fmeschbe@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20130704044135.931F023888CD@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: fmeschbe Date: Thu Jul 4 04:41:34 2013 New Revision: 1499653 URL: http://svn.apache.org/r1499653 Log: Implement support for service based ResourceResolver and Session access - Update with latest changes from trunk Added: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java - copied, changed from r1499651, sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/ (props changed) sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/pom.xml sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryImpl.java sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/console/ResourceResolverWebConsolePlugin.java (contents, props changed) sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverContext.java sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/SortedProviderList.java sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntry.java sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderFactoryHandler.java sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderHandler.java sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverImplTest.java sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/helper/SortedProviderListTest.java Propchange: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/ ------------------------------------------------------------------------------ svn:mergeinfo = /sling/trunk/bundles/resourceresolver:1458683-1499651 Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/pom.xml URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/pom.xml?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/pom.xml (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/pom.xml Thu Jul 4 04:41:34 2013 @@ -22,12 +22,12 @@ org.apache.sling sling - 15 + 16 ../../parent/pom.xml org.apache.sling.resourceresolver - 1.0.5-SNAPSHOT + 1.0.7-SNAPSHOT bundle Apache Sling Resource Resolver @@ -115,7 +115,7 @@ org.apache.sling org.apache.sling.api - 2.3.1-SNAPSHOT + 2.4.3-SNAPSHOT provided @@ -130,7 +130,7 @@ org.apache.sling org.apache.sling.commons.osgi - 2.2.1-SNAPSHOT + 2.2.0 provided Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryImpl.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryImpl.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryImpl.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryImpl.java Thu Jul 4 04:41:34 2013 @@ -26,6 +26,7 @@ import org.apache.sling.api.resource.Log import org.apache.sling.api.resource.ResourceProviderFactory; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceResolverFactory; +import org.apache.sling.api.security.ResourceAccessSecurity; import org.apache.sling.resourceresolver.impl.console.ResourceResolverWebConsolePlugin; import org.apache.sling.resourceresolver.impl.helper.ResourceDecoratorTracker; import org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext; @@ -36,6 +37,7 @@ import org.apache.sling.resourceresolver import org.apache.sling.serviceusermapping.ServiceUserMapper; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; +import org.osgi.util.tracker.ServiceTracker; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,6 +61,8 @@ public class ResourceResolverFactoryImpl /** The activator */ private final ResourceResolverFactoryActivator activator; + + private ServiceTracker resourceAccessSecurityTracker; private final ServiceUserMapper serviceUserMapper; @@ -139,7 +143,7 @@ public class ResourceResolverFactoryImpl final boolean isAdmin) throws LoginException { // create context - final ResourceResolverContext ctx = new ResourceResolverContext(isAdmin, authenticationInfo); + final ResourceResolverContext ctx = new ResourceResolverContext(isAdmin, authenticationInfo, resourceAccessSecurityTracker); // login this.activator.getRootProviderEntry().loginToRequiredFactories(ctx); @@ -167,6 +171,10 @@ public class ResourceResolverFactoryImpl } catch (final Exception e) { logger.error("activate: Cannot access repository, failed setting up Mapping Support", e); } + + // create and open service tracker for ResourceAccessSecurity + resourceAccessSecurityTracker = new ServiceTracker(bundleContext, ResourceAccessSecurity.class.getName(), null); + resourceAccessSecurityTracker.open(); } /** @@ -182,6 +190,8 @@ public class ResourceResolverFactoryImpl mapEntries.dispose(); mapEntries = MapEntries.EMPTY; } + + resourceAccessSecurityTracker.close(); } public ResourceDecoratorTracker getResourceDecoratorTracker() { @@ -215,4 +225,12 @@ public class ResourceResolverFactoryImpl public int getDefaultVanityPathRedirectStatus() { return this.activator.getDefaultVanityPathRedirectStatus(); } + + /** + * get's the ServiceTracker of the ResourceAccessSecurity service + */ + + public ServiceTracker getResourceAccessSecurityTracker () { + return resourceAccessSecurityTracker; + } } \ No newline at end of file Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java Thu Jul 4 04:41:34 2013 @@ -123,7 +123,8 @@ public class ResourceResolverImpl extend } // create new context - final ResourceResolverContext newContext = new ResourceResolverContext(this.context.isAdmin(), newAuthenticationInfo); + final ResourceResolverContext newContext = new ResourceResolverContext(this.context.isAdmin(), + newAuthenticationInfo, factory.getResourceAccessSecurityTracker() ); this.factory.getRootProviderEntry().loginToRequiredFactories(newContext); // create a regular resource resolver @@ -869,7 +870,7 @@ public class ResourceResolverImpl extend } else { path = parent.getPath() + '/' + childName; } - Resource child = getResourceInternal(path); + Resource child = getResourceInternal( ResourceUtil.normalize(path) ); if (child != null) { final String alias = getProperty(child, PROP_REDIRECT_INTERNAL); if (alias != null) { @@ -895,7 +896,7 @@ public class ResourceResolverImpl extend } else { aliasPath = parent.getPath() + '/' + aliasName; } - final Resource aliasedChild = getResourceInternal(aliasPath); + final Resource aliasedChild = getResourceInternal( ResourceUtil.normalize(aliasPath) ); logger.debug("getChildInternal: Found Resource {} with alias {} to use", aliasedChild, childName); return aliasedChild; } @@ -966,7 +967,7 @@ public class ResourceResolverImpl extend } private String mangleNamespaces(String absPath) { - if (factory.isMangleNamespacePrefixes() && absPath.contains(MANGLE_NAMESPACE_OUT_SUFFIX)) { + if (factory.isMangleNamespacePrefixes() && absPath != null && absPath.contains(MANGLE_NAMESPACE_OUT_SUFFIX)) { final Pattern p = Pattern.compile(MANGLE_NAMESPACE_OUT); final Matcher m = p.matcher(absPath); @@ -1164,4 +1165,11 @@ public class ResourceResolverImpl extend } return result; } + + /** + * @see org.apache.sling.api.resource.ResourceResolver#refresh() + */ + public void refresh() { + this.context.refresh(); + } } Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/console/ResourceResolverWebConsolePlugin.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/console/ResourceResolverWebConsolePlugin.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/console/ResourceResolverWebConsolePlugin.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/console/ResourceResolverWebConsolePlugin.java Thu Jul 4 04:41:34 2013 @@ -70,7 +70,8 @@ public class ResourceResolverWebConsoleP props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation"); props.put(Constants.SERVICE_PID, getClass().getName()); props.put("felix.webconsole.label", "jcrresolver"); - props.put("felix.webconsole.title", "Sling Resource Resolver"); + props.put("felix.webconsole.title", "Resource Resolver"); + props.put("felix.webconsole.category", "Sling"); props.put("felix.webconsole.configprinter.modes", "always"); service = context.registerService( Propchange: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/console/ResourceResolverWebConsolePlugin.java ('svn:mergeinfo' removed) Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverContext.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverContext.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverContext.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverContext.java Thu Jul 4 04:41:34 2013 @@ -25,8 +25,10 @@ import java.util.Set; import org.apache.sling.api.resource.DynamicResourceProvider; import org.apache.sling.api.resource.ModifyingResourceProvider; import org.apache.sling.api.resource.PersistenceException; +import org.apache.sling.api.resource.RefreshableResourceProvider; import org.apache.sling.api.resource.ResourceProvider; import org.apache.sling.api.resource.ResourceResolver; +import org.osgi.util.tracker.ServiceTracker; /** * This class keeps track of the used resource providers for a @@ -41,6 +43,9 @@ public class ResourceResolverContext { /** A set of all dynamic providers (for closing them later on) */ private final Set dynamicProviders = new HashSet(); + /** A set of all refreshable providers */ + private final Set refreshableProviders = new HashSet(); + /** A set of all modifying providers */ private final Set modifyingProviders = new HashSet(); @@ -51,13 +56,17 @@ public class ResourceResolverContext { * The original authentication information - this is used for cloning and lazy logins. */ private final Map originalAuthInfo; + + /** service tracker for ResourceAccessSecurity service */ + private final ServiceTracker resourceAccessSecurityTracker; /** * Create a new resource resolver context. */ - public ResourceResolverContext(final boolean isAdmin, final Map originalAuthInfo) { + public ResourceResolverContext(final boolean isAdmin, final Map originalAuthInfo, final ServiceTracker resourceAccessSecurityTracker) { this.isAdmin = isAdmin; this.originalAuthInfo = originalAuthInfo; + this.resourceAccessSecurityTracker = resourceAccessSecurityTracker; } /** @@ -87,6 +96,9 @@ public class ResourceResolverContext { if (provider instanceof ModifyingResourceProvider) { this.modifyingProviders.add((ModifyingResourceProvider) provider); } + if (provider instanceof RefreshableResourceProvider) { + this.refreshableProviders.add((RefreshableResourceProvider)provider); + } } /** @@ -121,6 +133,7 @@ public class ResourceResolverContext { } this.dynamicProviders.clear(); this.providers.clear(); + this.refreshableProviders.clear(); } /** @@ -152,4 +165,21 @@ public class ResourceResolverContext { } return false; } + + /** + * Refresh + */ + public void refresh() { + for(final RefreshableResourceProvider provider : this.refreshableProviders) { + provider.refresh(); + } + } + + /** + * get's the ServiceTracker of the ResourceAccessSecurity service + */ + public ServiceTracker getResourceAccessSecurityTracker () { + return resourceAccessSecurityTracker; + } + } Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/SortedProviderList.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/SortedProviderList.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/SortedProviderList.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/helper/SortedProviderList.java Thu Jul 4 04:41:34 2013 @@ -25,6 +25,7 @@ import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; +import org.apache.sling.api.resource.ResourceProvider; import org.apache.sling.resourceresolver.impl.tree.ProviderHandler; import org.apache.sling.resourceresolver.impl.tree.ResourceProviderFactoryHandler; import org.apache.sling.resourceresolver.impl.tree.ResourceProviderHandler; @@ -183,6 +184,25 @@ public class SortedProviderList { public void remove(final ResourceProviderFactoryHandler factory) { this.removeFromList(factory); } + + /** + * returns the ProviderHandler for a specific resource provider + */ + public ProviderHandler getProviderHandler ( ResourceResolverContext ctx, ResourceProvider resourceProvider ) + { + ProviderHandler returnValue = null; + final List list = new ArrayList(); + list.addAll(Arrays.asList(this.sortedList)); + final Iterator i = list.iterator(); + while ( i.hasNext() ) { + final Entry entry = i.next(); + if ( entry.handler.getResourceProvider(ctx).equals(resourceProvider) ) { + returnValue = entry.handler; + break; + } + } + return returnValue; + } private static final class Entry implements Comparable { Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntry.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntry.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntry.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntry.java Thu Jul 4 04:41:34 2013 @@ -27,6 +27,7 @@ import java.util.regex.Pattern; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ValueMap; import org.apache.sling.resourceresolver.impl.ResourceResolverImpl; +import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** @@ -38,6 +39,9 @@ import org.slf4j.LoggerFactory; */ public class MapEntry implements Comparable { + /** default log */ + private final Logger log = LoggerFactory.getLogger(getClass()); + private static final Pattern[] URL_WITH_PORT_MATCH = { Pattern.compile("http/([^/]+)(\\.[^\\d/]+)(/.*)?$"), Pattern.compile("https/([^/]+)(\\.[^\\d/]+)(/.*)?$") }; @@ -265,7 +269,11 @@ public class MapEntry implements Compara final String[] redirects = getRedirect(); final String[] results = new String[redirects.length]; for (int i = 0; i < redirects.length; i++) { - results[i] = m.replaceFirst(redirects[i]); + try{ + results[i] = m.replaceFirst(redirects[i]); + }catch(StringIndexOutOfBoundsException siob){ + log.debug("Exception while replacing, ignoring entry {} ",redirects[i],siob); + } } return results; } Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ProviderHandler.java Thu Jul 4 04:41:34 2013 @@ -29,9 +29,11 @@ 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.ResourceAccessSecurity; import org.apache.sling.commons.osgi.PropertiesUtil; import org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext; import org.osgi.framework.Constants; +import org.osgi.util.tracker.ServiceTracker; /** * The provider handler is the common base class for the @@ -54,6 +56,9 @@ public abstract class ProviderHandler im /** Owns roots? */ private final boolean ownsRoots; + + /** use ResourceAccessSecurity? */ + private final boolean useResourceAccessSecurity; /** * Create a new handler @@ -85,6 +90,7 @@ public abstract class ProviderHandler im this.roots = configuredRoots.toArray(new String[configuredRoots.size()]); } this.ownsRoots = PropertiesUtil.toBoolean(properties.get(ResourceProvider.OWNS_ROOTS), false); + this.useResourceAccessSecurity = PropertiesUtil.toBoolean(properties.get(ResourceProvider.USE_RESOURCE_ACCESS_SECURITY), false); final Set configuredLanguages = new HashSet(); final String[] languages = PropertiesUtil.toStringArray(properties.get(QueriableResourceProvider.LANGUAGES)); if ( languages != null) { @@ -103,6 +109,54 @@ public abstract class ProviderHandler im this.queryLanguages = configuredLanguages; } } + + /** + * applies resource access security if configured + */ + protected Resource getReadableResource ( final ResourceResolverContext ctx, Resource resource ) { + Resource returnValue = null; + + if (useResourceAccessSecurity && resource != null) { + ServiceTracker serviceTracker = ctx + .getResourceAccessSecurityTracker(); + if (serviceTracker != null) { + ResourceAccessSecurity resourceAccessSecurity = (ResourceAccessSecurity) serviceTracker + .getService(); + if (resourceAccessSecurity != null) { + returnValue = resourceAccessSecurity + .getReadableResource(resource); + } + } + } else { + returnValue = resource; + } + + return returnValue; + } + + /** + * applies resource access security if configured + */ + protected Iterator getReadableChildrenIterator ( final ResourceResolverContext ctx, Iterator childrenIterator ) { + Iterator returnValue = null; + if ( useResourceAccessSecurity && childrenIterator != null ) { + List childs = new ArrayList(); + while ( childrenIterator.hasNext() ) + { + Resource res = getReadableResource( ctx, childrenIterator.next() ); + if ( res != null ) + { + childs.add(res); + } + } + returnValue = childs.iterator(); + } + else { + returnValue = childrenIterator; + } + + return returnValue; + } /** * Return the service properties. Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderFactoryHandler.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderFactoryHandler.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderFactoryHandler.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderFactoryHandler.java Thu Jul 4 04:41:34 2013 @@ -104,7 +104,7 @@ public class ResourceProviderFactoryHand public Resource getResource(final ResourceResolverContext ctx, final ResourceResolver resourceResolver, final String path) { final ResourceProvider rp = this.getResourceProvider(ctx); if ( rp != null ) { - return rp.getResource(resourceResolver, path); + return getReadableResource(ctx, rp.getResource(resourceResolver, path) ); } return null; } @@ -115,7 +115,7 @@ public class ResourceProviderFactoryHand public Iterator listChildren(final ResourceResolverContext ctx, final Resource parent) { final ResourceProvider rp = this.getResourceProvider(ctx); if ( rp != null ) { - return rp.listChildren(parent); + return getReadableChildrenIterator( ctx, rp.listChildren(parent) ); } return null; } Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderHandler.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderHandler.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderHandler.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/ResourceProviderHandler.java Thu Jul 4 04:41:34 2013 @@ -47,14 +47,14 @@ public class ResourceProviderHandler ext * @see ResourceProvider#getResource(ResourceResolver, String) */ public Resource getResource(final ResourceResolverContext ctx, final ResourceResolver resourceResolver, final String path) { - return this.resourceProvider.getResource(resourceResolver, path); + return getReadableResource(ctx, this.resourceProvider.getResource(resourceResolver, path) ); } /** * @see ResourceProvider#listChildren(Resource) */ public Iterator listChildren(final ResourceResolverContext ctx, final Resource parent) { - return this.resourceProvider.listChildren(parent); + return getReadableChildrenIterator( ctx, this.resourceProvider.listChildren(parent) ); } /** Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/tree/RootResourceProviderEntry.java Thu Jul 4 04:41:34 2013 @@ -134,7 +134,9 @@ public class RootResourceProviderEntry e private Resource nextObject = this.seek(); private Iterator nextResourceIter; - + + private ProviderHandler actProviderHandler; + private Resource seek() { Resource result = null; if ( nextResourceIter == null || !nextResourceIter.hasNext() ) { @@ -142,12 +144,16 @@ public class RootResourceProviderEntry e while ( i.hasNext() && nextResourceIter == null ) { final QueriableResourceProvider adap = i.next(); nextResourceIter = adap.findResources(resolver, query, language); + actProviderHandler = queriableProviders.getProviderHandler(ctx, adap); } } if ( nextResourceIter != null ) { while ( nextResourceIter.hasNext() && result == null ) { result = nextResourceIter.next(); } + if ( actProviderHandler != null ) { + result = actProviderHandler.getReadableResource(ctx, result); + } if ( result == null ) { result = seek(); } Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java Thu Jul 4 04:41:34 2013 @@ -340,7 +340,7 @@ public class MockedResourceResolverImplT Dictionary properties = new Hashtable(); properties.put("resource.resolver.virtual", new String[] { "/:/" }); properties.put("resource.resolver.mapping", new String[] { "/:/", - "/content/:/", "/system/docroot/:/" }); + "/content/:/", "/system/docroot/:/", "/content.html-/$" }); properties.put("resource.resolver.allowDirect", true); properties.put("resource.resolver.searchpath", new String[] { "/apps", "/libs" }); @@ -478,6 +478,10 @@ public class MockedResourceResolverImplT // test path mapping without a request. path = resourceResolver.map("/factory/test"); Assert.assertEquals("/factory/test", path); + + buildResource("/content", EMPTY_RESOURCE_LIST, resourceResolver, factoryResourceProvider); + path = resourceResolver.map("/content.html"); + Assert.assertEquals("/content.html", path); } Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverImplTest.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverImplTest.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverImplTest.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverImplTest.java Thu Jul 4 04:41:34 2013 @@ -54,11 +54,11 @@ public class ResourceResolverImplTest { @Before public void setup() { resFac = new ResourceResolverFactoryImpl(new ResourceResolverFactoryActivator(), /* TODO: using Bundle */ null, null); - resResolver = new ResourceResolverImpl(resFac, new ResourceResolverContext(false, null)); + resResolver = new ResourceResolverImpl(resFac, new ResourceResolverContext(false, null, null)); } @Test public void testClose() throws Exception { - final ResourceResolver rr = new ResourceResolverImpl(resFac, new ResourceResolverContext(false, null)); + final ResourceResolver rr = new ResourceResolverImpl(resFac, new ResourceResolverContext(false, null, null)); assertTrue(rr.isLive()); rr.close(); assertFalse(rr.isLive()); @@ -355,7 +355,7 @@ public class ResourceResolverImplTest { } }, - new ResourceResolverContext(false, null)); + new ResourceResolverContext(false, null, null)); resolvers.add(resolver); // the resources to test @@ -391,7 +391,7 @@ public class ResourceResolverImplTest { } }, - new ResourceResolverContext(false, null)); + new ResourceResolverContext(false, null, null)); resolvers.add(resolver); final Resource r = new SyntheticResource(resolver, "/a", "a:b") { @Override Copied: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java (from r1499651, sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java) URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java?p2=sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java&p1=sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java&r1=1499651&r2=1499653&rev=1499653&view=diff ============================================================================== --- sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java Thu Jul 4 04:41:34 2013 @@ -35,20 +35,20 @@ import org.mockito.MockitoAnnotations; /** Test ResourceResolverImpl.mangleNamespaces methods */ public class ResourceResolverMangleNamespacesTest { private ResourceResolverImpl rr; - + @Mock private Session mockedSession; - + private Session activeSession; - + public static final String NS_PREFIX = "testNS"; public static final String NS_URL = "http://example.com/namespaces/testNS"; - - @Before + + @Before public void setup() throws RepositoryException { MockitoAnnotations.initMocks(this); activeSession = mockedSession; - + // Setup a ResourceResolverImpl with namespace mangling and unmangling final ResourceResolverFactoryActivator act = new ResourceResolverFactoryActivator() { @Override @@ -56,9 +56,9 @@ public class ResourceResolverMangleNames return true; } }; - + Mockito.when(mockedSession.getNamespacePrefix(NS_PREFIX)).thenReturn(NS_URL); - + final RootResourceProviderEntry rrpe = new RootResourceProviderEntry() { @Override @SuppressWarnings("unchecked") @@ -69,66 +69,66 @@ public class ResourceResolverMangleNames return super.adaptTo(ctx, type); } }; - - final ResourceResolverFactoryImpl fac = new ResourceResolverFactoryImpl(act) { + + final ResourceResolverFactoryImpl fac = new ResourceResolverFactoryImpl(act, null, null) { @Override public RootResourceProviderEntry getRootProviderEntry() { return rrpe; } }; - + rr = new ResourceResolverImpl(fac, new ResourceResolverContext(false, null, null)); } - - @Test + + @Test public void testUrlWithPath() { assertEquals("http://example.com/some/path", rr.map("http://example.com/some/path")); } - - @Test + + @Test public void testMangleHttp() { assertEquals("http://example.com/path/_with_colon", rr.map("http://example.com/path/with:colon")); } - - @Test + + @Test public void testUnmangleHttp() { final Resource r = rr.resolve(null, "http://example.com/path/_with_mangling"); assertEquals("/http://example.com/path/with:mangling", r.getPath()); } - - @Test + + @Test public void testUnmangleNoSession() { activeSession = null; final Resource r = rr.resolve(null, "http://example.com/path/_with_mangling"); assertEquals("/http://example.com/path/_with_mangling", r.getPath()); } - - @Test + + @Test public void testManglePath() { assertEquals("/example.com/path/_with_colon", rr.map("/example.com/path/with:colon")); } - - @Test + + @Test public void testUnmanglePath() { final Resource r = rr.resolve(null, "/example.com/path/_with_mangling"); assertEquals("/example.com/path/with:mangling", r.getPath()); } - - @Test + + @Test public void testUrlNoPath() { assertEquals("http://withSlash.com/", rr.map("http://withSlash.com/")); assertEquals("http://noSlash.com", rr.map("http://noSlash.com")); assertEquals("http://nosuffix", rr.map("http://nosuffix")); } - - @Test + + @Test public void testWeirdCases() { assertEquals("http://foo", rr.map("http://foo")); assertEquals("http://", rr.map("http://")); assertEquals("http:/", rr.map("http:/")); assertEquals("http:", rr.map("http:")); assertEquals("http", rr.map("http")); - + assertEquals("gopher://foo", rr.map("gopher://foo")); assertEquals("gopher://", rr.map("gopher://")); assertEquals("gopher:/", rr.map("gopher:/")); Modified: sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/helper/SortedProviderListTest.java URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/helper/SortedProviderListTest.java?rev=1499653&r1=1499652&r2=1499653&view=diff ============================================================================== --- sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/helper/SortedProviderListTest.java (original) +++ sling/whiteboard/fmeschbe/deprecate_login_administrative/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/helper/SortedProviderListTest.java Thu Jul 4 04:41:34 2013 @@ -99,7 +99,7 @@ public class SortedProviderListTest { final AdaptableResourceProviderImpl rp3 = new AdaptableResourceProviderImpl(new String[] {"/hello"}, 3L); final ResourceProviderImpl rp4 = new ResourceProviderImpl(new String[] {"/you"}, 4L); - final ResourceResolverContext ctx = new ResourceResolverContext(false, null); + final ResourceResolverContext ctx = new ResourceResolverContext(false, null, null); final SortedProviderList spl = new SortedProviderList(Adaptable.class); check(spl, ctx); @@ -131,7 +131,7 @@ public class SortedProviderListTest { final AdaptableResourceProviderImpl rp4 = new AdaptableResourceProviderImpl(new String[] {"/a/a"}, 4L); final AdaptableResourceProviderImpl rp5 = new AdaptableResourceProviderImpl(new String[] {"/all/or/nothing"}, 5L); - final ResourceResolverContext ctx = new ResourceResolverContext(false, null); + final ResourceResolverContext ctx = new ResourceResolverContext(false, null, null); final SortedProviderList spl = new SortedProviderList(Adaptable.class); check(spl, ctx);