KNOX-1350 - Centralize Group Lookup Config in gateway-site.xml
authorLarry McCay <lmccay@apache.org>
Sat, 9 Jun 2018 22:45:06 +0000 (18:45 -0400)
committerLarry McCay <lmccay@apache.org>
Sat, 9 Jun 2018 22:45:06 +0000 (18:45 -0400)
gateway-provider-identity-assertion-hadoop-groups/src/main/java/org/apache/knox/gateway/identityasserter/hadoop/groups/filter/HadoopGroupProviderDeploymentContributor.java

index d9388a1..4fb8465 100644 (file)
  */
 package org.apache.knox.gateway.identityasserter.hadoop.groups.filter;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.knox.gateway.deploy.DeploymentContext;
+import org.apache.knox.gateway.descriptor.FilterParamDescriptor;
+import org.apache.knox.gateway.descriptor.ResourceDescriptor;
 import org.apache.knox.gateway.identityasserter.common.filter.AbstractIdentityAsserterDeploymentContributor;
+import org.apache.knox.gateway.topology.Provider;
+import org.apache.knox.gateway.topology.Service;
 
 /**
  * A provider deployment contributor for looking up authenticated user groups as
@@ -61,4 +72,47 @@ public class HadoopGroupProviderDeploymentContributor
     return HadoopGroupProviderFilter.class.getName();
   }
 
+  @Override
+  public void contributeFilter( DeploymentContext context, Provider provider, Service service,
+      ResourceDescriptor resource, List<FilterParamDescriptor> params ) {
+       Map<String, String> p = provider.getParams();
+       String prefix = p.get("CENTRAL_GROUP_CONFIG_PREFIX");
+       if (prefix != null && !prefix.isEmpty()) {
+         if (!prefix.endsWith(".")) {
+        prefix += ".";
+         }
+      Map<String, String> groupMappingParams = 
+              ((Configuration)context.getGatewayConfig()).getPropsWithPrefix(prefix);
+      if (groupMappingParams != null) {
+        params = createParamList(resource, params, groupMappingParams);        
+      }
+    }
+
+       if (params == null || params.isEmpty()) {
+      params = buildFilterInitParms(provider, resource, params);
+       }
+    resource.addFilter().name(getName()).role(getRole()).impl(getFilterClassname()).params(params);
+  }
+
+  @Override
+  public List<FilterParamDescriptor> buildFilterInitParms(Provider provider,
+      ResourceDescriptor resource, List<FilterParamDescriptor> params) {
+       // blindly add all the provider params as filter init params
+    if (params == null) {
+      params = new ArrayList<FilterParamDescriptor>();
+    }
+    Map<String, String> providerParams = provider.getParams();
+    return createParamList(resource, params, providerParams);
+  }
+
+  private List<FilterParamDescriptor> createParamList(ResourceDescriptor resource, List<FilterParamDescriptor> params,
+        Map<String, String> providerParams) {
+    if (params == null) {
+      params = new ArrayList<FilterParamDescriptor>();
+    }
+    for(Entry<String, String> entry : providerParams.entrySet()) {
+      params.add( resource.createFilterParam().name(entry.getKey().toLowerCase()).value(entry.getValue()));
+    }
+    return params;
+  }
 }