[ 
https://issues.apache.org/jira/browse/KNOX-3105?focusedWorklogId=959889&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-959889
 ]

ASF GitHub Bot logged work on KNOX-3105:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 04/Mar/25 06:22
            Start Date: 04/Mar/25 06:22
    Worklog Time Spent: 10m 
      Work Description: smolnar82 commented on code in PR #1001:
URL: https://github.com/apache/knox/pull/1001#discussion_r1978691497


##########
gateway-provider-security-authc-remote/src/main/java/org/apache/knox/gateway/filter/RemoteAuthFilter.java:
##########
@@ -72,11 +72,14 @@ public class RemoteAuthFilter implements Filter {
   private static final String CONFIG_GROUP_HEADER = "remote.auth.group.header";
   private static final String DEFAULT_CONFIG_USER_HEADER = "X-Knox-Actor-ID";
   private static final String DEFAULT_CONFIG_GROUP_HEADER = 
"X-Knox-Actor-Groups-*";
+  private static final String CONFIG_TRUSTSTORE_PATH = 
"remote.auth.truststore.path";

Review Comment:
   nit: the `remote.auth.` prefix could be a separate final constant (so that 
all properties could start like `REMOTE_AUTH_PREFIX + `)



##########
gateway-provider-security-authc-remote/src/main/java/org/apache/knox/gateway/filter/RemoteAuthFilter.java:
##########
@@ -203,12 +217,20 @@ private HttpURLConnection 
getHttpURLConnection(ServletContext servletContext) th
       KeystoreService keystoreService = 
services.getService(ServiceType.KEYSTORE_SERVICE);
       if (keystoreService != null) {
         try {
-          truststore = keystoreService.getTruststoreForHttpClient();
+          // Try topology-specific truststore first if configured

Review Comment:
   Given the updated logic, `getTrustStore` should be a separate private method.



##########
gateway-provider-security-authc-remote/src/test/java/org/apache/knox/gateway/filter/RemoteAuthFilterTest.java:
##########
@@ -65,22 +72,52 @@ public class RemoteAuthFilterTest {
     private HttpServletRequest requestMock;
     private HttpServletResponse responseMock;
     private TestFilterChain chainMock;
+    private GatewayServices gatewayServicesMock;
+    private KeystoreService keystoreServiceMock;
+    private ServletContext servletContextMock;
+
     @Before
-    public void setUp() {
-        FilterConfig filterConfigMock = 
EasyMock.createNiceMock(FilterConfig.class);
+    public void createMocks() {
         requestMock = EasyMock.createMock(HttpServletRequest.class);
         responseMock = EasyMock.createMock(HttpServletResponse.class);
+    }
+
+    private void setUp(String trustStorePath, String trustStorePass, String 
trustStoreType) {
+        // Reset existing mocks
+        EasyMock.reset(requestMock, responseMock);
+
+        FilterConfig filterConfigMock = 
EasyMock.createNiceMock(FilterConfig.class);
         chainMock = new TestFilterChain();
 
-        
EasyMock.expect(filterConfigMock.getInitParameter("remote.auth.url")).andReturn("http://example.com/auth";).anyTimes();
+        // Create and configure Gateway Services mocks
+        gatewayServicesMock = EasyMock.createNiceMock(GatewayServices.class);
+        keystoreServiceMock = EasyMock.createNiceMock(KeystoreService.class);
+        servletContextMock = EasyMock.createNiceMock(ServletContext.class);
+
+        // Set up Gateway Services expectations
+        
EasyMock.expect(gatewayServicesMock.getService(ServiceType.KEYSTORE_SERVICE))
+               .andReturn(keystoreServiceMock)
+               .anyTimes();
+        
EasyMock.expect(servletContextMock.getAttribute(GatewayServices.GATEWAY_SERVICES_ATTRIBUTE))
+               .andReturn(gatewayServicesMock)
+               .anyTimes();
+
+        // Basic config
+        
EasyMock.expect(filterConfigMock.getInitParameter("remote.auth.url")).andReturn("https://example.com/auth";).anyTimes();
         
EasyMock.expect(filterConfigMock.getInitParameter("remote.auth.include.headers")).andReturn("Authorization").anyTimes();
         
EasyMock.expect(filterConfigMock.getInitParameter("remote.auth.cache.key")).andReturn("Authorization").anyTimes();
         
EasyMock.expect(filterConfigMock.getInitParameter("remote.auth.expire.after")).andReturn("5").anyTimes();
         
EasyMock.expect(filterConfigMock.getInitParameter("remote.auth.user.header")).andReturn(X_AUTHENTICATED_USER).anyTimes();
         
EasyMock.expect(filterConfigMock.getInitParameter("remote.auth.group.header"))
                .andReturn(X_AUTHENTICATED_GROUP + "," + 
X_AUTHENTICATED_GROUP_2 + ",X-Custom-Group-*").anyTimes();
 
-        EasyMock.replay(filterConfigMock);
+        // Trust store config
+        
EasyMock.expect(filterConfigMock.getInitParameter("remote.auth.truststore.path")).andReturn(trustStorePath).anyTimes();

Review Comment:
   If I were you, I'd set the property names' visibility to package level -> 
they can be used in the test class. E.g.:
   
`EasyMock.expect(filterConfigMock.getInitParameter(CONFIG_TRUSTSTORE_PATH)).andReturn(trustStorePath).anyTimes();`





Issue Time Tracking
-------------------

    Worklog Id:     (was: 959889)
    Time Spent: 20m  (was: 10m)

> Add Topology Level Config for Truststore to RemoteAuthProvider
> --------------------------------------------------------------
>
>                 Key: KNOX-3105
>                 URL: https://issues.apache.org/jira/browse/KNOX-3105
>             Project: Apache Knox
>          Issue Type: Improvement
>          Components: Server
>            Reporter: Larry McCay
>            Assignee: Larry McCay
>            Priority: Major
>             Fix For: 2.2.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> I originally had this topology level config only for the truststore and 
> password but decided that it should be configured at the gateway level. 
> However, it is much easier to use specific truststores for dev and testing 
> environments than adding a cert from one Knox to another's truststore which 
> may have other certs, etc.
> This change will add the params for location and password with alias service 
> support of the password.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to