Fix the AAF login
[clamp.git] / src / main / java / org / onap / clamp / clds / ClampServlet.java
index e8fd83e..6adb76c 100644 (file)
@@ -5,6 +5,8 @@
  * Copyright (C) 2018 AT&T Intellectual Property. All rights
  *                             reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * Licensed 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
@@ -26,9 +28,11 @@ package org.onap.clamp.clds;
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
+import fj.data.Array;
 import java.io.IOException;
 import java.security.Principal;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import javax.servlet.ServletException;
@@ -36,7 +40,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.camel.component.servlet.CamelHttpTransportServlet;
-import org.onap.clamp.clds.service.SecureServicePermission;
+import org.onap.clamp.authorization.SecureServicePermission;
 import org.springframework.context.ApplicationContext;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -54,50 +58,49 @@ public class ClampServlet extends CamelHttpTransportServlet {
      */
     private static final long serialVersionUID = -4198841134910211542L;
 
-    protected static final EELFLogger logger = EELFManager.getInstance().getLogger(ClampServlet.class);
-    public static final String PERM_INSTANCE = "clamp.config.security.permission.instance";
-    public static final String PERM_CL = "clamp.config.security.permission.type.cl";
-    public static final String PERM_TEMPLATE = "clamp.config.security.permission.type.template";
-    public static final String PERM_VF = "clamp.config.security.permission.type.filter.vf";
-    public static final String PERM_MANAGE = "clamp.config.security.permission.type.cl.manage";
-    public static final String PERM_TOSCA = "clamp.config.security.permission.type.tosca";
-    public static final String AUTHENTICATION_CLASS = "clamp.config.security.authentication.class";
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(ClampServlet.class);
+    private static final String PERM_INSTANCE = "clamp.config.security.permission.instance";
+    private static final String PERM_CL = "clamp.config.security.permission.type.cl";
+    private static final String PERM_TEMPLATE = "clamp.config.security.permission.type.template";
+    private static final String PERM_VF = "clamp.config.security.permission.type.filter.vf";
+    private static final String PERM_MANAGE = "clamp.config.security.permission.type.cl.manage";
+    private static final String PERM_TOSCA = "clamp.config.security.permission.type.tosca";
+    private static final String AUTHENTICATION_CLASS = "clamp.config.security.authentication.class";
+    private static final String READ = "read";
+    private static final String UPDATE = "update";
+
     private static List<SecureServicePermission> permissionList;
 
-    private synchronized Class loadDynamicAuthenticationClass() {
-        try {
-            String authenticationObject = WebApplicationContextUtils.getWebApplicationContext(getServletContext())
-                .getEnvironment().getProperty(AUTHENTICATION_CLASS);
-            return Class.forName(authenticationObject);
-        } catch (ClassNotFoundException e) {
-            logger.error(
-                "Exception caught when attempting to create associated class of config:" + AUTHENTICATION_CLASS, e);
-            return Object.class;
-        }
+    private synchronized String[] loadDynamicAuthenticationClasses() {
+        String[] authenticationObjects = WebApplicationContextUtils.getWebApplicationContext(getServletContext())
+                .getEnvironment().getProperty(AUTHENTICATION_CLASS).split(",");
+        Arrays.stream(authenticationObjects).forEach(className -> className.trim());
+        return authenticationObjects;
     }
 
     private synchronized List<SecureServicePermission> getPermissionList() {
         if (permissionList == null) {
             permissionList = new ArrayList<>();
             ApplicationContext applicationContext = WebApplicationContextUtils
-                .getWebApplicationContext(getServletContext());
+                    .getWebApplicationContext(getServletContext());
             String cldsPermissionInstance = applicationContext.getEnvironment().getProperty(PERM_INSTANCE);
             permissionList.add(SecureServicePermission.create(applicationContext.getEnvironment().getProperty(PERM_CL),
-                cldsPermissionInstance, "read"));
+                    cldsPermissionInstance, READ));
             permissionList.add(SecureServicePermission.create(applicationContext.getEnvironment().getProperty(PERM_CL),
-                cldsPermissionInstance, "update"));
+                    cldsPermissionInstance, UPDATE));
             permissionList.add(SecureServicePermission.create(
-                applicationContext.getEnvironment().getProperty(PERM_TEMPLATE), cldsPermissionInstance, "read"));
+                    applicationContext.getEnvironment().getProperty(PERM_TEMPLATE), cldsPermissionInstance, READ));
             permissionList.add(SecureServicePermission.create(
-                applicationContext.getEnvironment().getProperty(PERM_TEMPLATE), cldsPermissionInstance, "update"));
+                    applicationContext.getEnvironment().getProperty(PERM_TEMPLATE), cldsPermissionInstance, UPDATE));
             permissionList.add(SecureServicePermission.create(applicationContext.getEnvironment().getProperty(PERM_VF),
-                cldsPermissionInstance, "*"));
+                    cldsPermissionInstance, "*"));
             permissionList.add(SecureServicePermission
-                .create(applicationContext.getEnvironment().getProperty(PERM_MANAGE), cldsPermissionInstance, "*"));
+                    .create(applicationContext.getEnvironment().getProperty(PERM_MANAGE), cldsPermissionInstance, "*"));
             permissionList.add(SecureServicePermission
-                .create(applicationContext.getEnvironment().getProperty(PERM_TOSCA), cldsPermissionInstance, "read"));
+                    .create(applicationContext.getEnvironment().getProperty(PERM_TOSCA), cldsPermissionInstance, READ));
             permissionList.add(SecureServicePermission
-                .create(applicationContext.getEnvironment().getProperty(PERM_TOSCA), cldsPermissionInstance, "update"));
+                    .create(applicationContext.getEnvironment().getProperty(PERM_TOSCA),
+                            cldsPermissionInstance, UPDATE));
         }
         return permissionList;
     }
@@ -107,10 +110,10 @@ public class ClampServlet extends CamelHttpTransportServlet {
      * to isUserInRole will invoke a http call to AAF server.
      */
     @Override
-    protected void doService(HttpServletRequest request, HttpServletResponse response)
-        throws ServletException, IOException {
+    protected void doService(HttpServletRequest request, HttpServletResponse response) {
         Principal principal = request.getUserPrincipal();
-        if (loadDynamicAuthenticationClass().isInstance(principal)) {
+        if (principal != null && Arrays.stream(loadDynamicAuthenticationClasses())
+                .anyMatch(className -> className.equals(principal.getClass().getName()))) {
             // When AAF is enabled, there is a need to provision the permissions to Spring
             // system
             List<GrantedAuthority> grantedAuths = new ArrayList<>();
@@ -120,8 +123,8 @@ public class ClampServlet extends CamelHttpTransportServlet {
                     grantedAuths.add(new SimpleGrantedAuthority(permString));
                 }
             }
-            Authentication auth = new UsernamePasswordAuthenticationToken(new User(principal.getName(), "", grantedAuths), "",
-                grantedAuths);
+            Authentication auth = new UsernamePasswordAuthenticationToken(new User(principal.getName(), "",
+                    grantedAuths), "", grantedAuths);
             SecurityContextHolder.getContext().setAuthentication(auth);
         }
         try {
@@ -134,6 +137,5 @@ public class ClampServlet extends CamelHttpTransportServlet {
                 logger.error("Exception caught when executing HTTP sendError in servlet", e);
             }
         }
-
     }
-}
\ No newline at end of file
+}