This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.security-1.1.4 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-security.git
commit e2f9262efed228969153aa45f97cb5f266e784e1 Author: Konrad Windszus <[email protected]> AuthorDate: Thu Nov 24 14:30:41 2016 +0000 SLING-6316 clarify description of OSGi configuration of the ContentDispositionFilter change from Felix DS to OSGi annotations git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/security@1771152 13f79535-47bb-0310-9956-ffa450edef68 --- .../security/impl/ContentDispositionFilter.java | 51 +--- .../ContentDispositionFilterConfiguration.java | 38 +++ .../impl/ContentDispositionFilterTest.java | 320 ++++++--------------- 3 files changed, 142 insertions(+), 267 deletions(-) diff --git a/src/main/java/org/apache/sling/security/impl/ContentDispositionFilter.java b/src/main/java/org/apache/sling/security/impl/ContentDispositionFilter.java index ca4c92f..a0f148b 100644 --- a/src/main/java/org/apache/sling/security/impl/ContentDispositionFilter.java +++ b/src/main/java/org/apache/sling/security/impl/ContentDispositionFilter.java @@ -33,53 +33,24 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Properties; -import org.apache.felix.scr.annotations.Property; -import org.apache.felix.scr.annotations.PropertyUnbounded; -import org.apache.felix.scr.annotations.Service; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ValueMap; import org.apache.sling.api.wrappers.SlingHttpServletResponseWrapper; -import org.apache.sling.commons.osgi.PropertiesUtil; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.metatype.annotations.Designate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@Component(metatype = true, -description = "Request filter adding Content Disposition attachment for certain paths/content types", -label=" Apache Sling Content Disposition Filter") -@Service(value = Filter.class) -@Properties({ - @Property(name = "sling.filter.scope", value = { "request" }, propertyPrivate = true), - @Property(name = "service.ranking", intValue = -25000, propertyPrivate = true) }) +@Component(property={"sling.filter.scope=request", "service.ranking:Integer=25000"}) +@Designate(ocd=ContentDispositionFilterConfiguration.class) public class ContentDispositionFilter implements Filter { /** Logger. */ private final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Property(label = "Content Disposition Paths", - description = "These paths are checked by the filter. "+ - "Each entry is of the form 'path [ \":\" CSV of excluded content types ]'. " + - "Invalid entries are logged and ignored." - , unbounded = PropertyUnbounded.ARRAY, value = { "" }) - private static final String PROP_CONTENT_DISPOSTION_PATHS = "sling.content.disposition.paths"; - - @Property(label = "Content Disposition Excluded Paths", - description = "These paths are excluded by the filter. "+ - "Each entry is of the form 'path'. " - , unbounded = PropertyUnbounded.ARRAY, value = { "" }) - private static final String PROP_CONTENT_DISPOSTION_EXCLUDED_PATHS = "sling.content.disposition.excluded.paths"; - - private static final boolean DEFAULT_ENABLE_CONTENT_DISPOSTION_ALL_PATHS = false; - @Property(boolValue = DEFAULT_ENABLE_CONTENT_DISPOSTION_ALL_PATHS , - label = "Enable Content Disposition for all paths", - description ="This flag controls whether to enable" + - " Content Disposition for all paths, except for the excluded paths defined by sling.content.disposition.excluded.paths") - private static final String PROP_ENABLE_CONTENT_DISPOSTION_ALL_PATHS = "sling.content.disposition.all.paths"; - /** * Set of paths */ @@ -97,14 +68,14 @@ public class ContentDispositionFilter implements Filter { private boolean enableContentDispositionAllPaths; @Activate - private void activate(final Map<String, Object> props) { - String[] contentDispostionProps = PropertiesUtil.toStringArray(props.get(PROP_CONTENT_DISPOSTION_PATHS)); + private void activate(ContentDispositionFilterConfiguration configuration) { + String[] contentDispositionPathsConfiguredValue = configuration.sling_content_disposition_paths(); Set<String> paths = new HashSet<String>(); List<String> pfxs = new ArrayList<String>(); Map<String, Set<String>> contentTypesMap = new HashMap<String, Set<String>>(); - for (String path : contentDispostionProps) { + for (String path : contentDispositionPathsConfiguredValue) { path = path.trim(); if (path.length() > 0) { int idx = path.indexOf('*'); @@ -112,7 +83,7 @@ public class ContentDispositionFilter implements Filter { if (colonIdx > -1 && colonIdx < idx) { // ':' in paths is not allowed - logger.info("':' in paths is not allowed."); + logger.info("wildcard ('*') in content type is not allowed, but found content type with value '{}'", path.substring(colonIdx)); } else { String p = null; if (idx >= 0) { @@ -145,10 +116,10 @@ public class ContentDispositionFilter implements Filter { contentDispositionPathsPfx = pfxs.toArray(new String[pfxs.size()]); contentTypesMapping = contentTypesMap.isEmpty()?Collections.<String, Set<String>>emptyMap(): contentTypesMap; - enableContentDispositionAllPaths = PropertiesUtil.toBoolean(props.get(PROP_ENABLE_CONTENT_DISPOSTION_ALL_PATHS),DEFAULT_ENABLE_CONTENT_DISPOSTION_ALL_PATHS); + enableContentDispositionAllPaths = configuration.sling_content_disposition_all_paths(); - String[] contentDispostionExcludedPathsArray = PropertiesUtil.toStringArray(props.get(PROP_CONTENT_DISPOSTION_EXCLUDED_PATHS)); + String[] contentDispostionExcludedPathsArray = configuration.sling_content_disposition_excluded_paths(); contentDispositionExcludedPaths = new HashSet<String>(Arrays.asList(contentDispostionExcludedPathsArray)); diff --git a/src/main/java/org/apache/sling/security/impl/ContentDispositionFilterConfiguration.java b/src/main/java/org/apache/sling/security/impl/ContentDispositionFilterConfiguration.java new file mode 100644 index 0000000..eeb7f9b --- /dev/null +++ b/src/main/java/org/apache/sling/security/impl/ContentDispositionFilterConfiguration.java @@ -0,0 +1,38 @@ +/* + * 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.security.impl; + +import org.osgi.service.metatype.annotations.AttributeDefinition; +import org.osgi.service.metatype.annotations.ObjectClassDefinition; + +@ObjectClassDefinition(name="Apache Sling Content Disposition Filter", description="Request filter adding Content Disposition header with value 'attachment' for certain paths/content types. Independent of the configuration only resource paths are covered which contain a property named 'jcr:data' or 'jcr:content\\jcr:data'.") +public @interface ContentDispositionFilterConfiguration { + + @AttributeDefinition(name="Included Resource Paths & Content Types", description="These resource paths are covered by the filter. "+ + "Each entry is of the form '<path> [ : <excluded content type> {,<excluded content type>} ]'. " + + "Invalid entries are logged and ignored. <path> must be an absolute path and may contain a wildcard ('*') at the end, to match every resource path with the given path prefix.") + String[] sling_content_disposition_paths() default {}; + + @AttributeDefinition(name="Excluded Resource Paths", description="These resource paths are excluded from the filter. "+ + "Each resource path must be given as absolute and fully qualified path. Prefix matching/wildcards are not supported.") + String[] sling_content_disposition_excluded_paths() default {}; + + @AttributeDefinition(name="Enable For All Resource Paths", description="This flag controls whether to enable" + + " this filter for all paths, except for the excluded paths defined by sling.content.disposition.excluded.paths. Setting this to 'true' leads to ignoring 'sling.content.disposition.path'.") + boolean sling_content_disposition_all_paths() default false; + +} diff --git a/src/test/java/org/apache/sling/security/impl/ContentDispositionFilterTest.java b/src/test/java/org/apache/sling/security/impl/ContentDispositionFilterTest.java index ccb1406..e614879 100644 --- a/src/test/java/org/apache/sling/security/impl/ContentDispositionFilterTest.java +++ b/src/test/java/org/apache/sling/security/impl/ContentDispositionFilterTest.java @@ -16,7 +16,7 @@ */ package org.apache.sling.security.impl; -import java.util.HashMap; +import java.lang.annotation.Annotation; import java.util.Map; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; @@ -30,6 +30,7 @@ import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.integration.junit4.JUnit4Mockery; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import junitx.util.PrivateAccessor; @@ -43,15 +44,67 @@ public class ContentDispositionFilterTest { private static final String JCR_CONTENT_LEAF = "jcr:content"; + @Before + public void setUp() { + contentDispositionFilter = new ContentDispositionFilter(); + } + + /** + * Implementation of the annotation class used for the configuration of the ContentDispositionFilter. + * Unfortunately there is no way to hide the compiler warning: http://stackoverflow.com/a/13261789/5155923 + */ + private static final class Configuration implements ContentDispositionFilterConfiguration { + + public Configuration(String[] paths, String[] excludedPaths, boolean enableForAllPaths) { + super(); + this.paths = paths; + this.excludedPaths = excludedPaths; + this.enableForAllPaths = enableForAllPaths; + } + + private final String paths[]; + private final String excludedPaths[]; + private final boolean enableForAllPaths; + + @Override + public Class<? extends Annotation> annotationType() { + return ContentDispositionFilterConfiguration.class; + } + + @Override + public String[] sling_content_disposition_paths() { + return paths; + } + + @Override + public String[] sling_content_disposition_excluded_paths() { + return excludedPaths; + } + + @Override + public boolean sling_content_disposition_all_paths() { + return enableForAllPaths; + } + } + + private void callActivateWithConfiguration(String[] paths) throws Throwable { + callActivateWithConfiguration(paths, new String[]{}); + } + + private void callActivateWithConfiguration(String[] paths, String[] excludedPaths) throws Throwable { + callActivateWithConfiguration(paths, excludedPaths, false); + } + + + private void callActivateWithConfiguration(String[] paths, String[] excludedPaths, boolean enableForAllPaths) throws Throwable { + ContentDispositionFilterConfiguration configuration = new Configuration(paths, excludedPaths, enableForAllPaths); + PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{ContentDispositionFilterConfiguration.class},new Object[]{configuration}); + } + @SuppressWarnings("unchecked") @Test public void test_activator1() throws Throwable{ - contentDispositionFilter = new ContentDispositionFilter(); - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String []{""}); Set<String> contentDispositionPaths = ( Set<String> ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionPaths"); Assert.assertEquals(1, contentDispositionPaths.size()); String[] contentDispositionPathsPfx = ( String[] ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionPathsPfx"); @@ -63,13 +116,7 @@ public class ContentDispositionFilterTest { @SuppressWarnings("unchecked") @Test public void test_activator2() throws Throwable{ - contentDispositionFilter = new ContentDispositionFilter(); - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated/*"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/content/usergenerated/*"}, new String []{""}); Set<String> contentDispositionPaths = ( Set<String> ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionPaths"); Assert.assertEquals(0, contentDispositionPaths.size()); String[] contentDispositionPathsPfx = ( String[] ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionPathsPfx"); @@ -81,13 +128,7 @@ public class ContentDispositionFilterTest { @SuppressWarnings("unchecked") @Test public void test_activator3() throws Throwable{ - contentDispositionFilter = new ContentDispositionFilter(); - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/libs", "/content/usergenerated/*"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/libs", "/content/usergenerated/*"}, new String[]{""}); Set<String> contentDispositionPaths = ( Set<String> ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionPaths"); Assert.assertEquals(1, contentDispositionPaths.size()); String[] contentDispositionPathsPfx = ( String[] ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionPathsPfx"); @@ -99,13 +140,7 @@ public class ContentDispositionFilterTest { @SuppressWarnings("unchecked") @Test public void test_activator5() throws Throwable{ - contentDispositionFilter = new ContentDispositionFilter(); - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"*"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"*"}, new String[]{""}); Set<String> contentDispositionPaths = ( Set<String> ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionPaths"); Assert.assertEquals(0, contentDispositionPaths.size()); String[] contentDispositionPathsPfx = ( String[] ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionPathsPfx"); @@ -117,13 +152,7 @@ public class ContentDispositionFilterTest { @SuppressWarnings("unchecked") @Test public void test_activator6() throws Throwable{ - contentDispositionFilter = new ContentDispositionFilter(); - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/libs:*"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/libs:*"}, new String[]{""}); Set<String> contentDispositionPaths = ( Set<String> ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionPaths"); Assert.assertEquals(0, contentDispositionPaths.size()); String[] contentDispositionPathsPfx = ( String[] ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionPathsPfx"); @@ -135,13 +164,7 @@ public class ContentDispositionFilterTest { @SuppressWarnings("unchecked") @Test public void test_activator7() throws Throwable{ - contentDispositionFilter = new ContentDispositionFilter(); - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/libs:text/html,text/plain","/content/usergenerated/*:image/jpeg"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/libs:text/html,text/plain","/content/usergenerated/*:image/jpeg"}, new String[]{""}); Set<String> contentDispositionPaths = ( Set<String> ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionPaths"); Assert.assertEquals(1, contentDispositionPaths.size()); String[] contentDispositionPathsPfx = ( String[] ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionPathsPfx"); @@ -158,29 +181,19 @@ public class ContentDispositionFilterTest { userGeneratedMapping.contains("image/jpeg"); } - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") @Test public void test_activator8() throws Throwable{ - contentDispositionFilter = new ContentDispositionFilter(); - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/libs:text/html,text/plain","/content/usergenerated/*:image/jpeg"}); - props.put("sling.content.disposition.excluded.paths", new String []{}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/libs:text/html,text/plain","/content/usergenerated/*:image/jpeg"}, new String[]{}); + Set<String> contentDispositionExcludedPaths = ( Set<String> ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionExcludedPaths"); Assert.assertEquals(0, contentDispositionExcludedPaths.size()); - } - + } + @SuppressWarnings("unchecked") @Test public void test_activator9() throws Throwable{ - contentDispositionFilter = new ContentDispositionFilter(); - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/libs:text/html,text/plain","/content/usergenerated/*:image/jpeg"}); - props.put("sling.content.disposition.excluded.paths", new String []{"/content", "/libs"}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/libs:text/html,text/plain","/content/usergenerated/*:image/jpeg"}, new String[]{"/content", "/libs"}); Set<String> contentDispositionExcludedPaths = ( Set<String> ) PrivateAccessor.getField(contentDispositionFilter, "contentDispositionExcludedPaths"); Assert.assertEquals(2, contentDispositionExcludedPaths.size()); @@ -210,15 +223,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletRequest request = context.mock(SlingHttpServletRequest.class); final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); - - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{""}); context.checking(new Expectations() { { @@ -247,14 +252,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletRequest request = context.mock(SlingHttpServletRequest.class); final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{""}); context.checking(new Expectations() { { @@ -283,14 +281,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{""}); final AtomicInteger counter = new AtomicInteger(); @@ -331,14 +322,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletRequest request = context.mock(SlingHttpServletRequest.class); final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated/*"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/content/usergenerated/*"}, new String[]{""}); context.checking(new Expectations() { { @@ -367,13 +351,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated/*"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/content/usergenerated/*"}, new String[]{""}); final AtomicInteger counter = new AtomicInteger(); @@ -415,13 +393,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated/*"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/content/usergenerated/*"}, new String[]{""}); final AtomicInteger counter = new AtomicInteger(); @@ -462,14 +434,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletRequest request = context.mock(SlingHttpServletRequest.class); final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated:text/html,text/plain"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/content/usergenerated:text/html,text/plain"}, new String[]{""}); context.checking(new Expectations() { { @@ -498,14 +463,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletRequest request = context.mock(SlingHttpServletRequest.class); final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated:text/html,text/plain"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/content/usergenerated:text/html,text/plain"}, new String[]{""}); context.checking(new Expectations() { { @@ -533,14 +491,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletRequest request = context.mock(SlingHttpServletRequest.class); final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated:text/html,text/plain"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/content/usergenerated:text/html,text/plain"}, new String[]{""}); context.checking(new Expectations() { { @@ -570,12 +521,7 @@ public class ContentDispositionFilterTest { final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated:text/html,text/plain"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/content/usergenerated:text/html,text/plain"}, new String[]{""}); final AtomicInteger counter = new AtomicInteger(); @@ -616,14 +562,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletRequest request = context.mock(SlingHttpServletRequest.class); final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated/*:text/html,text/plain"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/content/usergenerated/*:text/html,text/plain"}, new String[]{""}); context.checking(new Expectations() { { @@ -652,14 +591,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletRequest request = context.mock(SlingHttpServletRequest.class); final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated/*:text/html,text/plain"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/content/usergenerated/*:text/html,text/plain"}, new String[]{""}); context.checking(new Expectations() { { @@ -687,14 +619,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletRequest request = context.mock(SlingHttpServletRequest.class); final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated/*:text/html,text/plain"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/content/usergenerated/*:text/html,text/plain"}, new String[]{""}); context.checking(new Expectations() { { @@ -723,13 +648,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated/*:text/html,text/plain"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/content/usergenerated/*:text/html,text/plain"}, new String[]{""}); final AtomicInteger counter = new AtomicInteger(); @@ -775,13 +694,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{""}); final AtomicInteger counter = new AtomicInteger(); @@ -830,13 +743,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{""}); final AtomicInteger counter = new AtomicInteger(); @@ -887,13 +794,7 @@ public class ContentDispositionFilterTest { final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - props.put("sling.content.disposition.all.paths", false); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{""}, false); final AtomicInteger counter = new AtomicInteger(); @@ -935,21 +836,13 @@ public class ContentDispositionFilterTest { Assert.assertEquals(0, counter.intValue()); } - @Test public void test_doFilter18() throws Throwable{ final SlingHttpServletRequest request = context.mock(SlingHttpServletRequest.class); final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated"}); - props.put("sling.content.disposition.excluded.paths", new String []{""}); - props.put("sling.content.disposition.all.paths", true); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{""}, true); final AtomicInteger counter = new AtomicInteger(); @@ -997,14 +890,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated"}); - props.put("sling.content.disposition.excluded.paths", new String []{"/content"}); - props.put("sling.content.disposition.all.paths", true); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{"/content"}, true); final AtomicInteger counter = new AtomicInteger(); @@ -1052,14 +938,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated"}); - props.put("sling.content.disposition.excluded.paths", new String []{"/content/other"}); - props.put("sling.content.disposition.all.paths", true); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{"/content/other"}, true); final AtomicInteger counter = new AtomicInteger(); @@ -1107,14 +986,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated"}); - props.put("sling.content.disposition.excluded.paths", new String []{"/content"}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); - + callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{"/content"}); final AtomicInteger counter = new AtomicInteger(); @@ -1156,13 +1028,7 @@ public class ContentDispositionFilterTest { final SlingHttpServletResponse response = context.mock(SlingHttpServletResponse.class); final Resource resource = context.mock(Resource.class, "resource" ); final ValueMap properties = context.mock(ValueMap.class); - contentDispositionFilter = new ContentDispositionFilter(); - - final Map<String, Object> props = new HashMap<String, Object>(); - props.put("sling.content.disposition.paths", new String []{"/content/usergenerated"}); - props.put("sling.content.disposition.excluded.paths", new String []{"/content/usergenerated"}); - - PrivateAccessor.invoke(contentDispositionFilter,"activate", new Class[]{Map.class},new Object[]{props}); + callActivateWithConfiguration(new String[]{"/content/usergenerated"}, new String[]{"/content/usergenerated"}); final AtomicInteger counter = new AtomicInteger(); context.checking(new Expectations() { -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
