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 org.apache.log4j.Logger;
24 import org.onap.aaf.cadi.PropAccess;
25 import org.onap.aaf.cadi.filter.CadiFilter;
26 import org.onap.dmaap.datarouter.provisioning.BaseServlet;
27 import org.onap.dmaap.datarouter.provisioning.beans.EventLogRecord;
28 import org.onap.dmaap.datarouter.provisioning.beans.Feed;
29 import org.onap.dmaap.datarouter.provisioning.beans.Subscription;
31 import javax.servlet.FilterChain;
32 import javax.servlet.ServletException;
33 import javax.servlet.ServletRequest;
34 import javax.servlet.ServletResponse;
35 import javax.servlet.http.HttpServletRequest;
36 import javax.servlet.http.HttpServletResponse;
37 import java.io.IOException;
40 public class DRProvCadiFilter extends CadiFilter {
41 private static Logger eventlogger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.events");
42 private static Logger intlogger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");
43 private String aafInstance = "";
45 public DRProvCadiFilter(boolean init, PropAccess access) throws ServletException {
50 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
51 HttpServletRequest httpRequest = null;
52 HttpServletResponse httpResponse = null;
55 httpRequest = (HttpServletRequest) request;
56 httpResponse = (HttpServletResponse) response;
57 } catch (ClassCastException e) {
59 throw new ServletException("Only serving HTTP today", e);
60 } catch (ServletException e1) {
61 intlogger.error("PROV7001 DRProvCadiFilter.doFilter: ", e1);
64 EventLogRecord elr = new EventLogRecord(httpRequest);
65 String excludeAAF = httpRequest.getHeader(BaseServlet.EXCLUDE_AAF_HEADER);//send this param value as true, if want to add legacy feed/subscriber in AAF env
67 String pathUrl = httpRequest.getServletPath();
68 if (!(pathUrl.contains("internal") ||
69 pathUrl.contains("sublog") ||
70 pathUrl.contains("feedlog") ||
71 pathUrl.contains("statistics") ||
72 pathUrl.contains("publish") ||
73 pathUrl.contains("group"))) {
75 String method = httpRequest.getMethod().toUpperCase();
76 if (!(method.equals("POST"))) { // if request method is PUT method (publish or Feed update) Needs to check for DELETE
77 if (method.equals("PUT") || method.equals("DELETE")) {
78 if ((pathUrl.contains("subs"))) {//edit subscriber
79 int subId = BaseServlet.getIdFromPath(httpRequest);
81 String message = String.format("Invalid request URI - %s", httpRequest.getPathInfo());
82 elr.setMessage(message);
83 elr.setResult(HttpServletResponse.SC_NOT_FOUND);
84 eventlogger.info(elr);
85 httpResponse.sendError(HttpServletResponse.SC_NOT_FOUND, message);
88 if (isAAFSubscriber(subId)) {//edit AAF Subscriber
89 String message = String.format("DRProvCadiFilter - Edit AAF Subscriber : %d : AAF Instance - %s", subId, aafInstance);
90 elr.setMessage(message);
91 eventlogger.info(elr);
92 //request.setAttribute("aafInstance", aafInstance);// no need to set it in request since it is taken care in respective servlets
93 super.doFilter(request, response, chain);
95 } else {//Edit or publish legacy Subscriber
96 String message = "DRProvCadiFilter - Edit/Publish Legacy Subscriber :" + subId;
97 elr.setMessage(message);
98 eventlogger.info(elr);
99 chain.doFilter(request, response);
102 } else {//edit or publish Feed
103 int feedId = BaseServlet.getIdFromPath(httpRequest);
105 String message = "Invalid request URI - " + httpRequest.getPathInfo();
106 elr.setMessage(message);
107 elr.setResult(HttpServletResponse.SC_NOT_FOUND);
108 eventlogger.info(elr);
109 httpResponse.sendError(HttpServletResponse.SC_NOT_FOUND, message);
113 if (isAAFFeed(feedId)) {//edit AAF Feed
114 String message = "DRProvCadiFilter - Edit AAF Feed:" + feedId + ":" + "AAF Instance -" + aafInstance;
115 elr.setMessage(message);
116 eventlogger.info(elr);
117 super.doFilter(request, response, chain);
119 } else {//Edit or publish legacy Feed
120 String message = "DRProvCadiFilter - Edit/Publish Legacy Feed:" + feedId;
121 elr.setMessage(message);
122 eventlogger.info(elr);
123 chain.doFilter(request, response);
126 } else {// in all other cases defaults to legacy behavior
127 String message = "DRProvCadiFilter - Default Legacy Feed/Subscriber URI -:" + httpRequest.getPathInfo();
128 elr.setMessage(message);
129 eventlogger.info(elr);
130 chain.doFilter(request, response);
133 //check to add legacy/AAF subscriber
134 if ((pathUrl.contains("subscribe"))) {//add subscriber
135 int feedId = BaseServlet.getIdFromPath(httpRequest);
137 String message = "Invalid request URI - " + httpRequest.getPathInfo();
138 elr.setMessage(message);
139 elr.setResult(HttpServletResponse.SC_NOT_FOUND);
140 eventlogger.info(elr);
141 httpResponse.sendError(HttpServletResponse.SC_NOT_FOUND, message);
144 if (isAAFFeed(feedId)) {//check if AAF Feed or legacy to add new subscriber
145 if (excludeAAF == null) {
146 String message = "DRProvCadiFilter -Invalid request Header Parmeter " + BaseServlet.EXCLUDE_AAF_HEADER + " = " + httpRequest.getHeader(BaseServlet.EXCLUDE_AAF_HEADER);
147 elr.setMessage(message);
148 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
149 eventlogger.info(elr);
150 httpResponse.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
153 if (excludeAAF.equalsIgnoreCase("true")) {//Check to add legacy subscriber to AAF Feed
154 String message = "DRProvCadiFilter - add legacy subscriber to AAF Feed, FeedID:" + feedId;
155 elr.setMessage(message);
156 eventlogger.info(elr);
157 chain.doFilter(request, response);
159 String message = "DRProvCadiFilter - Add AAF subscriber to AAF Feed, FeedID:" + feedId + ":" + "AAF Instance -" + aafInstance;
160 elr.setMessage(message);
161 eventlogger.info(elr);
162 super.doFilter(request, response, chain);
164 } else {//Add legacy susbcriber to legacy Feed
165 String message = "DRProvCadiFilter - add legacy subscriber to legacy Feed:" + feedId;
166 elr.setMessage(message);
167 eventlogger.info(elr);
168 chain.doFilter(request, response);
170 } else {//add AAF feed
171 if (excludeAAF == null) {
172 String message = "DRProvCadiFilter -Invalid request Header Parmeter " + BaseServlet.EXCLUDE_AAF_HEADER + " = " + httpRequest.getHeader(BaseServlet.EXCLUDE_AAF_HEADER);
173 elr.setMessage(message);
174 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
175 eventlogger.info(elr);
176 httpResponse.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
179 if (excludeAAF.equalsIgnoreCase("true")) {//add legacy feed
180 String message = "DRProvCadiFilter - Create new legacy Feed : EXCLUDE_AAF = " + excludeAAF;
181 elr.setMessage(message);
182 eventlogger.info(elr);
183 chain.doFilter(request, response);
184 } else {//add AAF Feed
185 String message = "DRProvCadiFilter - Create new AAF Feed : EXCLUDE_AAF = " + excludeAAF;
186 elr.setMessage(message);
187 eventlogger.info(elr);
188 super.doFilter(request, response, chain);
193 //All other requests default to (Non CADI) legacy
194 chain.doFilter(request, response);
199 * Check if it is AAF feed OR existing feed.
201 * @param feedId the Feed ID
202 * @return true if it is valid
204 @SuppressWarnings("resource")
205 private boolean isAAFFeed(int feedId) {
207 Feed feed = Feed.getFeedById(feedId);
209 if (!((feed.getAafInstance().equalsIgnoreCase("legacy")) || feed.getAafInstance() == null || feed.getAafInstance().equals(""))) { //also apply null check and empty check too
210 aafInstance = feed.getAafInstance();
211 String message = "DRProvCadiFilter.isAAFFeed: aafInstance-:" + aafInstance + "; feedId:- " + feedId;
212 intlogger.debug(message);
218 String message = "DRProvCadiFilter.isAAFFeed; Feed does not exist FeedID:-" + feedId;
219 intlogger.debug(message);
222 } catch (Exception e) {
223 intlogger.error("PROV0073 DRProvCadiFilter.isAAFFeed: ", e);
230 * Check if it is AAF sub OR existing sub.
232 * @param subId the Sub ID
233 * @return true if it is valid
235 @SuppressWarnings("resource")
236 private boolean isAAFSubscriber(int subId) {
238 Subscription subscriber = Subscription.getSubscriptionById(subId);
239 if (subscriber != null) {
240 if (!((subscriber.getAafInstance().equalsIgnoreCase("legacy")) || subscriber.getAafInstance() == null || subscriber.getAafInstance().equals(""))) { //also apply null check and empty check too
241 aafInstance = subscriber.getAafInstance();
242 String message = "DRProvCadiFilter.isAAFSubscriber: aafInstance-:" + aafInstance + "; subId:- " + subId;
243 intlogger.debug(message);
249 String message = "DRProvCadiFilter.isAAFSubscriber; Subscriber does not exist subId:-" + subId;
250 intlogger.debug(message);
252 } catch (Exception e) {
253 intlogger.error("PROV0073 DRProvCadiFilter.isAAFSubscriber: ", e);