baafb4a9eb5515cb070e93b6fee2eb17a01a3006
[sdc.git] /
1 /*
2  * Copyright © 2016-2017 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.openecomp.sdc.itempermissions.servlet;
18
19 import org.openecomp.sdc.itempermissions.PermissionsServices;
20 import org.openecomp.sdc.itempermissions.PermissionsServicesFactory;
21
22 import javax.servlet.Filter;
23 import javax.servlet.FilterChain;
24 import javax.servlet.FilterConfig;
25 import javax.servlet.ServletException;
26 import javax.servlet.ServletRequest;
27 import javax.servlet.ServletResponse;
28 import javax.servlet.http.HttpServletRequest;
29 import javax.servlet.http.HttpServletResponse;
30 import javax.ws.rs.HttpMethod;
31 import java.io.IOException;
32
33 /**
34  * Created by ayalaben on 6/27/2017.
35  */
36 public class PermissionsFilter implements Filter {
37
38   private final PermissionsServices permissionsServices;
39   private static final String IRRELEVANT_REQUEST = "Irrelevant_Request";
40   private static final String EDIT_ITEM = "Edit_Item";
41
42   public PermissionsFilter() {
43     this.permissionsServices = PermissionsServicesFactory.getInstance().createInterface();
44   }
45
46   @Override
47   public void init(FilterConfig filterConfig) {
48     // required by servlet API
49   }
50
51   @Override
52   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
53                        FilterChain filterChain) throws IOException, ServletException {
54
55     if ((servletRequest instanceof HttpServletRequest) &&
56       isIrrelevant((HttpServletRequest) servletRequest, servletResponse)) {
57         return;
58     }
59
60     filterChain.doFilter(servletRequest, servletResponse);
61   }
62
63   private boolean isIrrelevant(HttpServletRequest servletRequest, ServletResponse servletResponse) throws IOException {
64
65
66     String method = servletRequest.getMethod();
67     if (method.equals(HttpMethod.POST) || method.equals(HttpMethod.PUT) || method.equals(HttpMethod.DELETE)) {
68
69       String userId = servletRequest.getHeader("USER_ID");
70       String itemId = parseItemIdFromPath(servletRequest.getPathInfo());
71
72       if (!itemId.equals(IRRELEVANT_REQUEST) && !permissionsServices.isAllowed(itemId,userId,EDIT_ITEM)) {
73           ((HttpServletResponse) servletResponse).setStatus(HttpServletResponse.SC_FORBIDDEN);
74           servletResponse.getWriter().print("Permissions Error. The user does not have " +
75               "permission to perform" +
76               " this action.");
77           return true;
78         }
79     }
80
81     return false;
82   }
83
84   private String parseItemIdFromPath(String pathInfo) {
85     String[] tokens = pathInfo.split("/");
86     if (tokens.length < 4) {
87       return IRRELEVANT_REQUEST;
88     } else {
89       return tokens[3];
90     }
91   }
92
93   @Override
94   public void destroy() {
95     // required by serlvet API
96   }
97 }