02ee236ae8102f80573ad71745b69c7341e4f0ed
[sdc.git] /
1 package org.openecomp.server.filters;
2
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;
11
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;
17 import java.util.Map;
18 import java.util.Objects;
19
20 public class RestrictionAccessFilter extends SessionValidationFilter {
21
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";
25
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;
37
38
39         private Configuration() {
40             try {
41
42                 String file = Objects.requireNonNull(System.getProperty(CONFIG_FILE_PROPERTY),
43                         "Config file location must be specified via system property " + CONFIG_FILE_PROPERTY);
44
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();
57
58             } catch (Exception e) {
59                 LOGGER.warn("Failed to load configuration. ", e);
60             }
61
62         }
63
64         public static Configuration getInstance() {
65             if (instance == null) {
66                 instance = new Configuration();
67             }
68             return instance;
69         }
70
71         private static Object getAuthenticationConfiguration(String file) throws IOException {
72
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");
77             }
78
79             return authenticationConfig;
80         }
81
82         private static Map<?, ?> readConfigurationFile(String file) throws IOException {
83
84             try (InputStream fileInput = new FileInputStream(file)) {
85                 YamlUtil yamlUtil = new YamlUtil();
86                 return yamlUtil.yamlToMap(fileInput);
87             }
88         }
89
90         @Override
91         public String getSecurityKey() {
92             return securityKey;
93         }
94
95         @Override
96         public long getMaxSessionTimeOut() {
97             return maxSessionTimeOut;
98         }
99
100         @Override
101         public long getSessionIdleTimeOut() {
102             return sessionIdleTimeOut;
103         }
104
105         @Override
106         public String getCookieName() {
107             return cookieName;
108         }
109
110         @Override
111         public String getCookieDomain() {
112             return cookieDomain;
113         }
114
115         @Override
116         public String getCookiePath() {
117             return cookiePath;
118         }
119
120         @Override
121         public boolean isCookieHttpOnly() {
122             return isCookieHttpOnly;
123         }
124
125         @Override
126         public String getRedirectURL() {
127             return redirectURL;
128         }
129
130         @Override
131         public List<String> getExcludedUrls() {
132             return excludedUrls;
133         }
134     }
135
136     @Override
137     public ISessionValidationFilterConfiguration getFilterConfiguration() {
138         return Configuration.getInstance();
139     }
140
141     @Override
142     protected Cookie addRoleToCookie(Cookie cookie) {
143         return cookie;
144     }
145
146     @Override
147     protected boolean isRoleValid(Cookie cookie) {
148         return true;
149     }
150 }