This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.security-1.0.10 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-security.git
commit 23166c52b4be4085c2142f61feaad9bd7ed32a64 Author: Justin Edelson <[email protected]> AuthorDate: Wed Aug 31 16:00:52 2011 +0000 SLING-2200 - adding a configuration printer to the referrer filter git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/security@1163675 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/sling/security/impl/ReferrerFilter.java | 45 ++++++++++++++++++++++ .../sling/security/impl/ReferrerFilterTest.java | 13 +++++-- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/sling/security/impl/ReferrerFilter.java b/src/main/java/org/apache/sling/security/impl/ReferrerFilter.java index 0302ac7..afe33ee 100644 --- a/src/main/java/org/apache/sling/security/impl/ReferrerFilter.java +++ b/src/main/java/org/apache/sling/security/impl/ReferrerFilter.java @@ -17,6 +17,7 @@ package org.apache.sling.security.impl; import java.io.IOException; +import java.io.PrintWriter; import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; @@ -25,8 +26,10 @@ import java.net.NetworkInterface; import java.net.SocketException; import java.net.URL; import java.util.ArrayList; +import java.util.Dictionary; import java.util.Enumeration; import java.util.HashSet; +import java.util.Hashtable; import java.util.List; import java.util.Set; @@ -44,6 +47,9 @@ 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.commons.osgi.PropertiesUtil; +import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; +import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.ComponentContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -81,6 +87,8 @@ public class ReferrerFilter implements Filter { /** Methods to be filtered. */ private String[] filterMethods; + private ServiceRegistration configPrinterRegistration; + /** * Create a default list of referrers */ @@ -187,8 +195,28 @@ public class ReferrerFilter implements Filter { filterMethods[i] = filterMethods[i].toUpperCase(); } } + this.configPrinterRegistration = registerConfigPrinter(ctx.getBundleContext()); + } + + protected void deactivate() { + this.configPrinterRegistration.unregister(); } + private ServiceRegistration registerConfigPrinter(BundleContext bundleContext) { + final ConfigurationPrinter cfgPrinter = new ConfigurationPrinter(); + final Dictionary<String, String> serviceProps = new Hashtable<String, String>(); + serviceProps.put(Constants.SERVICE_DESCRIPTION, + "Apache Sling Referrer Filter Configuration Printer"); + serviceProps.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation"); + serviceProps.put("felix.webconsole.label", "slingreferrerfilter"); + serviceProps.put("felix.webconsole.title", "Sling Referrer Filter"); + serviceProps.put("felix.webconsole.configprinter.modes", "always"); + + return bundleContext.registerService(Object.class.getName(), + cfgPrinter, serviceProps); + } + + private boolean isModification(final HttpServletRequest req) { final String method = req.getMethod(); if ( filterMethods != null ) { @@ -317,4 +345,21 @@ public class ReferrerFilter implements Filter { public void destroy() { // nothing to do } + + public class ConfigurationPrinter { + + /** + * Print out the allowedReferrers + * @see org.apache.felix.webconsole.ConfigurationPrinter#printConfiguration(java.io.PrintWriter) + */ + @SuppressWarnings("unused") + public void printConfiguration(PrintWriter pw) { + pw.println("Current Apache Sling Referrer Filter Allowed Referrers:"); + pw.println(); + for (final URL url : allowedReferrers) { + pw.println(url.toString()); + } + } + + } } diff --git a/src/test/java/org/apache/sling/security/impl/ReferrerFilterTest.java b/src/test/java/org/apache/sling/security/impl/ReferrerFilterTest.java index d1a52da..136cb28 100644 --- a/src/test/java/org/apache/sling/security/impl/ReferrerFilterTest.java +++ b/src/test/java/org/apache/sling/security/impl/ReferrerFilterTest.java @@ -16,8 +16,8 @@ */ package org.apache.sling.security.impl; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; +import static org.mockito.Matchers.*; import java.util.Dictionary; import java.util.Hashtable; @@ -27,6 +27,8 @@ import javax.servlet.http.HttpServletRequest; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.ComponentContext; public class ReferrerFilterTest { @@ -36,8 +38,13 @@ public class ReferrerFilterTest { @Before public void setup() { filter = new ReferrerFilter(); final ComponentContext ctx = mock(ComponentContext.class); + final BundleContext bundleCtx = mock(BundleContext.class); + final ServiceRegistration reg = mock(ServiceRegistration.class); final Dictionary<String, Object> props = new Hashtable<String, Object>(); - when(ctx.getProperties()).thenReturn(props); + doReturn(props).when(ctx).getProperties(); + doReturn(bundleCtx).when(ctx).getBundleContext(); + doReturn(reg).when(bundleCtx).registerService(any(String[].class), any(), any(Dictionary.class)); + doNothing().when(reg).unregister(); filter.activate(ctx); } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
