This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git

commit 3186525c06155185ebb24a29a53300c54eb7936a
Author: Carsten Ziegeler <cziege...@apache.org>
AuthorDate: Thu Sep 7 07:01:11 2023 +0200

    FELIX-6650 : Support id for SecurityProvider
---
 webconsole/pom.xml                                 |  2 +-
 .../webconsole/internal/servlet/OsgiManager.java   |  4 +---
 .../felix/webconsole/spi/SecurityProvider.java     |  7 +++++++
 .../apache/felix/webconsole/spi/package-info.java  |  2 +-
 .../servlet/OsgiManagerHttpContextTest.java        | 16 +++++++--------
 .../internal/servlet/OsgiManagerTest.java          | 24 +++++++++++-----------
 6 files changed, 30 insertions(+), 25 deletions(-)

diff --git a/webconsole/pom.xml b/webconsole/pom.xml
index 4b7e7aa4d1..e44f6aafb4 100644
--- a/webconsole/pom.xml
+++ b/webconsole/pom.xml
@@ -362,7 +362,7 @@
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
-            <version>3.0.1</version>
+            <version>3.1.0</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
diff --git 
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
 
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
index ebfaf00e25..6d1e3cd0d9 100644
--- 
a/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
+++ 
b/webconsole/src/main/java/org/apache/felix/webconsole/internal/servlet/OsgiManager.java
@@ -145,8 +145,6 @@ public class OsgiManager extends HttpServlet {
 
     static final String FRAMEWORK_PROP_SECURITY_PROVIDERS = 
"felix.webconsole.security.providers";
 
-    public static final String SECURITY_PROVIDER_PROPERTY_NAME = 
"webconsole.security.provider.id";
-
     static final String PROP_MANAGER_ROOT = "manager.root";
 
     static final String PROP_DEFAULT_RENDER = "default.render";
@@ -1102,7 +1100,7 @@ public class OsgiManager extends HttpServlet {
         public SecurityProvider 
addingService(ServiceReference<SecurityProvider> reference) {
             final SecurityProvider provider = 
bundleContext.getService(reference);
             if (provider != null) {
-                final Object nameObj = 
reference.getProperty(SECURITY_PROVIDER_PROPERTY_NAME);
+                final Object nameObj = 
reference.getProperty(SecurityProvider.PROPERTY_ID);
                 if (nameObj instanceof String) {
                     final String name = (String) nameObj;
                     final Long id = (Long) 
reference.getProperty(Constants.SERVICE_ID);
diff --git 
a/webconsole/src/main/java/org/apache/felix/webconsole/spi/SecurityProvider.java
 
b/webconsole/src/main/java/org/apache/felix/webconsole/spi/SecurityProvider.java
index 2546aae0ea..b6d113dc1e 100644
--- 
a/webconsole/src/main/java/org/apache/felix/webconsole/spi/SecurityProvider.java
+++ 
b/webconsole/src/main/java/org/apache/felix/webconsole/spi/SecurityProvider.java
@@ -36,6 +36,13 @@ import org.osgi.annotation.versioning.ConsumerType;
 @ConsumerType
 public interface SecurityProvider {
 
+    /**
+     * Security providers can be registered with an optional id which can be 
used
+     * in the configuration of the webconsole to require this provider to be 
available.
+     * @since 1.3.0
+     */
+    String PROPERTY_ID = "webconsole.security.provider.id";
+
     /**
      * Checks whether the authenticated user has the given role permission.
      *
diff --git 
a/webconsole/src/main/java/org/apache/felix/webconsole/spi/package-info.java 
b/webconsole/src/main/java/org/apache/felix/webconsole/spi/package-info.java
index 966e63eb77..a597c548bd 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/spi/package-info.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/spi/package-info.java
@@ -16,6 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-@org.osgi.annotation.versioning.Version("1.2.0")
+@org.osgi.annotation.versioning.Version("1.3.0")
 package org.apache.felix.webconsole.spi;
 
diff --git 
a/webconsole/src/test/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContextTest.java
 
b/webconsole/src/test/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContextTest.java
index 6b9a6c7848..c8b17a9c7c 100644
--- 
a/webconsole/src/test/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContextTest.java
+++ 
b/webconsole/src/test/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerHttpContextTest.java
@@ -18,7 +18,7 @@
  */
 package org.apache.felix.webconsole.internal.servlet;
 
-import org.apache.felix.webconsole.WebConsoleSecurityProvider;
+import org.apache.felix.webconsole.spi.SecurityProvider;
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.osgi.framework.Bundle;
@@ -33,17 +33,17 @@ public class OsgiManagerHttpContextTest {
     public void testAuthenticate() throws Exception {
         BundleContext bc = Mockito.mock(BundleContext.class);
         Bundle bundle = Mockito.mock(Bundle.class);
-        OsgiManagerHttpContext ctx = new OsgiManagerHttpContext(bundle, null, 
"blah");
+        OsgiManagerHttpContext ctx = new OsgiManagerHttpContext(bundle, null);
 
         Method authenticateMethod = 
OsgiManagerHttpContext.class.getDeclaredMethod(
-                "authenticate", new Class [] 
{WebConsoleSecurityProvider.class, String.class, byte[].class});
+                "authenticate", new Class [] {SecurityProvider.class, 
String.class, byte[].class});
         authenticateMethod.setAccessible(true);
 
         BasicWebConsoleSecurityProvider lastResortSp = new 
BasicWebConsoleSecurityProvider(bc, "foo", "bar", "blah");
         assertEquals(true, authenticateMethod.invoke(ctx, lastResortSp, "foo", 
"bar".getBytes()));
         assertEquals(false, authenticateMethod.invoke(ctx, lastResortSp, 
"foo", "blah".getBytes()));
 
-        WebConsoleSecurityProvider sp = new TestSecurityProvider();
+        SecurityProvider sp = new TestSecurityProvider();
         assertEquals(true, authenticateMethod.invoke(ctx, sp, "xxx", 
"yyy".getBytes()));
         assertEquals("The default username and password should not be accepted 
with security provider",
                 false, authenticateMethod.invoke(ctx, sp, "foo", 
"bar".getBytes()));
@@ -55,10 +55,10 @@ public class OsgiManagerHttpContextTest {
         
Mockito.when(bc.getProperty(OsgiManager.FRAMEWORK_PROP_SECURITY_PROVIDERS)).thenReturn("a");
 
         Bundle bundle = Mockito.mock(Bundle.class);
-        OsgiManagerHttpContext ctx = new OsgiManagerHttpContext(bundle, null, 
"blah");
+        OsgiManagerHttpContext ctx = new OsgiManagerHttpContext(bundle, null);
 
         Method authenticateMethod = 
OsgiManagerHttpContext.class.getDeclaredMethod(
-                "authenticate", new Class [] 
{WebConsoleSecurityProvider.class, String.class, byte[].class});
+                "authenticate", new Class [] {SecurityProvider.class, 
String.class, byte[].class});
         authenticateMethod.setAccessible(true);
 
         assertEquals("A required security provider is configured, logging in 
using "
@@ -67,12 +67,12 @@ public class OsgiManagerHttpContextTest {
         assertEquals(false, authenticateMethod.invoke(ctx, null, "foo", 
"blah".getBytes()));
         assertEquals(false, authenticateMethod.invoke(ctx, null, "blah", 
"bar".getBytes()));
 
-        WebConsoleSecurityProvider sp = new TestSecurityProvider();
+        SecurityProvider sp = new TestSecurityProvider();
         assertEquals(true, authenticateMethod.invoke(ctx, sp, "xxx", 
"yyy".getBytes()));
         assertEquals(false, authenticateMethod.invoke(ctx, sp, "foo", 
"bar".getBytes()));
     }
 
-    private static class TestSecurityProvider implements 
WebConsoleSecurityProvider {
+    private static class TestSecurityProvider implements SecurityProvider {
         @Override
         public Object authenticate(String username, String password) {
             if ("xxx".equals(username) && "yyy".equals(password))
diff --git 
a/webconsole/src/test/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerTest.java
 
b/webconsole/src/test/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerTest.java
index 99ca52fdad..9eea9e8102 100644
--- 
a/webconsole/src/test/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerTest.java
+++ 
b/webconsole/src/test/java/org/apache/felix/webconsole/internal/servlet/OsgiManagerTest.java
@@ -37,7 +37,7 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import javax.servlet.Servlet;
 
-import org.apache.felix.webconsole.WebConsoleSecurityProvider;
+import org.apache.felix.webconsole.spi.SecurityProvider;
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
@@ -50,7 +50,7 @@ import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.http.context.ServletContextHelper;
+import org.osgi.service.servlet.context.ServletContextHelper;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
 
 public class OsgiManagerTest {
@@ -90,9 +90,9 @@ public class OsgiManagerTest {
         assertEquals(0, updateCalled.size());
 
         ServiceReference sref2 = Mockito.mock(ServiceReference.class);
-        
Mockito.when(sref2.getProperty(OsgiManager.SECURITY_PROVIDER_PROPERTY_NAME)).thenReturn("xyz");
+        
Mockito.when(sref2.getProperty(SecurityProvider.PROPERTY_ID)).thenReturn("xyz");
         Mockito.when(sref2.getProperty(Constants.SERVICE_ID)).thenReturn(1L);
-        
Mockito.when(bc.getService(sref2)).thenReturn(Mockito.mock(WebConsoleSecurityProvider.class));
+        
Mockito.when(bc.getService(sref2)).thenReturn(Mockito.mock(SecurityProvider.class));
         stc.addingService(sref2);
         assertEquals(Collections.singleton("xyz"), 
mgr.registeredSecurityProviders);
         assertEquals(1, updateCalled.size());
@@ -111,14 +111,14 @@ public class OsgiManagerTest {
             }
         };
         ServiceReference sref1 = Mockito.mock(ServiceReference.class);
-        
Mockito.when(sref1.getProperty(OsgiManager.SECURITY_PROVIDER_PROPERTY_NAME)).thenReturn("abc");
+        
Mockito.when(sref1.getProperty(SecurityProvider.PROPERTY_ID)).thenReturn("abc");
         Mockito.when(sref1.getProperty(Constants.SERVICE_ID)).thenReturn(1L);
-        
Mockito.when(bc.getService(sref1)).thenReturn(Mockito.mock(WebConsoleSecurityProvider.class));
+        
Mockito.when(bc.getService(sref1)).thenReturn(Mockito.mock(SecurityProvider.class));
 
         ServiceReference sref2 = Mockito.mock(ServiceReference.class);
-        
Mockito.when(sref2.getProperty(OsgiManager.SECURITY_PROVIDER_PROPERTY_NAME)).thenReturn("xyz");
+        
Mockito.when(sref2.getProperty(SecurityProvider.PROPERTY_ID)).thenReturn("xyz");
         Mockito.when(sref2.getProperty(Constants.SERVICE_ID)).thenReturn(2L);
-        
Mockito.when(bc.getService(sref2)).thenReturn(Mockito.mock(WebConsoleSecurityProvider.class));
+        
Mockito.when(bc.getService(sref2)).thenReturn(Mockito.mock(SecurityProvider.class));
 
         ServiceTrackerCustomizer stc = mgr.new 
UpdateDependenciesStateCustomizer();
         stc.addingService(sref1);
@@ -149,13 +149,13 @@ public class OsgiManagerTest {
         final List<String> invocations = new ArrayList<String>();
         ServiceTrackerCustomizer stc = mgr.new 
UpdateDependenciesStateCustomizer() {
             @Override
-            public WebConsoleSecurityProvider 
addingService(ServiceReference<WebConsoleSecurityProvider> reference) {
+            public SecurityProvider 
addingService(ServiceReference<SecurityProvider> reference) {
                 invocations.add("added:" + reference);
                 return null;
             }
 
             @Override
-            public void 
removedService(ServiceReference<WebConsoleSecurityProvider> reference, 
WebConsoleSecurityProvider service) {
+            public void removedService(ServiceReference<SecurityProvider> 
reference, SecurityProvider service) {
                 invocations.add("removed:" + reference);
             }
         };
@@ -245,7 +245,7 @@ public class OsgiManagerTest {
         final OsgiManager mgr = new OsgiManager(bc);
 
         Mockito.verify(bc, Mockito.times(1))
-            .registerService(Mockito.eq(WebConsoleSecurityProvider.class), 
Mockito.isA(WebConsoleSecurityProvider.class), Mockito.isA(Dictionary.class));
+            .registerService(Mockito.eq(SecurityProvider.class), 
Mockito.isA(SecurityProvider.class), Mockito.isA(Dictionary.class));
         Mockito.verify(bc, Mockito.times(1))
             .registerService(Mockito.eq(ServletContextHelper.class), 
Mockito.isA(ServletContextHelper.class), Mockito.isA(Dictionary.class));
         Mockito.verify(bc, Mockito.times(1))
@@ -255,7 +255,7 @@ public class OsgiManagerTest {
 
         // Should not re-register the services, as they were already registered
         Mockito.verify(bc, Mockito.times(1))
-            .registerService(Mockito.eq(WebConsoleSecurityProvider.class), 
Mockito.isA(WebConsoleSecurityProvider.class), Mockito.isA(Dictionary.class));
+            .registerService(Mockito.eq(SecurityProvider.class), 
Mockito.isA(SecurityProvider.class), Mockito.isA(Dictionary.class));
         Mockito.verify(bc, Mockito.times(1))
             .registerService(Mockito.eq(ServletContextHelper.class), 
Mockito.isA(ServletContextHelper.class), Mockito.isA(Dictionary.class));
         Mockito.verify(bc, Mockito.times(1))

Reply via email to