diff options
-rw-r--r-- | pom.xml | 5 | ||||
-rw-r--r-- | src/main/java/org/onap/dcae/common/HeaderUtils.java | 61 | ||||
-rw-r--r-- | src/main/java/org/onap/dcae/restapi/ApiException.java | 1 | ||||
-rw-r--r-- | src/main/java/org/onap/dcae/restapi/VesRestController.java | 40 | ||||
-rw-r--r-- | src/main/resources/api_version_config.json | 7 |
5 files changed, 102 insertions, 12 deletions
@@ -415,6 +415,11 @@ <artifactId>crypt-password</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.onap.dcaegen2.services.sdk.standardization</groupId>
+ <artifactId>api-custom-header</artifactId>
+ <version>1.1.4</version>
+ </dependency>
</dependencies>
<repositories>
<repository>
diff --git a/src/main/java/org/onap/dcae/common/HeaderUtils.java b/src/main/java/org/onap/dcae/common/HeaderUtils.java new file mode 100644 index 00000000..a5703091 --- /dev/null +++ b/src/main/java/org/onap/dcae/common/HeaderUtils.java @@ -0,0 +1,61 @@ +/* + * ============LICENSE_START======================================================= + * PROJECT + * ================================================================================ + * Copyright (C) 2019 VMware, Inc. All rights reserved. + * Copyright (C) 2019 Nokia. All rights reserved.s + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.dcae.common; + +import java.util.Collections; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; +import javax.servlet.http.HttpServletRequest; +import org.springframework.http.HttpHeaders; +import org.springframework.stereotype.Component; + +/** + * @author nil + */ +@Component +public final class HeaderUtils { + + public String getApiVerFilePath(String fileName) { + return Objects.requireNonNull(ClassLoader.getSystemClassLoader().getResource(fileName)) + .getPath(); + } + + public String getRestApiIdentify(String uri) { + return isBatchRequest(uri) ? "eventListener_eventBatch" : "eventListener"; + } + + public Map<String, String> extractHeaders(HttpServletRequest request) { + return Collections.list(request.getHeaderNames()).stream() + .collect(Collectors.toMap(h -> h, request::getHeader)); + } + + public HttpHeaders fillHeaders(Map<String, String> headers) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setAll(headers); + return httpHeaders; + } + + private boolean isBatchRequest(String request) { + return request.contains("eventBatch"); + } +} diff --git a/src/main/java/org/onap/dcae/restapi/ApiException.java b/src/main/java/org/onap/dcae/restapi/ApiException.java index 53895ffe..5867e52b 100644 --- a/src/main/java/org/onap/dcae/restapi/ApiException.java +++ b/src/main/java/org/onap/dcae/restapi/ApiException.java @@ -31,6 +31,7 @@ public enum ApiException { SCHEMA_VALIDATION_FAILED(ExceptionType.SERVICE_EXCEPTION, "SVC0002", "Bad Parameter (JSON does not conform to schema)", 400), INVALID_CONTENT_TYPE(ExceptionType.SERVICE_EXCEPTION, "SVC0002", "Bad Parameter (Incorrect request Content-Type)", 400), UNAUTHORIZED_USER(ExceptionType.POLICY_EXCEPTION, "POL2000", "Unauthorized user", 401), + INVALID_CUSTOM_HEADER(ExceptionType.SERVICE_EXCEPTION, "SVC0002", "Bad Parameter (Incorrect request api version)", 400), NO_SERVER_RESOURCES(ExceptionType.SERVICE_EXCEPTION, "SVC1000", "No server resources (internal processing queue full)", 503); public final int httpStatusCode; diff --git a/src/main/java/org/onap/dcae/restapi/VesRestController.java b/src/main/java/org/onap/dcae/restapi/VesRestController.java index b18eb7bc..b07b58df 100644 --- a/src/main/java/org/onap/dcae/restapi/VesRestController.java +++ b/src/main/java/org/onap/dcae/restapi/VesRestController.java @@ -36,6 +36,8 @@ import org.onap.dcae.ApplicationSettings; import org.onap.dcae.common.EventSender; import org.onap.dcae.common.VESLogger; import org.onap.dcae.common.EventUpdater; +import org.onap.dcae.common.HeaderUtils; +import org.onap.dcaegen2.services.sdk.standardization.header.CustomHeaderUtils; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -55,14 +57,16 @@ public class VesRestController { private final ApplicationSettings settings; private final Logger requestLogger; private EventSender eventSender; + private final HeaderUtils headerUtils; @Autowired VesRestController(ApplicationSettings settings, - @Qualifier("incomingRequestsLogger") Logger incomingRequestsLogger, - @Qualifier("eventSender") EventSender eventSender) { + @Qualifier("incomingRequestsLogger") Logger incomingRequestsLogger, + @Qualifier("eventSender") EventSender eventSender, HeaderUtils headerUtils) { this.settings = settings; this.requestLogger = incomingRequestsLogger; this.eventSender = eventSender; + this.headerUtils = headerUtils; } @PostMapping(value = {"/eventListener/{version}"}, consumes = "application/json") @@ -83,19 +87,31 @@ public class VesRestController { } private ResponseEntity<String> process(String events, String version, HttpServletRequest request, String type) { + CustomHeaderUtils headerUtils = createHeaderUtils(version, request); + if(headerUtils.isOkCustomHeaders()){ + JSONObject jsonObject = new JSONObject(events); - JSONObject jsonObject = new JSONObject(events); + EventValidator eventValidator = new EventValidator(settings); + Optional<ResponseEntity<String>> validationResult = eventValidator.validate(jsonObject, type, version); - EventValidator eventValidator = new EventValidator(settings); - Optional<ResponseEntity<String>> validationResult = eventValidator.validate(jsonObject, type, version); - - if (validationResult.isPresent()){ - return validationResult.get(); + if (validationResult.isPresent()){ + return validationResult.get(); + } + JSONArray arrayOfEvents = new EventUpdater(settings).convert(jsonObject,version, generateUUID(version, request.getRequestURI(), jsonObject), type); + eventSender.send(arrayOfEvents); + // TODO call service and return status, replace CambriaClient, split event to single object and list of them + return accepted().headers(this.headerUtils.fillHeaders(headerUtils.getRspCustomHeader())) + .contentType(MediaType.APPLICATION_JSON).body("Accepted"); } - JSONArray arrayOfEvents = new EventUpdater(settings).convert(jsonObject,version, generateUUID(version, request.getRequestURI(), jsonObject), type); - eventSender.send(arrayOfEvents); - // TODO call service and return status, replace CambriaClient, split event to single object and list of them - return accepted().contentType(MediaType.APPLICATION_JSON).body("Accepted"); + return badRequest().body(String.format(ApiException.INVALID_CUSTOM_HEADER.toString())); + } + + private CustomHeaderUtils createHeaderUtils(String version, HttpServletRequest request){ + return new CustomHeaderUtils(version.toLowerCase().replace("v", ""), + headerUtils.extractHeaders(request), + headerUtils.getApiVerFilePath("api_version_config.json"), + headerUtils.getRestApiIdentify(request.getRequestURI())); + } private UUID generateUUID(String version, String uri, JSONObject jsonObject) { diff --git a/src/main/resources/api_version_config.json b/src/main/resources/api_version_config.json new file mode 100644 index 00000000..23f585f9 --- /dev/null +++ b/src/main/resources/api_version_config.json @@ -0,0 +1,7 @@ +{ + "apiVersion": + { + "eventListener": ["4.7.2","5.4.1","7.0.1"], + "eventListener_eventBatch": ["4.7.2","5.4.1","7.0.1"] + } +} |