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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
21 package org.onap.dmaap.datarouter.provisioning.utils;
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;
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;
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 = "";
46 public DRProvCadiFilter(boolean init, PropAccess access) throws ServletException {
51 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
52 HttpServletRequest httpRequest = (HttpServletRequest) request;
53 HttpServletResponse httpResponse = (HttpServletResponse) response;
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
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"))) {
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);
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);
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);
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);
93 } else {//edit or publish Feed
94 int feedId = BaseServlet.getIdFromPath(httpRequest);
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);
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);
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);
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);
124 //check to add legacy/AAF subscriber
125 if ((pathUrl.contains("subscribe"))) {//add subscriber
126 int feedId = BaseServlet.getIdFromPath(httpRequest);
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);
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);
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);
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);
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);
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);
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);
184 //All other requests default to (Non CADI) legacy
185 chain.doFilter(request, response);
190 * Check if it is AAF feed OR existing feed.
192 * @param feedId the Feed ID
193 * @return true if it is valid
195 @SuppressWarnings("resource")
196 private boolean isAAFFeed(int feedId) {
198 Feed feed = Feed.getFeedById(feedId);
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);
209 String message = "DRProvCadiFilter.isAAFFeed; Feed does not exist FeedID:-" + feedId;
210 intlogger.debug(message);
213 } catch (Exception e) {
214 intlogger.error("PROV0073 DRProvCadiFilter.isAAFFeed: " + e.getMessage(), e);
221 * Check if it is AAF sub OR existing sub.
223 * @param subId the Sub ID
224 * @return true if it is valid
226 @SuppressWarnings("resource")
227 private boolean isAAFSubscriber(int subId) {
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);
240 String message = "DRProvCadiFilter.isAAFSubscriber; Subscriber does not exist subId:-" + subId;
241 intlogger.debug(message);
243 } catch (Exception e) {
244 intlogger.error("PROV0073 DRProvCadiFilter.isAAFSubscriber: " + e.getMessage(), e);