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;
30 import javax.servlet.http.HttpServletRequest;
31 import javax.servlet.http.HttpServletResponse;
33 import org.json.JSONObject;
34 import org.onap.dmaap.datarouter.provisioning.beans.EventLogRecord;
35 import org.onap.dmaap.datarouter.provisioning.beans.Group;
37 import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.sendResponseError;
40 * This servlet handles provisioning for the <groups> which is generated by the provisioning
41 * server to handle the creation and inspection of groups for FEEDS and SUBSCRIPTIONS.
43 * @author Vikram Singh
45 * @version $Id: Group.java,v 1.0 2016/07/19
47 @SuppressWarnings("serial")
48 public class GroupServlet extends ProxyServlet {
50 public static final String MISSING_HEADER_MESSAGE = "Missing " + BEHALF_HEADER + " header.";
53 * DELETE on the <GRUPS> -- not supported.
56 public void doDelete(HttpServletRequest req, HttpServletResponse resp) {
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.error(elr.toString());
62 sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);
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) {
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.error(elr.toString());
77 sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger);
80 if (isProxyServer()) {
81 super.doGet(req, resp);
84 String bhdr = req.getHeader(BEHALF_HEADER);
86 elr.setMessage(MISSING_HEADER_MESSAGE);
87 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
88 eventlogger.error(elr.toString());
89 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, MISSING_HEADER_MESSAGE, eventlogger);
93 int groupid = getIdFromPath(req);
95 message = "Missing or bad group number.";
96 elr.setMessage(message);
97 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
98 eventlogger.error(elr.toString());
99 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
103 Group gup = Group.getGroupById(groupid);
105 elr.setResult(HttpServletResponse.SC_OK);
106 eventlogger.info(elr.toString());
107 resp.setStatus(HttpServletResponse.SC_OK);
108 resp.setContentType(GROUPFULL_CONTENT_TYPE);
110 resp.getOutputStream().print(gup.asJSONObject().toString());
111 } catch (IOException ioe) {
112 eventlogger.error("PROV0121 GroupServlet.doGet: " + ioe.getMessage(), ioe);
117 * PUT on the <GROUPS> -- not supported.
120 public void doPut(HttpServletRequest req, HttpServletResponse resp) {
121 EventLogRecord elr = new EventLogRecord(req);
122 String message = isAuthorizedForProvisioning(req);
123 if (message != null) {
124 elr.setMessage(message);
125 elr.setResult(HttpServletResponse.SC_FORBIDDEN);
126 eventlogger.error(elr.toString());
127 sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger);
130 if (isProxyServer()) {
131 super.doPut(req, resp);
134 String bhdr = req.getHeader(BEHALF_HEADER);
136 elr.setMessage(MISSING_HEADER_MESSAGE);
137 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
138 eventlogger.error(elr.toString());
139 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, MISSING_HEADER_MESSAGE, eventlogger);
142 int groupid = getIdFromPath(req);
144 message = "Missing or bad groupid.";
145 elr.setMessage(message);
146 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
147 eventlogger.error(elr.toString());
148 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
151 Group oldgup = Group.getGroupById(groupid);
152 if (oldgup == null) {
153 message = "Missing or bad group number.";
154 elr.setMessage(message);
155 elr.setResult(HttpServletResponse.SC_NOT_FOUND);
156 eventlogger.error(elr.toString());
157 sendResponseError(resp, HttpServletResponse.SC_NOT_FOUND, message, eventlogger);
161 // check content type is SUB_CONTENT_TYPE, version 1.0
162 ContentHeader ch = getContentHeader(req);
163 String ver = ch.getAttribute("version");
164 if (!ch.getType().equals(GROUP_BASECONTENT_TYPE) || !("1.0".equals(ver) || "2.0".equals(ver))) {
165 message = "Incorrect content-type";
166 elr.setMessage(message);
167 elr.setResult(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
168 eventlogger.error(elr.toString());
169 sendResponseError(resp, HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, message, eventlogger);
172 JSONObject jo = getJSONfromInput(req);
175 elr.setMessage(message);
176 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
177 eventlogger.error(elr.toString());
178 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
181 if (intlogger.isDebugEnabled())
182 intlogger.debug(jo.toString());
186 } catch (InvalidObjectException e) {
187 message = e.getMessage();
188 elr.setMessage(message);
189 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
190 eventlogger.error(elr.toString(), e);
191 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
194 gup.setGroupid(oldgup.getGroupid());
195 Group gb2 = Group.getGroupMatching(gup, oldgup.getGroupid());
197 eventlogger.warn("PROV0011 Creating a duplicate Group: "+gup.getName());
198 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
199 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, "Duplicate Group:"+gup.getName(), eventlogger);
203 // Update Groups table entries
206 elr.setResult(HttpServletResponse.SC_OK);
207 eventlogger.info(elr.toString());
208 resp.setStatus(HttpServletResponse.SC_OK);
209 resp.setContentType(GROUPFULL_CONTENT_TYPE);
211 resp.getOutputStream().print(gup.asJSONObject().toString());
212 } catch (IOException ioe) {
213 eventlogger.error("PROV0122 GroupServlet.doPut: " + ioe.getMessage(), ioe);
215 provisioningDataChanged();
217 // Something went wrong with the UPDATE
218 elr.setResult(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
219 eventlogger.error(elr.toString());
220 sendResponseError(resp, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, DB_PROBLEM_MSG, eventlogger);
224 * POST on the <groups> -- create a new GROUPS to a feed.
225 * See the <i>Creating a GROUPS</i> section in the <b>Provisioning API</b>
226 * document for details on how this method should be invoked.
229 public void doPost(HttpServletRequest req, HttpServletResponse resp) {
230 EventLogRecord elr = new EventLogRecord(req);
231 String message = isAuthorizedForProvisioning(req);
232 if (message != null) {
233 elr.setMessage(message);
234 elr.setResult(HttpServletResponse.SC_FORBIDDEN);
235 eventlogger.error(elr.toString());
236 sendResponseError(resp, HttpServletResponse.SC_FORBIDDEN, message, eventlogger);
239 if (isProxyServer()) {
240 super.doPost(req, resp);
243 String bhdr = req.getHeader(BEHALF_HEADER);
245 elr.setMessage(MISSING_HEADER_MESSAGE);
246 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
247 eventlogger.error(elr.toString());
248 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, MISSING_HEADER_MESSAGE, eventlogger);
252 // check content type is SUB_CONTENT_TYPE, version 1.0
253 ContentHeader ch = getContentHeader(req);
254 String ver = ch.getAttribute("version");
255 if (!ch.getType().equals(GROUP_BASECONTENT_TYPE) || !(ver.equals("1.0") || ver.equals("2.0"))) {
256 intlogger.debug("Content-type is: "+req.getHeader("Content-Type"));
257 message = "Incorrect content-type";
258 elr.setMessage(message);
259 elr.setResult(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
260 eventlogger.error(elr.toString());
261 sendResponseError(resp, HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, message, eventlogger);
264 JSONObject jo = getJSONfromInput(req);
267 elr.setMessage(message);
268 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
269 eventlogger.error(elr.toString());
270 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
273 if (intlogger.isDebugEnabled())
274 intlogger.debug(jo.toString());
279 } catch (InvalidObjectException e) {
280 message = e.getMessage();
281 elr.setMessage(message);
282 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
283 eventlogger.error(elr.toString(), e);
284 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, message, eventlogger);
288 // Check if this group already exists; not an error (yet), just warn
289 Group gb2 = Group.getGroupMatching(gup);
291 eventlogger.warn("PROV0011 Creating a duplicate Group: "+gup.getName());
292 elr.setResult(HttpServletResponse.SC_BAD_REQUEST);
293 sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, "Duplicate Group:"+gup.getName(), eventlogger);
297 // Create GROUPS table entries
300 elr.setResult(HttpServletResponse.SC_CREATED);
301 eventlogger.info(elr.toString());
302 resp.setStatus(HttpServletResponse.SC_CREATED);
303 resp.setContentType(GROUPFULL_CONTENT_TYPE);
305 resp.getOutputStream().print(gup.asJSONObject().toString());
306 } catch (IOException ioe) {
307 eventlogger.error("PROV0122 GroupServlet.doPost: " + ioe.getMessage(), ioe);
309 provisioningDataChanged();
311 // Something went wrong with the INSERT
312 elr.setResult(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
313 eventlogger.error(elr.toString());
314 sendResponseError(resp, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, DB_PROBLEM_MSG, eventlogger);