package org.onap.clamp.clds;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
import java.io.IOException;
import java.security.Principal;
import java.util.ArrayList;
import java.util.List;
+
+import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.ServletException;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
import org.apache.camel.component.servlet.CamelHttpTransportServlet;
-
+import org.onap.clamp.clds.service.SecureServicePermission;
import org.springframework.context.ApplicationContext;
-import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.http.HttpStatus;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContext;
-import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.web.context.support.WebApplicationContextUtils;
-import org.onap.clamp.clds.config.ClampProperties;
-import org.onap.clamp.clds.service.SecureServicePermission;
-import org.onap.clamp.clds.util.ClampTimer;
-
-
public class ClampServlet extends CamelHttpTransportServlet {
- protected static final EELFLogger logger = EELFManager.getInstance().getLogger(ClampServlet.class);
+ /**
+ *
+ */
+ 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_TEMPLACE = "clamp.config.security.permission.type.template";
+ 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";
- protected void doService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ /**
+ * When AAF is enabled, request object will contain a cadi Wrapper, so queries
+ * to isUserInRole will invoke a http call to AAF server.
+ */
+ @Override
+ protected void doService(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
List<SecureServicePermission> permissionList = new ArrayList<>();
- // Get Principal info and translate it into Spring Authentication
- // If authenticataion is null: a) the authentication info was set manually in the previous thread
- // b) handled by Spring automatically
- // for the 2 cases above, no need for the translation, just skip the following step
- if (null == authentication) {
- logger.debug ("Populate Spring Authenticataion info manually.");
- ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
- // Start a timer to clear the authentication after 5 mins, so that the authentication will be reinitialized with AAF DB
- new ClampTimer(300);
- String cldsPersmissionTypeCl = applicationContext.getEnvironment().getProperty(PERM_INSTANCE);
- String cldsPermissionTypeTemplate = applicationContext.getEnvironment().getProperty(PERM_CL);
- String cldsPermissionInstance = applicationContext.getEnvironment().getProperty(PERM_TEMPLACE);
+ ApplicationContext applicationContext = WebApplicationContextUtils
+ .getWebApplicationContext(this.getServletContext());
- // set the stragety to Mode_Global, so that all thread is able to see the authentication
- SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL);
- Principal p = request.getUserPrincipal();
+ String cldsPersmissionTypeCl = applicationContext.getEnvironment().getProperty(PERM_CL);
+ String cldsPermissionTypeTemplate = applicationContext.getEnvironment().getProperty(PERM_TEMPLATE);
+ String cldsPermissionInstance = applicationContext.getEnvironment().getProperty(PERM_INSTANCE);
+ String cldsPermissionTypeFilterVf = applicationContext.getEnvironment().getProperty(PERM_VF);
+ String cldsPermissionTypeClManage = applicationContext.getEnvironment().getProperty(PERM_MANAGE);
+ String cldsPermissionTypeTosca = applicationContext.getEnvironment().getProperty(PERM_TOSCA);
+ // set the stragety to Mode_Global, so that all thread is able to
+ // see the authentication
+ SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL);
+ Principal p = request.getUserPrincipal();
+ if (null != p) {
permissionList.add(SecureServicePermission.create(cldsPersmissionTypeCl, cldsPermissionInstance, "read"));
permissionList.add(SecureServicePermission.create(cldsPersmissionTypeCl, cldsPermissionInstance, "update"));
- permissionList.add(SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance, "read"));
- permissionList.add(SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance, "update"));
+ permissionList
+ .add(SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance, "read"));
+ permissionList
+ .add(SecureServicePermission.create(cldsPermissionTypeTemplate, cldsPermissionInstance, "update"));
+ permissionList.add(SecureServicePermission.create(cldsPermissionTypeFilterVf, cldsPermissionInstance, "*"));
+ permissionList.add(SecureServicePermission.create(cldsPermissionTypeClManage, cldsPermissionInstance, "*"));
+ permissionList.add(SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "read"));
+ permissionList
+ .add(SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "update"));
List<GrantedAuthority> grantedAuths = new ArrayList<>();
- for (SecureServicePermission perm:permissionList) {
+ for (SecureServicePermission perm : permissionList) {
String permString = perm.toString();
if (request.isUserInRole(permString)) {
grantedAuths.add(new SimpleGrantedAuthority(permString));
}
}
- Authentication auth = new UsernamePasswordAuthenticationToken(new User(p.getName(), "", grantedAuths), "", grantedAuths);
+
+ Authentication auth = new UsernamePasswordAuthenticationToken(new User(p.getName(), "", grantedAuths), "",
+ grantedAuths);
SecurityContextHolder.getContext().setAuthentication(auth);
}
- super.doService(request, response);
+ try {
+ super.doService(request, response);
+ } catch (ServletException | IOException ioe) {
+ logger.error("Exception caught when executing doService in servlet", ioe);
+ try {
+ response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value());
+ } catch (IOException e) {
+ logger.error("Exception caught when executing HTTP sendError in servlet", e);
+ }
+ }
+
}
}
\ No newline at end of file