DR AAF CADI integration
[dmaap/datarouter.git] / datarouter-node / src / main / java / org / onap / dmaap / datarouter / node / DRNodeCadiFilter.java
1 /*
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20 package org.onap.dmaap.datarouter.node;
21
22 import org.apache.log4j.Logger;
23 import org.onap.aaf.cadi.PropAccess;
24 import org.onap.aaf.cadi.filter.CadiFilter;
25
26 import javax.servlet.FilterChain;
27 import javax.servlet.ServletException;
28 import javax.servlet.ServletRequest;
29 import javax.servlet.ServletResponse;
30 import javax.servlet.http.HttpServletRequest;
31 import javax.servlet.http.HttpServletResponse;
32 import java.io.IOException;
33
34
35 public class DRNodeCadiFilter extends CadiFilter {
36     private static Logger logger = Logger.getLogger("org.onap.dmaap.datarouter.node.NodeServlet");
37
38     DRNodeCadiFilter(boolean init, PropAccess access) throws ServletException {
39         super(init, access);
40     }
41
42     @Override
43     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
44         HttpServletRequest httpRequest = (HttpServletRequest) request;
45         String path = httpRequest.getPathInfo();
46         if (!(path.startsWith("/internal"))) {
47             if (!(httpRequest.getMethod().equalsIgnoreCase("POST"))) {
48                 if (httpRequest.getMethod().equalsIgnoreCase("DELETE") && path.startsWith("/delete")) {
49                     chain.doFilter(request, response);
50                 } else {
51                     String feedId = getFeedId(request, response);
52                     String aafDbInstance = NodeConfigManager.getInstance().getAafInstance(feedId);
53                     if (aafDbInstance != null && !aafDbInstance.equals("") && !aafDbInstance.equalsIgnoreCase("legacy")) {
54                         logger.info("DRNodeCadiFilter - doFilter: FeedId - " + feedId + ":" + "AAF Instance -" + aafDbInstance);
55                         super.doFilter(request, response, chain);
56                     } else {
57                         logger.info("DRNodeCadiFilter - doFilter: FeedId - " + feedId + ":" + "Legacy Feed");
58                         chain.doFilter(request, response);
59                     }
60                 }
61             }
62         } else {
63             chain.doFilter(request, response);
64         }
65     }
66
67     private String getFeedId(ServletRequest request, ServletResponse response) {
68         HttpServletRequest req = (HttpServletRequest) request;
69         HttpServletResponse resp = (HttpServletResponse) response;
70         String fileid = req.getPathInfo();
71         if (fileid == null) {
72             logger.info("NODE0105 Rejecting bad URI for PUT " + req.getPathInfo() + " from " + req.getRemoteAddr());
73             try {
74                 resp.sendError(HttpServletResponse.SC_NOT_FOUND, "Invalid request URI.  Expecting <feed-publishing-url>/<fileid>.");
75             } catch (IOException e) {
76                 logger.error("NODE0541 DRNodeCadiFilter.getFeedId: ", e);
77             }
78             return null;
79         }
80         String feedid = "";
81
82         if (fileid.startsWith("/publish/")) {
83             fileid = fileid.substring(9);
84             int i = fileid.indexOf('/');
85             if (i == -1 || i == fileid.length() - 1) {
86                 logger.info("NODE0105 Rejecting bad URI for PUT (publish) of " + req.getPathInfo() + " from " + req.getRemoteAddr());
87                 try {
88                     resp.sendError(HttpServletResponse.SC_NOT_FOUND, "Invalid request URI.  Expecting <feed-publishing-url>/<fileid>.  Possible missing fileid.");
89                 } catch (IOException e) {
90                     logger.error("NODE0542 DRNodeCadiFilter.getFeedId: ", e);
91                 }
92                 return null;
93             }
94             feedid = fileid.substring(0, i);
95         }
96         return feedid;
97     }
98
99 }