1 package org.openecomp.server.filters;
3 import com.fasterxml.jackson.databind.ObjectMapper;
4 import org.onap.sdc.tosca.services.YamlUtil;
5 import org.openecomp.sdc.securityutil.ISessionValidationFilterConfiguration;
6 import org.openecomp.sdc.securityutil.filters.SessionValidationFilter;
7 import org.openecomp.server.configuration.CookieConfig;
8 import org.openecomp.sdc.logging.api.Logger;
9 import org.openecomp.sdc.logging.api.LoggerFactory;
10 import org.openecomp.sdcrests.item.rest.services.catalog.notification.EntryNotConfiguredException;
12 import javax.servlet.http.Cookie;
13 import java.io.FileInputStream;
14 import java.io.IOException;
15 import java.io.InputStream;
16 import java.util.List;
18 import java.util.Objects;
20 public class RestrictionAccessFilter extends SessionValidationFilter {
22 private static final Logger LOGGER = LoggerFactory.getLogger(RestrictionAccessFilter.class);
23 private static final String CONFIG_FILE_PROPERTY = "configuration.yaml";
24 private static final String CONFIG_SECTION = "authCookie";
26 private static class Configuration implements ISessionValidationFilterConfiguration {
27 private static Configuration instance;
28 private String securityKey;
29 private long maxSessionTimeOut;
30 private long sessionIdleTimeOut;
31 private String cookieName;
32 private String redirectURL;
33 private List<String> excludedUrls;
34 private String cookieDomain;
35 private String cookiePath;
36 private boolean isCookieHttpOnly;
39 private Configuration() {
42 String file = Objects.requireNonNull(System.getProperty(CONFIG_FILE_PROPERTY),
43 "Config file location must be specified via system property " + CONFIG_FILE_PROPERTY);
45 Object config = getAuthenticationConfiguration(file);
46 ObjectMapper mapper = new ObjectMapper();
47 CookieConfig cookieConfig = mapper.convertValue(config, CookieConfig.class);
48 this.securityKey = cookieConfig.getSecurityKey();
49 this.maxSessionTimeOut = cookieConfig.getMaxSessionTimeOut();
50 this.sessionIdleTimeOut = cookieConfig.getSessionIdleTimeOut();
51 this.cookieName = cookieConfig.getCookieName();
52 this.redirectURL = cookieConfig.getRedirectURL();
53 this.excludedUrls = cookieConfig.getOnboardingExcludedUrls();
54 this.cookieDomain = cookieConfig.getDomain();
55 this.cookiePath = cookieConfig.getPath();
56 this.isCookieHttpOnly = cookieConfig.isHttpOnly();
58 } catch (Exception e) {
59 LOGGER.warn("Failed to load configuration. ", e);
64 public static Configuration getInstance() {
65 if (instance == null) {
66 instance = new Configuration();
71 private static Object getAuthenticationConfiguration(String file) throws IOException {
73 Map<?, ?> configuration = Objects.requireNonNull(readConfigurationFile(file), "Configuration cannot be empty");
74 Object authenticationConfig = configuration.get(CONFIG_SECTION);
75 if (authenticationConfig == null) {
76 throw new EntryNotConfiguredException(CONFIG_SECTION + " section");
79 return authenticationConfig;
82 private static Map<?, ?> readConfigurationFile(String file) throws IOException {
84 try (InputStream fileInput = new FileInputStream(file)) {
85 YamlUtil yamlUtil = new YamlUtil();
86 return yamlUtil.yamlToMap(fileInput);
91 public String getSecurityKey() {
96 public long getMaxSessionTimeOut() {
97 return maxSessionTimeOut;
101 public long getSessionIdleTimeOut() {
102 return sessionIdleTimeOut;
106 public String getCookieName() {
111 public String getCookieDomain() {
116 public String getCookiePath() {
121 public boolean isCookieHttpOnly() {
122 return isCookieHttpOnly;
126 public String getRedirectURL() {
131 public List<String> getExcludedUrls() {
137 public ISessionValidationFilterConfiguration getFilterConfiguration() {
138 return Configuration.getInstance();
142 protected Cookie addRoleToCookie(Cookie cookie) {
147 protected boolean isRoleValid(Cookie cookie) {