update DR logging to log under one system
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / utils / DRProvCadiFilter.java
1 /**
2  * -
3  * ============LICENSE_START=======================================================
4  * Copyright (C) 2019 Nordix Foundation.
5  * ================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  * <p>
10  * http://www.apache.org/licenses/LICENSE-2.0
11  * <p>
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  * <p>
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21 package org.onap.dmaap.datarouter.provisioning.utils;
22
23 import com.att.eelf.configuration.EELFLogger;
24 import com.att.eelf.configuration.EELFManager;
25 import org.onap.aaf.cadi.PropAccess;
26 import org.onap.aaf.cadi.filter.CadiFilter;
27 import org.onap.dmaap.datarouter.provisioning.BaseServlet;
28 import org.onap.dmaap.datarouter.provisioning.beans.EventLogRecord;
29 import org.onap.dmaap.datarouter.provisioning.beans.Feed;
30 import org.onap.dmaap.datarouter.provisioning.beans.Subscription;
31
32 import javax.servlet.FilterChain;
33 import javax.servlet.ServletException;
34 import javax.servlet.ServletRequest;
35 import javax.servlet.ServletResponse;
36 import javax.servlet.http.HttpServletRequest;
37 import javax.servlet.http.HttpServletResponse;
38 import java.io.IOException;
39
40
41 public class DRProvCadiFilter extends CadiFilter {
42     protected static EELFLogger eventlogger = EELFManager.getInstance().getLogger("EventLog");
43     protected static EELFLogger intlogger = EELFManager.getInstance().getLogger("InternalLog");
44     private String aafInstance = "";
45
46     public DRProvCadiFilter(boolean init, PropAccess access) throws ServletException {
47         super(init, access);
48     }
49
50     @Override
51     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
52         HttpServletRequest httpRequest = (HttpServletRequest) request;
53         HttpServletResponse httpResponse = (HttpServletResponse) response;
54
55         EventLogRecord elr = new EventLogRecord(httpRequest);
56         String excludeAAF = httpRequest.getHeader(BaseServlet.EXCLUDE_AAF_HEADER);//send this param value as true, if want to add legacy feed/subscriber in AAF env
57
58         String pathUrl = httpRequest.getServletPath();
59         if (!(pathUrl.contains("internal") ||
60                 pathUrl.contains("sublog") ||
61                 pathUrl.contains("feedlog") ||
62                 pathUrl.contains("statistics") ||
63                 pathUrl.contains("publish") ||
64                 pathUrl.contains("group"))) {
65
66             String method = httpRequest.getMethod().toUpperCase();
67             if (!(method.equals("POST"))) { // if request method is PUT method (publish or Feed update) Needs to check for DELETE
68                 if (method.equals("PUT") || method.equals("DELETE")) {
69                     if ((pathUrl.contains("subs"))) {//edit subscriber
70                         int subId = BaseServlet.getIdFromPath(httpRequest);
71                         if (subId <= 0) {
72                             String message = String.format("Invalid request URI - %s", httpRequest.getPathInfo());
73                             elr.setMessage(message);
74                             elr.setResult(HttpServletResponse.SC_NOT_FOUND);
75                             eventlogger.error(elr.toString());
76                             httpResponse.sendError(HttpServletResponse.SC_NOT_FOUND, message);
77                             return;
78                         }
79                         if (isAAFSubscriber(subId)) {//edit AAF Subscriber
80                             String message = String.format("DRProvCadiFilter - Edit AAF Subscriber : %d : AAF Instance - %s", subId, aafInstance);
81                             elr.setMessage(message);
82                             eventlogger.info(elr.toString());
83                             //request.setAttribute("aafInstance", aafInstance);// no need to set it in request since it is taken care in respective servlets
84                             super.doFilter(request, response, chain);
85
86                         } else {//Edit or publish legacy Subscriber
87                             String message = "DRProvCadiFilter - Edit/Publish Legacy Subscriber :" + subId;
88                             elr.setMessage(message);
89                             eventlogger.info(elr.toString());
90                             chain.doFilter(request, response);
91                         }
92
93                     } else {//edit or publish Feed
94                         int feedId = BaseServlet.getIdFromPath(httpRequest);
95                         if (feedId <= 0) {
96                             String message = "Invalid request URI - " + httpRequest.getPathInfo();
97                             elr.setMessage(message);
98                             elr.setResult(HttpServletResponse.SC_NOT_FOUND);
99                             eventlogger.error(elr.toString());
100                             httpResponse.sendError(HttpServletResponse.SC_NOT_FOUND, message);
101                             return;
102                         }
103
104                         if (isAAFFeed(feedId)) {//edit AAF Feed
105                             String message = "DRProvCadiFilter - Edit AAF Feed:" + feedId + ":" + "AAF Instance -" + aafInstance;
106                             elr.setMessage(message);
107                             eventlogger.info(elr.toString());
108                             super.doFilter(request, response, chain);
109
110                         } else {//Edit or publish legacy Feed
111                             String message = "DRProvCadiFilter - Edit/Publish Legacy Feed:" + feedId;
112                             elr.setMessage(message);
113                             eventlogger.info(elr.toString());
114                             chain.doFilter(request, response);
115                         }
116                     }
117                 } else {// in all other cases defaults to legacy behavior
118                     String message = "DRProvCadiFilter - Default Legacy Feed/Subscriber URI -:" + httpRequest.getPathInfo();
119                     elr.setMessage(message);
120                     eventlogger.info(elr.toString());
121                     chain.doFilter(request, response);
122                 }
123             } else {
124                 //check to add legacy/AAF subscriber
125                 if ((pathUrl.contains("subscribe"))) {//add subscriber
126                     int feedId = BaseServlet.getIdFromPath(httpRequest);
127                     if (feedId <= 0) {
128                         String message = "Invalid request URI - " + httpRequest.getPathInfo();
129                         elr.setMessage(message);
130                         elr.setResult(HttpServletResponse.SC_NOT_FOUND);
131                         eventlogger.error(elr.toString());
132                         httpResponse.sendError(HttpServletResponse.SC_NOT_FOUND, message);
133                         return;
134                     }
135                     if (isAAFFeed(feedId)) {//check if AAF Feed or legacy to add new subscriber
136                         if (excludeAAF == null) {
137                             String message = "DRProvCadiFilter -Invalid request Header Parmeter " + BaseServlet.EXCLUDE_AAF_HEADER + " = " + httpRequest.getHeader(BaseServlet.EXCLUDE_AAF_HEADER);
138                             elr.setMessage(message);
139                             elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
140                             eventlogger.error(elr.toString());
141                             httpResponse.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
142                             return;
143                         }
144                         if (excludeAAF.equalsIgnoreCase("true")) {//Check to add legacy subscriber to AAF Feed
145                             String message = "DRProvCadiFilter - add legacy subscriber to AAF Feed, FeedID:" + feedId;
146                             elr.setMessage(message);
147                             eventlogger.info(elr.toString());
148                             chain.doFilter(request, response);
149                         } else {
150                             String message = "DRProvCadiFilter - Add AAF subscriber to AAF Feed, FeedID:" + feedId + ":" + "AAF Instance -" + aafInstance;
151                             elr.setMessage(message);
152                             eventlogger.info(elr.toString());
153                             super.doFilter(request, response, chain);
154                         }
155                     } else {//Add legacy susbcriber to legacy Feed
156                         String message = "DRProvCadiFilter - add legacy subscriber to legacy Feed:" + feedId;
157                         elr.setMessage(message);
158                         eventlogger.info(elr.toString());
159                         chain.doFilter(request, response);
160                     }
161                 } else {//add AAF feed
162                     if (excludeAAF == null) {
163                         String message = "DRProvCadiFilter -Invalid request Header Parmeter " + BaseServlet.EXCLUDE_AAF_HEADER + " = " + httpRequest.getHeader(BaseServlet.EXCLUDE_AAF_HEADER);
164                         elr.setMessage(message);
165                         elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
166                         eventlogger.error(elr.toString());
167                         httpResponse.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
168                         return;
169                     }
170                     if (excludeAAF.equalsIgnoreCase("true")) {//add legacy feed
171                         String message = "DRProvCadiFilter - Create new legacy Feed : EXCLUDE_AAF = " + excludeAAF;
172                         elr.setMessage(message);
173                         eventlogger.info(elr.toString());
174                         chain.doFilter(request, response);
175                     } else {//add AAF Feed
176                         String message = "DRProvCadiFilter - Create new AAF Feed : EXCLUDE_AAF = " + excludeAAF;
177                         elr.setMessage(message);
178                         eventlogger.info(elr.toString());
179                         super.doFilter(request, response, chain);
180                     }
181                 }
182             }
183         } else {
184             //All other requests default to (Non CADI) legacy
185             chain.doFilter(request, response);
186         }
187     }
188
189     /**
190      * Check if it is AAF feed OR existing feed.
191      *
192      * @param feedId the Feed ID
193      * @return true if it is valid
194      */
195     @SuppressWarnings("resource")
196     private boolean isAAFFeed(int feedId) {
197         try {
198             Feed feed = Feed.getFeedById(feedId);
199             if (feed != null) {
200                 if (!((feed.getAafInstance().equalsIgnoreCase("legacy")) || feed.getAafInstance() == null || feed.getAafInstance().equals(""))) { //also apply null check and empty check too
201                     aafInstance = feed.getAafInstance();
202                     String message = "DRProvCadiFilter.isAAFFeed: aafInstance-:" + aafInstance + "; feedId:- " + feedId;
203                     intlogger.debug(message);
204                     return true;
205                 } else {
206                     return false;
207                 }
208             } else {
209                 String message = "DRProvCadiFilter.isAAFFeed; Feed does not exist FeedID:-" + feedId;
210                 intlogger.debug(message);
211             }
212
213         } catch (Exception e) {
214             intlogger.error("PROV0073 DRProvCadiFilter.isAAFFeed: ", e.getMessage());
215             return false;
216         }
217         return false;
218     }
219
220     /**
221      * Check if it is AAF sub OR existing sub.
222      *
223      * @param subId the Sub ID
224      * @return true if it is valid
225      */
226     @SuppressWarnings("resource")
227     private boolean isAAFSubscriber(int subId) {
228         try {
229             Subscription subscriber = Subscription.getSubscriptionById(subId);
230             if (subscriber != null) {
231                 if (!((subscriber.getAafInstance().equalsIgnoreCase("legacy")) || subscriber.getAafInstance() == null || subscriber.getAafInstance().equals(""))) { //also apply null check and empty check too
232                     aafInstance = subscriber.getAafInstance();
233                     String message = "DRProvCadiFilter.isAAFSubscriber: aafInstance-:" + aafInstance + "; subId:- " + subId;
234                     intlogger.debug(message);
235                     return true;
236                 } else {
237                     return false;
238                 }
239             } else {
240                 String message = "DRProvCadiFilter.isAAFSubscriber; Subscriber does not exist subId:-" + subId;
241                 intlogger.debug(message);
242             }
243         } catch (Exception e) {
244             intlogger.error("PROV0073 DRProvCadiFilter.isAAFSubscriber: ", e.getMessage());
245             return false;
246         }
247         return false;
248     }
249
250 }