1 /*******************************************************************************
2 * ============LICENSE_START==================================================
4 * * ===========================================================================
5 * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6 * * ===========================================================================
7 * * Licensed under the Apache License, Version 2.0 (the "License");
8 * * you may not use this file except in compliance with the License.
9 * * You may obtain a copy of the License at
11 * * http://www.apache.org/licenses/LICENSE-2.0
13 * * Unless required by applicable law or agreed to in writing, software
14 * * distributed under the License is distributed on an "AS IS" BASIS,
15 * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * * See the License for the specific language governing permissions and
17 * * limitations under the License.
18 * * ============LICENSE_END====================================================
20 * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22 ******************************************************************************/
25 package org.onap.dmaap.datarouter.provisioning;
27 import java.io.IOException;
28 import java.io.InvalidObjectException;
29 import java.util.Collection;
31 import javax.servlet.http.HttpServletRequest;
32 import javax.servlet.http.HttpServletResponse;
34 import org.json.JSONObject;
35 import org.onap.dmaap.datarouter.authz.AuthorizationResponse;
36 import org.onap.dmaap.datarouter.provisioning.BaseServlet.ContentHeader;
37 import org.onap.dmaap.datarouter.provisioning.beans.EventLogRecord;
38 import org.onap.dmaap.datarouter.provisioning.beans.Group;
39 import org.onap.dmaap.datarouter.provisioning.beans.Subscription;
40 import org.onap.dmaap.datarouter.provisioning.utils.JSONUtilities;
43 * This servlet handles provisioning for the <groups> which is generated by the provisioning
44 * server to handle the creation and inspection of groups for FEEDS and SUBSCRIPTIONS.
46 * @author Vikram Singh
48 * @version $Id: Group.java,v 1.0 2016/07/19
50 @SuppressWarnings("serial")
51 public class GroupServlet extends ProxyServlet {
53 * DELETE on the <GRUPS> -- not supported.
56 public void doDelete(HttpServletRequest req, HttpServletResponse resp) throws IOException {
57 String message = "DELETE not allowed for the GROUPS.";
58 EventLogRecord elr = new EventLogRecord(req);
59 elr.setMessage(message);
60 elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
61 eventlogger.info(elr);
62 resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, message);
65 * GET on the the list of groups to a feed/sub.
66 * See the <i>Groups Collection Query</i> section in the <b>Provisioning API</b>
67 * document for details on how this method should be invoked.
70 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
71 EventLogRecord elr = new EventLogRecord(req);
72 String message = isAuthorizedForProvisioning(req);
73 if (message != null) {
74 elr.setMessage(message);
75 elr.setResult(HttpServletResponse.SC_FORBIDDEN);
76 eventlogger.info(elr);
77 resp.sendError(HttpServletResponse.SC_FORBIDDEN, message);
80 if (isProxyServer()) {
81 super.doGet(req, resp);
84 String bhdr = req.getHeader(BEHALF_HEADER);
86 message = "Missing "+BEHALF_HEADER+" header.";
87 elr.setMessage(message);
88 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
89 eventlogger.info(elr);
90 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
94 // Check with the Authorizer
95 /*AuthorizationResponse aresp = authz.decide(req);
96 if (! aresp.isAuthorized()) {
97 message = "Policy Engine disallows access.";
98 elr.setMessage(message);
99 elr.setResult(HttpServletResponse.SC_FORBIDDEN);
100 eventlogger.info(elr);
101 resp.sendError(HttpServletResponse.SC_FORBIDDEN, message);
106 /*ContentHeader ch = getContentHeader(req);
107 String ver = ch.getAttribute("version");
108 if (!ch.getType().equals(GROUPLIST_CONTENT_TYPE) || !(ver.equals("1.0") || ver.equals("2.0"))) {
109 intlogger.debug("Content-type is: "+req.getHeader("Content-Type"));
110 message = "Incorrect content-type";
111 elr.setMessage(message);
112 elr.setResult(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
113 eventlogger.info(elr);
114 resp.sendError(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, message);
119 int groupid = getIdFromPath(req);
121 message = "Missing or bad group number.";
122 elr.setMessage(message);
123 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
124 eventlogger.info(elr);
125 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
129 Group gup = Group.getGroupById(groupid);
131 elr.setResult(HttpServletResponse.SC_OK);
132 eventlogger.info(elr);
133 resp.setStatus(HttpServletResponse.SC_OK);
134 resp.setContentType(GROUPFULL_CONTENT_TYPE);
135 resp.getOutputStream().print(gup.asJSONObject().toString());
137 // Display a list of Groups
138 /*Collection<Group> list = Group.getGroupById(groupid);
139 String t = JSONUtilities.createJSONArray(list);
142 elr.setResult(HttpServletResponse.SC_OK);
143 eventlogger.info(elr);
144 resp.setStatus(HttpServletResponse.SC_OK);
145 resp.setContentType(GROUPLIST_CONTENT_TYPE);
146 resp.getOutputStream().print(t);*/
149 * PUT on the <GROUPS> -- not supported.
152 public void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException {
153 EventLogRecord elr = new EventLogRecord(req);
154 String message = isAuthorizedForProvisioning(req);
155 if (message != null) {
156 elr.setMessage(message);
157 elr.setResult(HttpServletResponse.SC_FORBIDDEN);
158 eventlogger.info(elr);
159 resp.sendError(HttpServletResponse.SC_FORBIDDEN, message);
162 if (isProxyServer()) {
163 super.doPut(req, resp);
166 String bhdr = req.getHeader(BEHALF_HEADER);
168 message = "Missing "+BEHALF_HEADER+" header.";
169 elr.setMessage(message);
170 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
171 eventlogger.info(elr);
172 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
175 int groupid = getIdFromPath(req);
177 message = "Missing or bad groupid.";
178 elr.setMessage(message);
179 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
180 eventlogger.info(elr);
181 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
184 Group oldgup = Group.getGroupById(groupid);
185 if (oldgup == null) {
186 message = "Missing or bad group number.";
187 elr.setMessage(message);
188 elr.setResult(HttpServletResponse.SC_NOT_FOUND);
189 eventlogger.info(elr);
190 resp.sendError(HttpServletResponse.SC_NOT_FOUND, message);
193 // Check with the Authorizer
194 /*AuthorizationResponse aresp = authz.decide(req);
195 if (! aresp.isAuthorized()) {
196 message = "Policy Engine disallows access.";
197 elr.setMessage(message);
198 elr.setResult(HttpServletResponse.SC_FORBIDDEN);
199 eventlogger.info(elr);
200 resp.sendError(HttpServletResponse.SC_FORBIDDEN, message);
203 // check content type is SUB_CONTENT_TYPE, version 1.0
204 ContentHeader ch = getContentHeader(req);
205 String ver = ch.getAttribute("version");
206 if (!ch.getType().equals(GROUP_BASECONTENT_TYPE) || !(ver.equals("1.0") || ver.equals("2.0"))) {
207 message = "Incorrect content-type";
208 elr.setMessage(message);
209 elr.setResult(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
210 eventlogger.info(elr);
211 resp.sendError(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, message);
214 JSONObject jo = getJSONfromInput(req);
216 message = "Badly formed JSON";
217 elr.setMessage(message);
218 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
219 eventlogger.info(elr);
220 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
223 if (intlogger.isDebugEnabled())
224 intlogger.debug(jo.toString());
228 } catch (InvalidObjectException e) {
229 message = e.getMessage();
230 elr.setMessage(message);
231 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
232 eventlogger.info(elr);
233 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
236 gup.setGroupid(oldgup.getGroupid());
239 Group gb2 = Group.getGroupMatching(gup, oldgup.getGroupid());
241 eventlogger.warn("PROV0011 Creating a duplicate Group: "+gup.getName());
242 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
243 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "Duplicate Group:"+gup.getName());
247 // Update Groups table entries
250 elr.setResult(HttpServletResponse.SC_OK);
251 eventlogger.info(elr);
252 resp.setStatus(HttpServletResponse.SC_OK);
253 resp.setContentType(GROUPFULL_CONTENT_TYPE);
254 resp.getOutputStream().print(gup.asJSONObject().toString());
255 provisioningDataChanged();
257 // Something went wrong with the UPDATE
258 elr.setResult(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
259 eventlogger.info(elr);
260 resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, DB_PROBLEM_MSG);
264 * POST on the <groups> -- create a new GROUPS to a feed.
265 * See the <i>Creating a GROUPS</i> section in the <b>Provisioning API</b>
266 * document for details on how this method should be invoked.
269 public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
270 EventLogRecord elr = new EventLogRecord(req);
271 String message = isAuthorizedForProvisioning(req);
272 if (message != null) {
273 elr.setMessage(message);
274 elr.setResult(HttpServletResponse.SC_FORBIDDEN);
275 eventlogger.info(elr);
276 resp.sendError(HttpServletResponse.SC_FORBIDDEN, message);
279 if (isProxyServer()) {
280 super.doPost(req, resp);
283 String bhdr = req.getHeader(BEHALF_HEADER);
285 message = "Missing "+BEHALF_HEADER+" header.";
286 elr.setMessage(message);
287 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
288 eventlogger.info(elr);
289 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
292 /*int feedid = getIdFromPath(req);
294 message = "Missing or bad feed number.";
295 elr.setMessage(message);
296 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
297 eventlogger.info(elr);
298 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
301 Feed feed = Feed.getFeedById(feedid);
302 if (feed == null || feed.isDeleted()) {
303 message = "Missing or bad feed number.";
304 elr.setMessage(message);
305 elr.setResult(HttpServletResponse.SC_NOT_FOUND);
306 eventlogger.info(elr);
307 resp.sendError(HttpServletResponse.SC_NOT_FOUND, message);
310 // Check with the Authorizer
311 /*AuthorizationResponse aresp = authz.decide(req);
312 if (! aresp.isAuthorized()) {
313 message = "Policy Engine disallows access.";
314 elr.setMessage(message);
315 elr.setResult(HttpServletResponse.SC_FORBIDDEN);
316 eventlogger.info(elr);
317 resp.sendError(HttpServletResponse.SC_FORBIDDEN, message);
321 // check content type is SUB_CONTENT_TYPE, version 1.0
322 ContentHeader ch = getContentHeader(req);
323 String ver = ch.getAttribute("version");
324 if (!ch.getType().equals(GROUP_BASECONTENT_TYPE) || !(ver.equals("1.0") || ver.equals("2.0"))) {
325 intlogger.debug("Content-type is: "+req.getHeader("Content-Type"));
326 message = "Incorrect content-type";
327 elr.setMessage(message);
328 elr.setResult(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
329 eventlogger.info(elr);
330 resp.sendError(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, message);
333 JSONObject jo = getJSONfromInput(req);
335 message = "Badly formed JSON";
336 elr.setMessage(message);
337 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
338 eventlogger.info(elr);
339 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
342 if (intlogger.isDebugEnabled())
343 intlogger.debug(jo.toString());
348 } catch (InvalidObjectException e) {
349 message = e.getMessage();
350 elr.setMessage(message);
351 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
352 eventlogger.info(elr);
353 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, message);
356 //gup.setFeedid(feedid);
357 //sub.setSubscriber(bhdr); // set from X-ATT-DR-ON-BEHALF-OF header
359 // Check if this group already exists; not an error (yet), just warn
360 Group gb2 = Group.getGroupMatching(gup);
362 eventlogger.warn("PROV0011 Creating a duplicate Group: "+gup.getName());
363 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
364 resp.sendError(HttpServletResponse.SC_BAD_REQUEST, "Duplicate Group:"+gup.getName());
369 // Create GROUPS table entries
372 elr.setResult(HttpServletResponse.SC_CREATED);
373 eventlogger.info(elr);
374 resp.setStatus(HttpServletResponse.SC_CREATED);
375 resp.setContentType(GROUPFULL_CONTENT_TYPE);
376 resp.getOutputStream().print(gup.asJSONObject().toString());
377 provisioningDataChanged();
379 // Something went wrong with the INSERT
380 elr.setResult(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
381 eventlogger.info(elr);
382 resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, DB_PROBLEM_MSG);