2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017 AT&T Intellectual Property.
6 * Copyright © 2017 Amdocs
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
22 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
24 package org.openecomp.crud.service;
26 import org.apache.cxf.jaxrs.ext.PATCH;
27 import org.openecomp.auth.Auth;
28 import org.openecomp.cl.api.Logger;
29 import org.openecomp.cl.eelf.LoggerFactory;
30 import org.openecomp.crud.exception.CrudException;
31 import org.openecomp.crud.logging.CrudServiceMsgs;
32 import org.openecomp.crud.logging.LoggingUtil;
33 import org.openecomp.crud.util.CrudServiceConstants;
36 import java.security.cert.X509Certificate;
37 import java.util.HashMap;
38 import java.util.List;
40 import javax.security.auth.x500.X500Principal;
41 import javax.servlet.http.HttpServletRequest;
42 import javax.ws.rs.Consumes;
43 import javax.ws.rs.DELETE;
44 import javax.ws.rs.Encoded;
45 import javax.ws.rs.GET;
46 import javax.ws.rs.POST;
47 import javax.ws.rs.PUT;
48 import javax.ws.rs.Path;
49 import javax.ws.rs.PathParam;
50 import javax.ws.rs.Produces;
51 import javax.ws.rs.core.Context;
52 import javax.ws.rs.core.HttpHeaders;
53 import javax.ws.rs.core.MediaType;
54 import javax.ws.rs.core.Response;
55 import javax.ws.rs.core.Response.Status;
56 import javax.ws.rs.core.UriInfo;
58 public class CrudRestService {
60 private CrudGraphDataService crudGraphDataService;
61 Logger logger = LoggerFactory.getInstance().getLogger(CrudRestService.class.getName());
62 Logger auditLogger = LoggerFactory.getInstance().getAuditLogger(CrudRestService.class.getName());
65 private String mediaType = MediaType.APPLICATION_JSON;
66 public static final String HTTP_PATCH_METHOD_OVERRIDE = "X-HTTP-Method-Override";
68 public CrudRestService(CrudGraphDataService crudGraphDataService) throws Exception {
69 this.crudGraphDataService = crudGraphDataService;
70 this.auth = new Auth(CrudServiceConstants.CRD_AUTH_FILE);
74 POST, GET, PUT, DELETE, PATCH
79 public void startup() {
84 @Path("/{version}/{type}/{id}")
85 @Consumes({MediaType.APPLICATION_JSON})
86 @Produces({MediaType.APPLICATION_JSON})
87 public Response getVertex(String content, @PathParam("version") String version,
88 @PathParam("type") String type, @PathParam("id") String id,
89 @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
90 @Context UriInfo uriInfo, @Context HttpServletRequest req) {
91 LoggingUtil.initMdcContext(req, headers);
93 logger.debug("Incoming request..." + content);
94 Response response = null;
96 if (validateRequest(req, uri, content, Action.GET, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
99 String result = crudGraphDataService.getVertex(version, id, type);
100 response = Response.status(Status.OK).entity(result).type(mediaType).build();
101 } catch (CrudException ce) {
102 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
103 } catch (Exception e) {
104 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
107 response = Response.status(Status.FORBIDDEN).entity(content)
108 .type(MediaType.APPLICATION_JSON).build();
111 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
116 @Path("/{version}/{type}/")
117 @Consumes({MediaType.APPLICATION_JSON})
118 @Produces({MediaType.APPLICATION_JSON})
119 public Response getVertices(String content, @PathParam("version") String version,
120 @PathParam("type") String type, @PathParam("uri") @Encoded String uri,
121 @Context HttpHeaders headers, @Context UriInfo uriInfo,
122 @Context HttpServletRequest req) {
124 LoggingUtil.initMdcContext(req, headers);
126 logger.debug("Incoming request..." + content);
127 Response response = null;
128 if (validateRequest(req, uri, content, Action.GET, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
130 Map<String, String> filter = new HashMap<String, String>();
131 for (Map.Entry<String, List<String>> e : uriInfo.getQueryParameters().entrySet()) {
132 filter.put(e.getKey(), e.getValue().get(0));
136 String result = crudGraphDataService.getVertices(version, type, filter);
137 response = Response.status(Status.OK).entity(result).type(mediaType).build();
138 } catch (CrudException ce) {
139 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
140 } catch (Exception e) {
141 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
144 response = Response.status(Status.FORBIDDEN).entity(content)
145 .type(MediaType.APPLICATION_JSON).build();
148 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
153 @Path("/relationships/{version}/{type}/{id}")
154 @Consumes({MediaType.APPLICATION_JSON})
155 @Produces({MediaType.APPLICATION_JSON})
156 public Response getEdge(String content, @PathParam("version") String version,
157 @PathParam("type") String type, @PathParam("id") String id,
158 @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
159 @Context UriInfo uriInfo, @Context HttpServletRequest req) {
160 LoggingUtil.initMdcContext(req, headers);
162 logger.debug("Incoming request..." + content);
163 Response response = null;
165 if (validateRequest(req, uri, content, Action.GET, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
169 String result = crudGraphDataService.getEdge(version, id, type);
170 response = Response.status(Status.OK).entity(result).type(mediaType).build();
171 } catch (CrudException ce) {
172 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
173 } catch (Exception e) {
174 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
177 response = Response.status(Status.FORBIDDEN).entity(content)
178 .type(MediaType.APPLICATION_JSON).build();
181 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
186 @Path("/relationships/{version}/{type}/")
187 @Consumes({MediaType.APPLICATION_JSON})
188 @Produces({MediaType.APPLICATION_JSON})
189 public Response getEdges(String content, @PathParam("version") String version,
190 @PathParam("type") String type, @PathParam("uri") @Encoded String uri,
191 @Context HttpHeaders headers, @Context UriInfo uriInfo,
192 @Context HttpServletRequest req) {
194 LoggingUtil.initMdcContext(req, headers);
196 logger.debug("Incoming request..." + content);
197 Response response = null;
199 if (validateRequest(req, uri, content, Action.GET, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
201 Map<String, String> filter = new HashMap<String, String>();
202 for (Map.Entry<String, List<String>> e : uriInfo.getQueryParameters().entrySet()) {
203 filter.put(e.getKey(), e.getValue().get(0));
207 String result = crudGraphDataService.getEdges(version, type, filter);
208 response = Response.status(Status.OK).entity(result).type(mediaType).build();
209 } catch (CrudException ce) {
210 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
211 } catch (Exception e) {
212 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
215 response = Response.status(Status.FORBIDDEN).entity(content)
216 .type(MediaType.APPLICATION_JSON).build();
220 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
225 @Path("/relationships/{version}/{type}/")
226 @Consumes({MediaType.APPLICATION_JSON})
227 @Produces({MediaType.APPLICATION_JSON})
228 public Response updateEdgeWithoutId(String content, @Context HttpHeaders headers, @Context HttpServletRequest req) {
230 LoggingUtil.initMdcContext(req, headers);
232 logger.debug("Incoming request..." + content);
233 Response response = Response.status (Status.BAD_REQUEST).entity ("Cannot Update Edge Without Specifying Id in URL").build();
235 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
240 @Path("/relationships/{version}/{type}/{id}")
241 @Consumes({MediaType.APPLICATION_JSON})
242 @Produces({MediaType.APPLICATION_JSON})
243 public Response updateEdge(String content, @PathParam("version") String version,
244 @PathParam("type") String type, @PathParam("id") String id,
245 @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
246 @Context UriInfo uriInfo, @Context HttpServletRequest req) {
248 LoggingUtil.initMdcContext(req, headers);
250 logger.debug("Incoming request..." + content);
251 Response response = null;
253 if (validateRequest(req, uri, content, Action.PUT, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
256 EdgePayload payload = EdgePayload.fromJson(content);
257 if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
258 throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
260 if (payload.getId() != null && !payload.getId().equals(id)) {
261 throw new CrudException("ID Mismatch", Status.BAD_REQUEST);
265 if (headers.getRequestHeaders().getFirst(HTTP_PATCH_METHOD_OVERRIDE) != null
266 && headers.getRequestHeaders().getFirst(HTTP_PATCH_METHOD_OVERRIDE)
267 .equalsIgnoreCase("PATCH")) {
268 result = crudGraphDataService.patchEdge(version, id, type, payload);
271 result = crudGraphDataService.updateEdge(version, id, type, payload);
274 response = Response.status(Status.OK).entity(result).type(mediaType).build();
275 } catch (CrudException ce) {
276 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
277 } catch (Exception e) {
278 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
281 response = Response.status(Status.FORBIDDEN).entity(content)
282 .type(MediaType.APPLICATION_JSON).build();
286 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
291 @Path("/relationships/{version}/{type}/{id}")
292 @Consumes({"application/merge-patch+json"})
293 @Produces({MediaType.APPLICATION_JSON})
294 public Response patchEdge(String content, @PathParam("version") String version,
295 @PathParam("type") String type, @PathParam("id") String id,
296 @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
297 @Context UriInfo uriInfo, @Context HttpServletRequest req) {
299 LoggingUtil.initMdcContext(req, headers);
301 logger.debug("Incoming request..." + content);
302 Response response = null;
303 if (validateRequest(req, uri, content, Action.PATCH,
304 CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
307 EdgePayload payload = EdgePayload.fromJson(content);
308 if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
309 throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
311 if (payload.getId() != null && !payload.getId().equals(id)) {
312 throw new CrudException("ID Mismatch", Status.BAD_REQUEST);
315 String result = crudGraphDataService.patchEdge(version, id, type, payload);
316 response = Response.status(Status.OK).entity(result).type(mediaType).build();
317 } catch (CrudException ce) {
318 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
319 } catch (Exception e) {
320 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
323 response = Response.status(Status.FORBIDDEN).entity(content)
324 .type(MediaType.APPLICATION_JSON).build();
327 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
332 @Path("/{version}/{type}/{id}")
333 @Consumes({MediaType.APPLICATION_JSON})
334 @Produces({MediaType.APPLICATION_JSON})
335 public Response updateVertex(String content, @PathParam("version") String version,
336 @PathParam("type") String type, @PathParam("id") String id,
337 @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
338 @Context UriInfo uriInfo, @Context HttpServletRequest req) {
340 LoggingUtil.initMdcContext(req, headers);
342 logger.debug("Incoming request..." + content);
343 Response response = null;
345 if (validateRequest(req, uri, content, Action.PUT, CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
348 VertexPayload payload = VertexPayload.fromJson(content);
349 if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
350 throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
352 if (payload.getId() != null && !payload.getId().equals(id)) {
353 throw new CrudException("ID Mismatch", Status.BAD_REQUEST);
356 if (headers.getRequestHeaders().getFirst(HTTP_PATCH_METHOD_OVERRIDE) != null
357 && headers.getRequestHeaders().getFirst(HTTP_PATCH_METHOD_OVERRIDE)
358 .equalsIgnoreCase("PATCH")) {
359 result = crudGraphDataService.patchVertex(version, id, type, payload);
362 result = crudGraphDataService.updateVertex(version, id, type, payload);
364 response = Response.status(Status.OK).entity(result).type(mediaType).build();
365 } catch (CrudException ce) {
366 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
367 } catch (Exception e) {
368 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
371 response = Response.status(Status.FORBIDDEN).entity(content)
372 .type(MediaType.APPLICATION_JSON).build();
375 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
380 @Path("/{version}/{type}/{id}")
381 @Consumes({"application/merge-patch+json"})
382 @Produces({MediaType.APPLICATION_JSON})
383 public Response patchVertex(String content, @PathParam("version") String version,
384 @PathParam("type") String type, @PathParam("id") String id,
385 @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
386 @Context UriInfo uriInfo, @Context HttpServletRequest req) {
388 LoggingUtil.initMdcContext(req, headers);
390 logger.debug("Incoming request..." + content);
391 Response response = null;
393 if (validateRequest(req, uri, content, Action.PATCH,
394 CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
396 VertexPayload payload = VertexPayload.fromJson(content);
397 if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
398 throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
400 if (payload.getId() != null && !payload.getId().equals(id)) {
401 throw new CrudException("ID Mismatch", Status.BAD_REQUEST);
404 String result = crudGraphDataService.patchVertex(version, id, type, payload);
405 response = Response.status(Status.OK).entity(result).type(mediaType).build();
406 } catch (CrudException ce) {
407 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
408 } catch (Exception e) {
409 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
412 response = Response.status(Status.FORBIDDEN).entity(content)
413 .type(MediaType.APPLICATION_JSON).build();
416 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
421 @Path("/{version}/{type}/")
422 @Consumes({MediaType.APPLICATION_JSON})
423 @Produces({MediaType.APPLICATION_JSON})
424 public Response addVertex(String content, @PathParam("version") String version,
425 @PathParam("type") String type, @PathParam("uri") @Encoded String uri,
426 @Context HttpHeaders headers, @Context UriInfo uriInfo,
427 @Context HttpServletRequest req) {
429 LoggingUtil.initMdcContext(req, headers);
431 logger.debug("Incoming request..." + content);
432 Response response = null;
434 if (validateRequest(req, uri, content, Action.POST,
435 CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
438 VertexPayload payload = VertexPayload.fromJson(content);
439 if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
440 throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
442 if (payload.getId() != null) {
443 throw new CrudException("ID specified , use Http PUT to update Vertex",
447 if (payload.getType() != null && !payload.getType().equals(type)) {
448 throw new CrudException("Vertex Type mismatch", Status.BAD_REQUEST);
451 String result = crudGraphDataService.addVertex(version, type, payload);
452 response = Response.status(Status.CREATED).entity(result).type(mediaType).build();
453 } catch (CrudException ce) {
454 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
455 } catch (Exception e) {
456 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
459 response = Response.status(Status.FORBIDDEN).entity(content)
460 .type(MediaType.APPLICATION_JSON).build();
463 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
469 @Consumes({MediaType.APPLICATION_JSON})
470 @Produces({MediaType.APPLICATION_JSON})
471 public Response addVertex(String content, @PathParam("version") String version,
472 @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
473 @Context UriInfo uriInfo, @Context HttpServletRequest req) {
475 LoggingUtil.initMdcContext(req, headers);
477 logger.debug("Incoming request..." + content);
478 Response response = null;
480 if (validateRequest(req, uri, content, Action.POST,
481 CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
484 VertexPayload payload = VertexPayload.fromJson(content);
485 if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
486 throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
488 if (payload.getId() != null) {
489 throw new CrudException("ID specified , use Http PUT to update Vertex",
493 if (payload.getType() == null || payload.getType().isEmpty()) {
494 throw new CrudException("Missing Vertex Type ", Status.BAD_REQUEST);
496 String result = crudGraphDataService.addVertex(version, payload.getType(), payload);
497 response = Response.status(Status.CREATED).entity(result).type(mediaType).build();
498 } catch (CrudException ce) {
499 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
500 } catch (Exception e) {
501 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
504 response = Response.status(Status.FORBIDDEN).entity(content)
505 .type(MediaType.APPLICATION_JSON).build();
508 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
513 @Path("/relationships/{version}/{type}/")
514 @Consumes({MediaType.APPLICATION_JSON})
515 @Produces({MediaType.APPLICATION_JSON})
516 public Response addEdge(String content, @PathParam("version") String version,
517 @PathParam("type") String type, @PathParam("uri") @Encoded String uri,
518 @Context HttpHeaders headers, @Context UriInfo uriInfo,
519 @Context HttpServletRequest req) {
521 LoggingUtil.initMdcContext(req, headers);
523 logger.debug("Incoming request..." + content);
524 Response response = null;
526 if (validateRequest(req, uri, content, Action.POST,
527 CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
531 EdgePayload payload = EdgePayload.fromJson(content);
532 if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
533 throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
535 if (payload.getId() != null) {
536 throw new CrudException("ID specified , use Http PUT to update Edge", Status.BAD_REQUEST);
539 if (payload.getType() != null && !payload.getType().equals(type)) {
540 throw new CrudException("Edge Type mismatch", Status.BAD_REQUEST);
542 String result = crudGraphDataService.addEdge(version, type, payload);
543 response = Response.status(Status.CREATED).entity(result).type(mediaType).build();
544 } catch (CrudException ce) {
545 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
546 } catch (Exception e) {
547 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
550 response = Response.status(Status.FORBIDDEN).entity(content)
551 .type(MediaType.APPLICATION_JSON).build();
554 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
559 @Path("/relationships/{version}/")
560 @Consumes({MediaType.APPLICATION_JSON})
561 @Produces({MediaType.APPLICATION_JSON})
562 public Response addEdge(String content, @PathParam("version") String version,
563 @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
564 @Context UriInfo uriInfo, @Context HttpServletRequest req) {
566 LoggingUtil.initMdcContext(req, headers);
568 logger.debug("Incoming request..." + content);
569 Response response = null;
571 if (validateRequest(req, uri, content, Action.POST,
572 CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
576 EdgePayload payload = EdgePayload.fromJson(content);
577 if (payload.getProperties() == null || payload.getProperties().isJsonNull()) {
578 throw new CrudException("Invalid request Payload", Status.BAD_REQUEST);
580 if (payload.getId() != null) {
581 throw new CrudException("ID specified , use Http PUT to update Edge", Status.BAD_REQUEST);
584 if (payload.getType() == null || payload.getType().isEmpty()) {
585 throw new CrudException("Missing Edge Type ", Status.BAD_REQUEST);
587 String result = crudGraphDataService.addEdge(version, payload.getType(), payload);
589 response = Response.status(Status.CREATED).entity(result).type(mediaType).build();
590 } catch (CrudException ce) {
591 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
592 } catch (Exception e) {
593 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
596 response = Response.status(Status.FORBIDDEN).entity(content)
597 .type(MediaType.APPLICATION_JSON).build();
600 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
605 @Path("/{version}/{type}/{id}")
606 @Consumes({MediaType.APPLICATION_JSON})
607 @Produces({MediaType.APPLICATION_JSON})
608 public Response deleteVertex(String content, @PathParam("version") String version,
609 @PathParam("type") String type, @PathParam("id") String id,
610 @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
611 @Context UriInfo uriInfo, @Context HttpServletRequest req) {
613 LoggingUtil.initMdcContext(req, headers);
615 logger.debug("Incoming request..." + content);
616 Response response = null;
618 if (validateRequest(req, uri, content, Action.DELETE,
619 CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
623 String result = crudGraphDataService.deleteVertex(version, id, type);
624 response = Response.status(Status.OK).entity(result).type(mediaType).build();
625 } catch (CrudException ce) {
626 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
627 } catch (Exception e) {
628 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
631 response = Response.status(Status.FORBIDDEN).entity(content)
632 .type(MediaType.APPLICATION_JSON).build();
635 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
640 @Path("/relationships/{version}/{type}/")
641 @Consumes({MediaType.APPLICATION_JSON})
642 @Produces({MediaType.APPLICATION_JSON})
643 public Response deleteEdgeWithouId(String content, @Context HttpHeaders headers, @Context HttpServletRequest req) {
645 LoggingUtil.initMdcContext(req, headers);
647 logger.debug("Incoming request..." + content);
648 Response response = Response.status ( Status.BAD_REQUEST ).entity ( "Cannot Delete Edge Without Specifying Id in URL" ).build ();
649 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
654 @Path("/relationships/{version}/{type}/{id}")
655 @Consumes({MediaType.APPLICATION_JSON})
656 @Produces({MediaType.APPLICATION_JSON})
657 public Response deleteEdge(String content, @PathParam("version") String version,
658 @PathParam("type") String type, @PathParam("id") String id,
659 @PathParam("uri") @Encoded String uri, @Context HttpHeaders headers,
660 @Context UriInfo uriInfo, @Context HttpServletRequest req) {
662 LoggingUtil.initMdcContext(req, headers);
664 logger.debug("Incoming request..." + content);
665 Response response = null;
666 if (validateRequest(req, uri, content, Action.DELETE,
667 CrudServiceConstants.CRD_AUTH_POLICY_NAME)) {
670 String result = crudGraphDataService.deleteEdge(version, id, type);
671 response = Response.status(Status.OK).entity(result).type(mediaType).build();
672 } catch (CrudException ce) {
673 response = Response.status(ce.getHttpStatus()).entity(ce.getMessage()).build();
674 } catch (Exception e) {
675 response = Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
678 response = Response.status(Status.FORBIDDEN).entity(content)
679 .type(MediaType.APPLICATION_JSON).build();
682 LoggingUtil.logRestRequest(logger, auditLogger, req, response);
686 protected boolean validateRequest(HttpServletRequest req, String uri, String content,
687 Action action, String authPolicyFunctionName) {
689 String cipherSuite = (String) req.getAttribute("javax.servlet.request.cipher_suite");
690 String authUser = null;
691 if (cipherSuite != null) {
692 X509Certificate[] certChain = (X509Certificate[]) req
693 .getAttribute("javax.servlet.request.X509Certificate");
694 X509Certificate clientCert = certChain[0];
695 X500Principal subjectDn = clientCert.getSubjectX500Principal();
696 authUser = subjectDn.toString();
698 return this.auth.validateRequest(authUser.toLowerCase(), action.toString()
699 + ":" + authPolicyFunctionName);
700 } catch (Exception e) {
701 logResult(action, uri, e);
706 void logResult(Action op, String uri, Exception e) {
708 logger.error(CrudServiceMsgs.EXCEPTION_DURING_METHOD_CALL, op.toString(), uri,
709 e.getStackTrace().toString());
711 // Clear the MDC context so that no other transaction inadvertently
712 // uses our transaction id.