From 9407eccc5c8347c7c92d2f25590d8867213107aa Mon Sep 17 00:00:00 2001 From: Jerry Flood Date: Fri, 19 Apr 2019 07:09:34 -0400 Subject: Rename classes to avoid duplicates Copy jacoco exec files for upload to sonar Handle ending midnight in time window Issue-ID: OPTFRA-474 Change-Id: Id5df25e404a08e039537e4eb987838835ee12f11 Signed-off-by: Jerry Flood --- cmso-optimizer/data/policies/AllDayEveryDay.json | 4 +- .../src/main/java/org/onap/observations/Mdc.java | 279 --------------------- .../java/org/onap/observations/MessageHeaders.java | 171 ------------- .../java/org/onap/observations/Observation.java | 129 ---------- .../onap/observations/ObservationInterface.java | 49 ---- .../org/onap/observations/ObservationObject.java | 198 --------------- .../optf/cmso/CmsoEnvironmentPostProcessor.java | 65 ----- .../onap/optf/cmso/aaf/AafAuthorizationFilter.java | 89 ------- .../java/org/onap/optf/cmso/aaf/AafFilter.java | 81 ------ .../main/java/org/onap/optf/cmso/aaf/AafPerm.java | 137 ---------- .../org/onap/optf/cmso/aaf/AafSecurityConfig.java | 56 ----- .../java/org/onap/optf/cmso/aaf/AafUserRole.java | 176 ------------- .../onap/optf/cmso/aaf/AafUserRoleProperties.java | 133 ---------- .../org/onap/optf/cmso/aaf/FilterPriority.java | 42 ---- .../org/onap/optf/cmso/aaf/ResponseFormatter.java | 45 ---- .../optf/cmso/common/BasicAuthenticatorFilter.java | 111 -------- .../onap/optf/cmso/common/CmsoRequestError.java | 103 -------- .../optf/cmso/common/PropertiesManagement.java | 135 ---------- .../optf/cmso/common/exceptions/CmsoException.java | 99 -------- .../optimizer/CmsoEnvironmentPostProcessor.java | 2 +- .../cmso/optimizer/aaf/AafAuthorizationFilter.java | 89 +++++++ .../onap/optf/cmso/optimizer/aaf/AafFilter.java | 81 ++++++ .../org/onap/optf/cmso/optimizer/aaf/AafPerm.java | 137 ++++++++++ .../optf/cmso/optimizer/aaf/AafSecurityConfig.java | 56 +++++ .../onap/optf/cmso/optimizer/aaf/AafUserRole.java | 176 +++++++++++++ .../cmso/optimizer/aaf/AafUserRoleProperties.java | 133 ++++++++++ .../optf/cmso/optimizer/aaf/FilterPriority.java | 42 ++++ .../optf/cmso/optimizer/aaf/ResponseFormatter.java | 45 ++++ .../availability/policies/PolicyManager.java | 2 +- .../availability/timewindows/RecurringWindows.java | 9 +- .../clients/optimizer/ElementAvailability.java | 1 + .../clients/optimizer/OptimizerClient.java | 6 +- .../clients/optimizer/OptimizerRequestManager.java | 12 +- .../optimizer/models/OptimizerResponseUtility.java | 2 +- .../clients/ticketmgt/TicketMgtClient.java | 9 +- .../clients/ticketmgt/TicketMgtRequestManager.java | 3 - .../optimizer/clients/topology/TopologyClient.java | 8 +- .../optimizer/common/BasicAuthenticatorFilter.java | 111 ++++++++ .../cmso/optimizer/common/CmsoRequestError.java | 103 ++++++++ .../optf/cmso/optimizer/common/LogMessages.java | 2 +- .../optimizer/common/PropertiesManagement.java | 135 ++++++++++ .../optf/cmso/optimizer/core/OptimizerManager.java | 4 +- .../cmso/optimizer/exceptions/CmsoException.java | 99 ++++++++ .../cmso/optimizer/filters/CmsoClientFilters.java | 9 +- .../optimizer/filters/CmsoContainerFilters.java | 12 +- .../onap/optf/cmso/optimizer/observations/Mdc.java | 279 +++++++++++++++++++++ .../optimizer/observations/MessageHeaders.java | 163 ++++++++++++ .../cmso/optimizer/observations/Observation.java | 129 ++++++++++ .../observations/ObservationInterface.java | 49 ++++ .../optimizer/observations/ObservationObject.java | 198 +++++++++++++++ .../cmso/optimizer/service/rs/AdminToolImpl.java | 2 +- .../optimizer/service/rs/OptimizerInterface.java | 12 +- .../service/rs/OptimizerInterfaceImpl.java | 4 +- .../optimizer/service/rs/models/ChangeWindow.java | 2 +- .../src/main/resources/META-INF/spring.factories | 2 +- .../timewindows/RecurringWindowsTest.java | 3 +- .../onap/optf/cmso/utilities/PropertiesAdmin.java | 2 +- 57 files changed, 2080 insertions(+), 2155 deletions(-) delete mode 100644 cmso-optimizer/src/main/java/org/onap/observations/Mdc.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/observations/MessageHeaders.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/observations/Observation.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/observations/ObservationInterface.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/observations/ObservationObject.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/CmsoEnvironmentPostProcessor.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafAuthorizationFilter.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafFilter.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafPerm.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafSecurityConfig.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafUserRole.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafUserRoleProperties.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/FilterPriority.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/ResponseFormatter.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/common/BasicAuthenticatorFilter.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/common/CmsoRequestError.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/common/PropertiesManagement.java delete mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/common/exceptions/CmsoException.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafAuthorizationFilter.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafFilter.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafPerm.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafSecurityConfig.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafUserRole.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafUserRoleProperties.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/FilterPriority.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/ResponseFormatter.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/BasicAuthenticatorFilter.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/CmsoRequestError.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/PropertiesManagement.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/exceptions/CmsoException.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/Mdc.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/MessageHeaders.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/Observation.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/ObservationInterface.java create mode 100644 cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/ObservationObject.java (limited to 'cmso-optimizer') diff --git a/cmso-optimizer/data/policies/AllDayEveryDay.json b/cmso-optimizer/data/policies/AllDayEveryDay.json index b2f794d..8a744df 100644 --- a/cmso-optimizer/data/policies/AllDayEveryDay.json +++ b/cmso-optimizer/data/policies/AllDayEveryDay.json @@ -25,7 +25,7 @@ "timeRange": [ { "start_time": "00:00:00+00:00", - "end_time": "23:59:59+00:00" + "end_time": "24:00:00+00:00" } ] }, @@ -34,7 +34,7 @@ "timeRange": [ { "start_time": "00:00:00+00:00", - "end_time": "23:59:59+00:00" + "end_time": "24:00:00+00:00" } ] } diff --git a/cmso-optimizer/src/main/java/org/onap/observations/Mdc.java b/cmso-optimizer/src/main/java/org/onap/observations/Mdc.java deleted file mode 100644 index 5dea5aa..0000000 --- a/cmso-optimizer/src/main/java/org/onap/observations/Mdc.java +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright © 2019 AT&T Intellectual Property. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - */ - -package org.onap.observations; - -import static com.att.eelf.configuration.Configuration.MDC_BEGIN_TIMESTAMP; -import static com.att.eelf.configuration.Configuration.MDC_END_TIMESTAMP; -import static com.att.eelf.configuration.Configuration.MDC_KEY_REQUEST_ID; -import static com.att.eelf.configuration.Configuration.MDC_PARTNER_NAME; -import static com.att.eelf.configuration.Configuration.MDC_REMOTE_HOST; -import static com.att.eelf.configuration.Configuration.MDC_RESPONSE_CODE; -import static com.att.eelf.configuration.Configuration.MDC_RESPONSE_DESC; -import static com.att.eelf.configuration.Configuration.MDC_STATUS_CODE; -import static com.att.eelf.configuration.Configuration.MDC_TARGET_ENTITY; -import static com.att.eelf.configuration.Configuration.MDC_TARGET_SERVICE_NAME; - -import com.att.eelf.utils.Stopwatch; -import java.net.URI; -import java.util.Date; -import java.util.Map; -import java.util.UUID; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.client.ClientRequestContext; -import javax.ws.rs.client.ClientResponseContext; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response.StatusType; -import org.onap.observations.MessageHeaders.HeadersEnum; -import org.slf4j.MDC; - -/** - * EELF logging MDC fields not defined in the MDC Configuration (i.e. MDC_ALERT_SEVERITY) - **/ -public class Mdc { - - /** The Constant SERVICE_NAME. */ - public static final String SERVICE_NAME = "CSS-Scheduler"; - - /** - * The Enum Enum. - */ - public enum Enum { - // BeginTimestamp, - // EndTimeStamp, - // RequestId, - // ServiceInstanceId, - VirtualServerName, - // ServiceName, - // PartnerName, - // StatusCOde, - // ResponseCode, - // ResponseDescription, - // InstanceUUID, - // AlertSeverity, - // ServerIPAddress, - // ElapsedTime, - // ServerFQDN, - // RemoteHost, - ClassName, - Unused, - // ProcessKey, - CustomField1, - CustomField2, - CustomField3, - CustomField4, - // TargetVirtualEntity, - // TargetEntity, - // TargetServiceName, - ErrorCode, - ErrorDescription, - Timer, - } - - /** - * Gets the caller. - * - * @param back the back - * @return the caller - */ - public static String getCaller(int back) { - StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); - return stackTraceElements[back].getClassName() + "." + stackTraceElements[back].getMethodName(); - } - - /** - * Sets the caller. - * - * @param back the new caller - */ - public static void setCaller(int back) { - String caller = MDC.get(Enum.ClassName.name()); - if (caller == null) { - MDC.put(Enum.ClassName.name(), getCaller(back)); - } - } - - /** - * Sets the observation. - * - * @param obs the new observation - */ - public static void setObservation(ObservationInterface obs) { - MDC.put(Enum.CustomField4.name(), obs.name()); - } - - /** - * Clear caller. - */ - public static void clearCaller() { - MDC.remove(Enum.ClassName.name()); - } - - - /** - * Save. - * - * @return the map - */ - public static Map save() { - Map save = MDC.getCopyOfContextMap(); - return save; - } - - /** - * Restore. - * - * @param mdcSave the mdc save - */ - public static void restore(Map mdcSave) { - MDC.clear(); - for (String name : mdcSave.keySet()) { - MDC.put(name, mdcSave.get(name)); - } - } - - - - /** - * Sets the request id if not set. - * - * @param requestId the new request id if not set - */ - public static void setRequestIdIfNotSet(String requestId) { - if (MDC.get(MDC_KEY_REQUEST_ID) == null || MDC.get(MDC_KEY_REQUEST_ID).equals("")) { - setRequestId(requestId); - } - } - - /** - * Sets the request id. - * - * @param requestId the new request id - */ - public static void setRequestId(String requestId) { - MDC.put(MDC_KEY_REQUEST_ID, requestId); - } - - /** - * Metric start. - * - * @param requestContext the request context - */ - public static void metricStart(ClientRequestContext requestContext) { - MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); - setPartnerTargetFromUri(requestContext.getUri()); - } - - /** - * Metric end. - * - * @param response the response - */ - public static void metricEnd(ClientResponseContext response) { - - Date now = new Date(); - // MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now)); - MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now)); - setResponseInfo(response.getStatusInfo()); - - } - - /** - * Audit start. - * - * @param requestContext the request context - * @param servletRequest the servlet request - */ - public static void auditStart(ContainerRequestContext requestContext, HttpServletRequest servletRequest) { - MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); - MDC.put(MDC_REMOTE_HOST, servletRequest.getRemoteHost()); - MDC.put(Enum.ClassName.name(), getCaller(4)); - MultivaluedMap headers = requestContext.getHeaders(); - String transactionId = headers.getFirst(HeadersEnum.TransactionID.toString()); - if (transactionId != null) { - setRequestId(transactionId); - } else { - setRequestId(UUID.randomUUID().toString()); - } - - } - - /** - * Audit end. - * - * @param requestContext the request context - * @param response the response - */ - public static void auditEnd(ContainerRequestContext requestContext, ContainerResponseContext response) { - Date now = new Date(); - // MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now)); - MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now)); - MDC.put(Enum.ClassName.name(), getCaller(4)); - - setResponseInfo(response.getStatusInfo()); - - } - - private static void setResponseInfo(StatusType statusInfo) { - Integer status = statusInfo.getStatusCode(); - String completed = "ERROR"; - if (status >= 200 && status < 300) { - completed = "COMPLETE"; - } - MDC.put(MDC_RESPONSE_CODE, status.toString()); - MDC.put(MDC_RESPONSE_DESC, statusInfo.getReasonPhrase()); - MDC.put(MDC_STATUS_CODE, completed); - } - - /** - * Sets the event. - * - * @param requestId the new event - */ - public static void setEvent(String requestId) { - MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); - MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); - setRequestId(requestId); - } - - private static void setPartnerTargetFromUri(URI uri) { - try { - MDC.put(MDC_PARTNER_NAME, uri.getHost()); - MDC.put(MDC_TARGET_ENTITY, uri.getScheme() + "://" + uri.getHost() + ":" + uri.getPort()); - MDC.put(MDC_TARGET_SERVICE_NAME, uri.getPath()); - } catch (Exception e) { - MDC.put(MDC_PARTNER_NAME, "UNKNOWN"); - MDC.put(MDC_TARGET_ENTITY, "UNKNOWN"); - MDC.put(MDC_TARGET_SERVICE_NAME, "UNKNOWN"); - } - } - - -} diff --git a/cmso-optimizer/src/main/java/org/onap/observations/MessageHeaders.java b/cmso-optimizer/src/main/java/org/onap/observations/MessageHeaders.java deleted file mode 100644 index ccb7e56..0000000 --- a/cmso-optimizer/src/main/java/org/onap/observations/MessageHeaders.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - */ - -package org.onap.observations; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - * The Class MessageHeaders. - */ -public class MessageHeaders { - - /** - * The Enum HeadersEnum. - */ - public enum HeadersEnum { - UNDEFINED("UNDEFINED"), - TransactionID("X-TransactionId"), - FromAppID("X-FromAppId"), - MinorVersion("X-MinorVersion"), - PatchVersion("X-PatchVersion"), - LatestVersion("X-LatestVersion"),; - - private final String text; - - private HeadersEnum(String text) { - this.text = text; - } - - /** - * To string. - * - * @return the string - */ - @Override - public String toString() { - return text; - } - } - - /** The Constant supportedMajorVersions. */ - private static final Map supportedMajorVersions = new HashMap(); - - static { - supportedMajorVersions.put("v1", "0"); - supportedMajorVersions.put("v2", "0"); - } - - /** The Constant supportedMajorMinorVersions. */ - private static final Set supportedMajorMinorVersions = new HashSet(); - - static { - supportedMajorMinorVersions.add("v1.0"); - supportedMajorMinorVersions.add("v2.0"); - } - - /** The Constant latestVersion. */ - private static final String latestVersion = "2.0.0"; - - /** The Constant patchVersion. */ - private static final String patchVersion = "0"; - - /** - * From string. - * - * @param text the text - * @return the headers enum - */ - public static HeadersEnum fromString(String text) { - for (HeadersEnum e : HeadersEnum.values()) { - if (e.text.equals(text)) { - return e; - } - } - return HeadersEnum.UNDEFINED; - } - - /** - * Gets the patch version. - * - * @return the patch version - */ - public static String getPatchVersion() { - return patchVersion; - } - - /** - * Gets the latest version. - * - * @return the latest version - */ - public static String getLatestVersion() { - return latestVersion; - } - - /** - * Validate major version. - * - * @param major the major - * @return true, if successful - */ - public static boolean validateMajorVersion(String major) { - String majorKey = major.toLowerCase(); - if (!supportedMajorVersions.containsKey(majorKey)) { - return false; - } - return true; - } - - /** - * Validate major minor version. - * - * @param major the major - * @param minor the minor - * @return true, if successful - */ - public static boolean validateMajorMinorVersion(String major, String minor) { - String majorKey = major.toLowerCase(); - if (!supportedMajorVersions.containsKey(majorKey)) { - return false; - } - - if (minor != null) { - String majorMinorKey = majorKey + "." + minor; - return supportedMajorMinorVersions.contains(majorMinorKey); - } - return true; - } - - public static Map getSupportedmajorversions() { - return supportedMajorVersions; - } - - public static Set getSupportedmajorminorversions() { - return supportedMajorMinorVersions; - } - - public static String getLatestversion() { - return latestVersion; - } - - public static String getPatchversion() { - return patchVersion; - } -} diff --git a/cmso-optimizer/src/main/java/org/onap/observations/Observation.java b/cmso-optimizer/src/main/java/org/onap/observations/Observation.java deleted file mode 100644 index 05fe983..0000000 --- a/cmso-optimizer/src/main/java/org/onap/observations/Observation.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright © 2019 AT&T Intellectual Property. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - */ - -package org.onap.observations; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import org.apache.log4j.Level; -import org.onap.optf.cmso.optimizer.Application; - - -/** - * The Class Observation. - */ -public class Observation { - private static EELFLogger log = EELFManager.getInstance().getLogger(Application.class); - private static EELFLogger metrics = EELFManager.getInstance().getMetricsLogger(); - private static EELFLogger audit = EELFManager.getInstance().getAuditLogger(); - private static EELFLogger errors = EELFManager.getInstance().getErrorLogger(); - private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); - - /** - * Report. - * - * @param obs the o - * @param execpt the e - * @param arguments the arguments - */ - // ************************************************************************************************* - public static void report(ObservationInterface obs, Exception execpt, String... arguments) { - Mdc.setCaller(4); - Mdc.setObservation(obs); - if (obs.getAudit()) { - audit.info(obs, execpt, arguments); - } - if (obs.getMetric()) { - metrics.info(obs, execpt, arguments); - } - Level lev = obs.getLevel(); - switch (lev.toInt()) { - case Level.WARN_INT: - errors.warn(obs, arguments); - debug.debug(obs, execpt, arguments); - break; - case Level.INFO_INT: - log.info(obs, execpt, arguments); - debug.debug(obs, execpt, arguments); - break; - case Level.ERROR_INT: - errors.error(obs, arguments); - debug.debug(obs, execpt, arguments); - break; - case Level.TRACE_INT: - debug.trace(obs, execpt, arguments); - break; - case Level.DEBUG_INT: - debug.debug(obs, execpt, arguments); - break; - default: - log.info(obs, execpt, arguments); - } - Mdc.clearCaller(); - } - - /** - * Report. - * - * @param obs the o - * @param arguments the arguments - */ - public static void report(ObservationInterface obs, String... arguments) { - Mdc.setCaller(4); - Mdc.setObservation(obs); - if (obs.getAudit()) { - audit.info(obs, arguments); - } - if (obs.getMetric()) { - metrics.info(obs, arguments); - } - Level levl = obs.getLevel(); - switch (levl.toInt()) { - case Level.WARN_INT: - errors.warn(obs, arguments); - debug.debug(obs, arguments); - break; - case Level.INFO_INT: - log.info(obs, arguments); - debug.debug(obs, arguments); - break; - case Level.ERROR_INT: - errors.error(obs, arguments); - debug.debug(obs, arguments); - break; - case Level.TRACE_INT: - debug.debug(obs, arguments); - break; - case Level.DEBUG_INT: - debug.debug(obs, arguments); - break; - default: - log.info(obs, arguments); - } - Mdc.clearCaller(); - } - -} diff --git a/cmso-optimizer/src/main/java/org/onap/observations/ObservationInterface.java b/cmso-optimizer/src/main/java/org/onap/observations/ObservationInterface.java deleted file mode 100644 index 0dce93d..0000000 --- a/cmso-optimizer/src/main/java/org/onap/observations/ObservationInterface.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright © 2019 AT&T Intellectual Property. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - */ - -package org.onap.observations; - -import com.att.eelf.i18n.EELFResolvableErrorEnum; -import javax.ws.rs.core.Response.Status; -import org.apache.log4j.Level; - -public interface ObservationInterface extends EELFResolvableErrorEnum { - public Enum getValue(); - - public Level getLevel(); - - public String getMessage(); - - public Status getStatus(); - - public String getDomain(); - - public String name(); - - public Boolean getAudit(); - - public Boolean getMetric(); -} diff --git a/cmso-optimizer/src/main/java/org/onap/observations/ObservationObject.java b/cmso-optimizer/src/main/java/org/onap/observations/ObservationObject.java deleted file mode 100644 index f1c1277..0000000 --- a/cmso-optimizer/src/main/java/org/onap/observations/ObservationObject.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright © 2019 AT&T Intellectual Property. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - */ - -package org.onap.observations; - -import com.att.eelf.i18n.EELFResolvableErrorEnum; -import com.att.eelf.i18n.EELFResourceManager; -import javax.ws.rs.core.Response.Status; -import org.apache.log4j.Level; - - -/** - * The Class ObservationObject. - */ -public class ObservationObject implements ObservationInterface { - - // ************************************************************************************************* - // Interface class that matches the ObservationInteface pattern - // This will be used in case we decide to provide external overrides and we need to instantiate - // For now, we'll just use the Enum itself. - // - // - private Enum value = null; - - private Level level = null; - private String message = null; - private Status status = null; - private String domain = null; - private Boolean metric = false; - private Boolean audit = false; - - /** - * Instantiates a new observation object. - * - * @param obs the o - */ - public ObservationObject(ObservationInterface obs) { - this.value = obs.getValue(); - this.level = obs.getLevel(); - this.message = obs.getMessage(); - this.status = obs.getStatus(); - this.domain = obs.getDomain(); - this.metric = obs.getMetric(); - this.audit = obs.getAudit(); - - } - - /** - * Gets the value. - * - * @return the value - */ - @Override - public Enum getValue() { - return value; - } - - /** - * Gets the message. - * - * @return the message - */ - @Override - public String getMessage() { - return message; - } - - /** - * Gets the status. - * - * @return the status - */ - @Override - public Status getStatus() { - return status; - } - - /** - * Gets the domain. - * - * @return the domain - */ - @Override - public String getDomain() { - return domain; - } - - /** - * Gets the level. - * - * @return the level - */ - @Override - public Level getLevel() { - return level; - } - - /** - * Name. - * - * @return the string - */ - @Override - public String name() { - return value.name(); - } - - /** - * Gets the audit. - * - * @return the audit - */ - @Override - public Boolean getAudit() { - return audit; - } - - /** - * Gets the metric. - * - * @return the metric - */ - @Override - public Boolean getMetric() { - return metric; - } - - /** - * Gets the message. - * - * @param arguments the arguments - * @return the message - */ - public String getMessagef(String... arguments) { - return EELFResourceManager.format((EELFResolvableErrorEnum) value, arguments); - } - - /** - * Sets the value. - * - * @param value the new value - */ - public void setValue(Enum value) { - this.value = value; - } - - /** - * Sets the level. - * - * @param level the new level - */ - public void setLevel(Level level) { - this.level = level; - } - - /** - * Sets the message. - * - * @param message the new message - */ - public void setMessage(String message) { - this.message = message; - } - - /** - * Sets the status. - * - * @param status the new status - */ - public void setStatus(Status status) { - this.status = status; - } - - -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/CmsoEnvironmentPostProcessor.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/CmsoEnvironmentPostProcessor.java deleted file mode 100644 index 5f873e3..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/CmsoEnvironmentPostProcessor.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - */ - -package org.onap.optf.cmso; - -import java.util.HashMap; -import java.util.Map; -import org.onap.optf.cmso.common.PropertiesManagement; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.env.EnvironmentPostProcessor; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.MapPropertySource; -import org.springframework.core.env.MutablePropertySources; - -/** - * The Class CMSEnvironmentPostProcessor. - */ -public class CmsoEnvironmentPostProcessor implements EnvironmentPostProcessor { - // tested in ONAP springboot and this is called before all of the properties files have been - // loaded... - // perhaps there is a post post processor? Until this works. DB password will be in the clear in the - /** - * Post process environment. - * - * @param environment the environment - * @param application the application - */ - // proeprties files. - @Override - public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { - String pwd = environment.getProperty("cmso.database.password"); - if (pwd != null) { - pwd = PropertiesManagement.getDecryptedValue(pwd); - Map map = new HashMap(); - map.put("spring.datasource.password", pwd); - MapPropertySource propertySource = new MapPropertySource("abc", map); - MutablePropertySources proeprtySources = environment.getPropertySources(); - proeprtySources.addLast(propertySource); - } - } - -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafAuthorizationFilter.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafAuthorizationFilter.java deleted file mode 100644 index ba9aa6d..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafAuthorizationFilter.java +++ /dev/null @@ -1,89 +0,0 @@ -/******************************************************************************* - * Copyright © 2019 AT&T Intellectual Property. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - ******************************************************************************/ - -package org.onap.optf.cmso.aaf; - -import java.io.IOException; -import java.util.List; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.onap.aaf.cadi.CadiWrap; -import org.onap.aaf.cadi.Permission; -import org.onap.observations.Observation; -import org.onap.optf.cmso.common.exceptions.CmsoException; -import org.onap.optf.cmso.optimizer.SpringProfiles; -import org.onap.optf.cmso.optimizer.common.LogMessages; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.web.servlet.filter.OrderedRequestContextFilter; -import org.springframework.context.annotation.Profile; -import org.springframework.stereotype.Component; - -/** - * AAF authorization filter. - */ - -@Component -@Profile(SpringProfiles.AAF_AUTHENTICATION) -public class AafAuthorizationFilter extends OrderedRequestContextFilter { - - @Autowired - AafUserRoleProperties userRoleProperties; - - /** - * Instantiates a new aaf authorization filter. - */ - public AafAuthorizationFilter() { - this.setOrder(FilterPriority.AAF_AUTHORIZATION.getPriority()); - - - } - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) - throws IOException, ServletException { - try { - if (request instanceof CadiWrap) { - CadiWrap cw = (CadiWrap) request; - List perms = cw.getPermissions(cw.getUserPrincipal()); - if (userRoleProperties.processPermissions(request, perms)) { - filterChain.doFilter(request, response); - } else { - Observation.report(LogMessages.UNAUTHORIZED); - ResponseFormatter.errorResponse(request, response, new CmsoException( - LogMessages.UNAUTHORIZED.getStatus(), LogMessages.UNAUTHORIZED, "")); - } - } else { - throw new Exception(); - } - } catch (Exception e) { - Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - ResponseFormatter.errorResponse(request, response, - new CmsoException(LogMessages.UNAUTHORIZED.getStatus(), LogMessages.UNAUTHORIZED, "")); - } - } -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafFilter.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafFilter.java deleted file mode 100644 index 246c396..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafFilter.java +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - * Copyright © 2019 AT&T Intellectual Property. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - ******************************************************************************/ - -package org.onap.optf.cmso.aaf; - -import java.io.IOException; -import java.util.Properties; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.onap.aaf.cadi.PropAccess; -import org.onap.aaf.cadi.filter.CadiFilter; -import org.onap.observations.Observation; -import org.onap.optf.cmso.common.exceptions.CmsoException; -import org.onap.optf.cmso.optimizer.Application; -import org.onap.optf.cmso.optimizer.SpringProfiles; -import org.onap.optf.cmso.optimizer.common.LogMessages; -import org.springframework.boot.web.servlet.filter.OrderedRequestContextFilter; -import org.springframework.context.annotation.Profile; -import org.springframework.stereotype.Component; - -/** - * AAF authentication filter. - */ - -@Component -@Profile(SpringProfiles.AAF_AUTHENTICATION) -public class AafFilter extends OrderedRequestContextFilter { - - private final CadiFilter cadiFilter; - - /** - * Instantiates a new aaf filter. - * - * @throws IOException Signals that an I/O exception has occurred. - * @throws ServletException the servlet exception - */ - public AafFilter() throws IOException, ServletException { - Properties cadiProperties = new Properties(); - cadiProperties.load(Application.class.getClassLoader().getResourceAsStream("cadi.properties")); - cadiFilter = new CadiFilter(new PropAccess(cadiProperties)); - this.setOrder(FilterPriority.AAF_AUTHENTICATION.getPriority()); - } - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) - throws IOException, ServletException { - cadiFilter.doFilter(request, response, filterChain); - if (response.getStatus() == 401) { - Observation.report(LogMessages.UNAUTHENTICATED); - ResponseFormatter.errorResponse(request, response, - new CmsoException(LogMessages.UNAUTHENTICATED.getStatus(), LogMessages.UNAUTHENTICATED, "")); - } - } - - -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafPerm.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafPerm.java deleted file mode 100644 index db58156..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafPerm.java +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************************* - * Copyright © 2019 AT&T Intellectual Property. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - ******************************************************************************/ - -package org.onap.optf.cmso.aaf; - -import java.util.HashSet; -import java.util.Set; -import org.onap.aaf.cadi.aaf.AAFPermission; - - -/** - * The Class AafPerm. - */ -public class AafPerm { - private String type; - private String instance; - private String action; - private Set actions = new HashSet<>(); - - /** - * Gets the action. - * - * @return the action - */ - public String getAction() { - return action; - } - - /** - * Sets the action. - * - * @param action the new action - */ - public void setAction(String action) { - this.action = action; - String[] list = action.split(","); - for (String a : list) { - actions.add(a); - } - } - - /** - * Gets the type. - * - * @return the type - */ - public String getType() { - return type; - } - - /** - * Sets the type. - * - * @param type the new type - */ - public void setType(String type) { - this.type = type; - } - - /** - * Gets the single instance of AafPerm. - * - * @return single instance of AafPerm - */ - public String getInstance() { - return instance; - } - - /** - * Sets the instance. - * - * @param instance the new instance - */ - public void setInstance(String instance) { - this.instance = instance; - } - - /** - * Gets the actions. - * - * @return the actions - */ - public Set getActions() { - return actions; - } - - /** - * Sets the actions. - * - * @param actions the new actions - */ - public void setActions(Set actions) { - this.actions = actions; - } - - /** - * Matches. - * - * @param userPerm the user perm - * @return true, if successful - */ - public boolean matches(AAFPermission userPerm) { - if (type.equals(userPerm.getType())) { - if (userPerm.getInstance().equals("*") || instance.equals("*") || userPerm.getInstance().equals(instance)) { - for (String userAction : userPerm.getAction().split(",")) { - if (userAction.equals("*") || actions.contains("*") || actions.contains(userAction)) { - return true; - } - } - } - } - return false; - } -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafSecurityConfig.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafSecurityConfig.java deleted file mode 100644 index 38e9af4..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafSecurityConfig.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright © 2019 AT&T Intellectual Property. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - */ - -package org.onap.optf.cmso.aaf; - -import org.onap.optf.cmso.optimizer.SpringProfiles; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -@ComponentScan("org.onap.optf") -@Profile(SpringProfiles.AAF_AUTHENTICATION) -public class AafSecurityConfig extends WebSecurityConfigurerAdapter { - - - @Override - protected void configure(AuthenticationManagerBuilder auth) throws Exception { - - } - - @Override - protected void configure(HttpSecurity http) throws Exception { - - http.csrf().disable(); - - } -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafUserRole.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafUserRole.java deleted file mode 100644 index 65decec..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafUserRole.java +++ /dev/null @@ -1,176 +0,0 @@ -/******************************************************************************* - * Copyright © 2019 AT&T Intellectual Property. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - ******************************************************************************/ - -package org.onap.optf.cmso.aaf; - -import java.util.ArrayList; -import java.util.List; - -/** - * The Class AafUserRole. - */ -public class AafUserRole { - private String url = ""; - private String[] pathParts = {}; - private String perm = ""; - private String method = ""; - private List aafPerms = new ArrayList<>(); - - /** - * Instantiates a new aaf user role. - * - * @param url the url - * @param perm the perm - */ - public AafUserRole(String url, String perm) { - this.setUrl(url); - this.setPerm(perm); - pathParts = url.split("\\/"); - - String[] perms = perm.split(","); - for (String p : perms) { - String[] parts = p.split(" "); - if (parts.length == 2) { - method = parts[1]; - } else { - method = "ALL"; - } - - String[] list = parts[0].split("\\|"); - if (list.length == 3) { - AafPerm aafPerm = new AafPerm(); - aafPerm.setAction(list[2]); - aafPerm.setInstance(list[1]); - aafPerm.setType(list[0]); - aafPerms.add(aafPerm); - } - } - } - - /** - * Gets the url. - * - * @return the url - */ - public String getUrl() { - return url; - } - - /** - * Sets the url. - * - * @param url the new url - */ - public void setUrl(String url) { - this.url = url; - } - - /** - * Gets the perm. - * - * @return the perm - */ - public String getPerm() { - return perm; - } - - /** - * Sets the perm. - * - * @param perm the new perm - */ - public void setPerm(String perm) { - this.perm = perm; - } - - /** - * Gets the aaf perms. - * - * @return the aaf perms - */ - public List getAafPerms() { - return aafPerms; - } - - /** - * Sets the aaf perms. - * - * @param aafPerms the new aaf perms - */ - public void setAafPerms(List aafPerms) { - this.aafPerms = aafPerms; - } - - /** - * Matches. - * - * @param path the path - * @param matchMethod the match method - * @return true, if successful - */ - public boolean matches(String path, String matchMethod) { - if (!this.method.equalsIgnoreCase("ALL") && !this.method.equals("*") && !this.method.equals(matchMethod)) { - return false; - } - List inNodes = new ArrayList<>(); - List matchNodes = new ArrayList<>(); - String[] pathList = path.split("\\/"); - for (String n : pathList) { - inNodes.add(n); - } - for (String n : pathParts) { - matchNodes.add(n); - } - - while (!inNodes.isEmpty() && !matchNodes.isEmpty()) { - String inNode = inNodes.remove(0); - String matchNode = matchNodes.get(0); - if (matchNode.equals(inNode) || matchNode.equals("*")) { - matchNodes.remove(0); - } else { - if (!matchNode.equals("**")) { - return false; - } - } - } - - // - if (inNodes.isEmpty() && matchNodes.isEmpty()) { - return true; - } - - // We have incoming nodes remaining, see if we can wildcard them - if (matchNodes.size() == 1) { - if (matchNodes.get(0).equals("**")) { - return true; - } - if (inNodes.size() == 1 && matchNodes.get(0).equals("*")) { - return true; - } - } - return false; - } -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafUserRoleProperties.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafUserRoleProperties.java deleted file mode 100644 index 171a11f..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/AafUserRoleProperties.java +++ /dev/null @@ -1,133 +0,0 @@ -/******************************************************************************* - * Copyright © 2019 AT&T Intellectual Property. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - ******************************************************************************/ - -package org.onap.optf.cmso.aaf; - -import java.io.File; -import java.io.FileInputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; -import javax.annotation.PostConstruct; -import javax.servlet.http.HttpServletRequest; -import org.onap.aaf.cadi.Permission; -import org.onap.aaf.cadi.aaf.AAFPermission; -import org.onap.observations.Observation; -import org.onap.optf.cmso.optimizer.SpringProfiles; -import org.onap.optf.cmso.optimizer.common.LogMessages; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Profile; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -/** - * This class uses a properties file to map URL patterns/method to AAF Permissions (AafPerm). - * - * @author jf9860 - * - */ -@Component -@Profile(SpringProfiles.AAF_AUTHENTICATION) -public class AafUserRoleProperties { - @Autowired - Environment env; - - private List list = new ArrayList<>(); - - /** - * Initialize permissions. - */ - @PostConstruct - public void initializePermissions() { - String userRolePropertiesName = - env.getProperty("aaf.user.roles", "src/main/resources/aaf/AAFUserRoles.properties"); - Properties props = new Properties(); - try { - props.load(new FileInputStream(new File(userRolePropertiesName))); - } catch (Exception e) { - Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - } - for (Object url : props.keySet()) { - Object value = props.get(url); - list.add(new AafUserRole((String) url, (String) value)); - } - } - - /** - * Gets the for url method. - * - * @param url the url - * @param method the method - * @return the for url method - */ - public List getForUrlMethod(String url, String method) { - List userRoleList = new ArrayList<>(); - for (AafUserRole aur : list) { - if (aur.matches(url, method)) { - userRoleList.add(aur); - } - } - return userRoleList; - } - - /** - * Process permissions. - * - * @param request the request - * @param userPerms the user perms - * @return true, if successful - */ - public boolean processPermissions(HttpServletRequest request, List userPerms) { - try { - // Get list of perms that match incoming URL. May be more than 1... - // Users perms must match all that match URL - List perms = getForUrlMethod(request.getRequestURI(), request.getMethod()); - int tested = 0; - int passed = 0; - for (AafUserRole perm : perms) { - for (AafPerm test : perm.getAafPerms()) { - tested++; - for (Permission userPerm : userPerms) { - - if (test.matches((AAFPermission) userPerm)) { - passed++; - break; - } - } - } - } - // All permissions must be OK - if (tested > 0 && tested == passed) { - return true; - } else { - return false; - } - } catch (Exception e) { - Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); - } - return false; - } -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/FilterPriority.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/FilterPriority.java deleted file mode 100644 index bfafbd8..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/FilterPriority.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright © 2019 AT&T Intellectual Property. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - ******************************************************************************/ - -package org.onap.optf.cmso.aaf; - -import org.springframework.core.Ordered; - -public enum FilterPriority { - AAF_AUTHENTICATION(Ordered.HIGHEST_PRECEDENCE), AAF_AUTHORIZATION(Ordered.HIGHEST_PRECEDENCE + 1); - private final int priority; - - FilterPriority(final int ppri) { - priority = ppri; - } - - public int getPriority() { - return priority; - } -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/ResponseFormatter.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/ResponseFormatter.java deleted file mode 100644 index 518814e..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/aaf/ResponseFormatter.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright © 2019 AT&T Intellectual Property. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - ******************************************************************************/ - -package org.onap.optf.cmso.aaf; - -import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.onap.optf.cmso.common.exceptions.CmsoException; - -class ResponseFormatter { - - - static void errorResponse(HttpServletRequest request, HttpServletResponse response, CmsoException error) - throws IOException { - response.setStatus(error.getStatus().getStatusCode()); - response.getWriter().write(error.getRequestError().toString()); - response.getWriter().flush(); - response.getWriter().close(); - } - -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/common/BasicAuthenticatorFilter.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/common/BasicAuthenticatorFilter.java deleted file mode 100644 index 4c85246..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/common/BasicAuthenticatorFilter.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - */ - -package org.onap.optf.cmso.common; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.client.ClientRequestContext; -import javax.ws.rs.client.ClientRequestFilter; -import javax.ws.rs.core.MultivaluedMap; -import javax.xml.bind.DatatypeConverter; - -/** - * The Class BasicAuthenticatorFilter. - */ -public class BasicAuthenticatorFilter implements ClientRequestFilter { - private static EELFLogger log = EELFManager.getInstance().getLogger(BasicAuthenticatorFilter.class); - private final String user; - private final String password; - - /** - * Instantiates a new basic authenticator filter. - * - * @param user the user - * @param password the password - */ - public BasicAuthenticatorFilter(String user, String password) { - this.user = user; - this.password = password; - log.info("user: " + user + " pass:" + password); - } - - /** - * Filter. - * - * @param requestContext the request context - * @throws IOException Signals that an I/O exception has occurred. - */ - @Override - public void filter(ClientRequestContext requestContext) throws IOException { - MultivaluedMap headers = requestContext.getHeaders(); - final String basicAuthentication = getBasicAuthentication(); - headers.add("Authorization", basicAuthentication); - } - - private String getBasicAuthentication() { - String token = this.user + ":" + this.password; - try { - return "Basic " + DatatypeConverter.printBase64Binary(token.getBytes("UTF-8")); - } catch (UnsupportedEncodingException ex) { - throw new IllegalStateException("Cannot encode with UTF-8", ex); - } - } - - /** - * Gets the user. - * - * @param request the request - * @return the user - */ - public static String getUser(HttpServletRequest request) { - String user = ""; - String header = request.getHeader("Authorization"); - if (header != null) { - String[] auth = header.split("Basic "); - if (auth.length == 2) { - String token = getToken(auth[1]); - if (token.contains(":")) { - String[] tokens = token.split(":"); - user = tokens[0]; - } - } - } - return user; - } - - private static String getToken(String auth) { - try { - String token = new String(DatatypeConverter.parseBase64Binary(auth)); - return token; - } catch (Exception e) { - return auth; - } - } -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/common/CmsoRequestError.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/common/CmsoRequestError.java deleted file mode 100644 index d56a992..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/common/CmsoRequestError.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - */ - -package org.onap.optf.cmso.common; - -import com.fasterxml.jackson.annotation.JsonProperty; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - -/** - * The Class CMSRequestError. - */ -public class CmsoRequestError implements Serializable { - private static final long serialVersionUID = 1L; - @JsonProperty - RequestError requestError; - - /** - * Instantiates a new CMS request error. - * - * @param messageId the message id - * @param text the text - * @param variables the variables - */ - public CmsoRequestError(String messageId, String text, List variables) { - requestError = new RequestError(messageId, text, variables); - } - - /** - * Instantiates a new CMS request error. - * - * @param messageId the message id - * @param text the text - */ - public CmsoRequestError(String messageId, String text) { - requestError = new RequestError(messageId, text, new ArrayList()); - } - - /** - * The Class RequestError. - */ - public class RequestError { - @JsonProperty - private String messageId; - @JsonProperty - private String text; - @JsonProperty - private List variables; - - private RequestError(String messageId, String text, List variables) { - this.messageId = "CMSO." + messageId; - this.text = text; - this.variables = variables; - } - - /** - * To string. - * - * @return the string - */ - @Override - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(messageId).append(":").append(text).append(":").append(variables); - return sb.toString(); - - } - } - - /** - * To string. - * - * @return the string - */ - @Override - public String toString() { - return requestError.toString(); - } -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/common/PropertiesManagement.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/common/PropertiesManagement.java deleted file mode 100644 index 79a0a79..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/common/PropertiesManagement.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - */ - -package org.onap.optf.cmso.common; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import javax.crypto.Cipher; -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.SecretKeySpec; -import org.apache.commons.codec.binary.Base64; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -/** - * The Class PropertiesManagement. - */ -@Component -public class PropertiesManagement { - - private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); - private static EELFLogger errors = EELFManager.getInstance().getErrorLogger(); - - private static final String algorithm = "AES"; - - private static final String cipherMode = "CBC"; - - private static final String paddingScheme = "PKCS5Padding"; - - private static final String transformation = algorithm + "/" + cipherMode + "/" + paddingScheme; - - private static final String initVector = "ONAPCMSOVECTORIV"; // 16 bytes IV - - @Autowired - Environment env; - - /** - * Gets the property. - * - * @param key the key - * @param defaultValue the default value - * @return the property - */ - public String getProperty(String key, String defaultValue) { - String value = env.getProperty(key, defaultValue); - value = getDecryptedValue(value); - return value; - } - - /** - * Gets the decrypted value. - * - * @param value the value - * @return the decrypted value - */ - public static String getDecryptedValue(String value) { - if (value.startsWith("enc:")) { - String secret = getSecret(); - value = decrypt(secret, initVector, value.substring(4)); - } - return value; - } - - /** - * Gets the encrypted value. - * - * @param value the value - * @return the encrypted value - */ - public static String getEncryptedValue(String value) { - String secret = getSecret(); - value = encrypt(secret, initVector, value); - return value; - } - - private static final String encrypt(String key, String initVector, String value) { - try { - IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8")); - SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); - Cipher cipher = Cipher.getInstance(transformation); - cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); - byte[] encrypted = cipher.doFinal(value.getBytes()); - return Base64.encodeBase64String(encrypted); - } catch (Exception ex) { - errors.error("Unexpected exception {0}", ex.getMessage()); - debug.debug("Unexpected exception", ex); - } - - return null; - } - - private static final String decrypt(String key, String initVector, String encrypted) { - try { - IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8")); - SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); - Cipher cipher = Cipher.getInstance(transformation); - cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); - byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted)); - return new String(original); - } catch (Exception ex) { - errors.error("Unexpected exception {0}", ex.getMessage()); - debug.debug("Unexpected exception", ex); - } - return null; - } - - private static String getSecret() { - return "ONAPCMSOSECRETIV"; - } - -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/common/exceptions/CmsoException.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/common/exceptions/CmsoException.java deleted file mode 100644 index a83437f..0000000 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/common/exceptions/CmsoException.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. - * - * 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. - * - * - * Unless otherwise specified, all documentation contained herein is licensed under the Creative - * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except - * in compliance with the License. You may obtain a copy of the License at - * - * https://creativecommons.org/licenses/by/4.0/ - * - * Unless required by applicable law or agreed to in writing, documentation 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. - */ - -package org.onap.optf.cmso.common.exceptions; - -import com.att.eelf.i18n.EELFResourceManager; -import java.util.ArrayList; -import java.util.List; -import javax.ws.rs.core.Response.Status; -import org.onap.observations.ObservationInterface; -import org.onap.optf.cmso.common.CmsoRequestError; - -/** - * The Class CMSException. - */ -public class CmsoException extends Exception { - private static final long serialVersionUID = 1L; - - protected CmsoRequestError requestError = null; - private List variables = new ArrayList(); - protected ObservationInterface messageCode; - protected Status status; - - /** - * Instantiates a new CMS exception. - * - * @param status the status - * @param messageCode the message code - * @param args the args - */ - public CmsoException(Status status, ObservationInterface messageCode, String... args) { - super(EELFResourceManager.format(messageCode, args)); - this.status = status; - this.messageCode = messageCode; - for (String arg : args) { - variables.add(arg); - } - requestError = new CmsoRequestError(messageCode.name(), getMessage(), variables); - } - - /** - * Gets the status. - * - * @return the status - */ - public Status getStatus() { - return status; - } - - /** - * Gets the message code. - * - * @return the message code - */ - public ObservationInterface getMessageCode() { - return messageCode; - } - - /** - * Gets the variables. - * - * @return the variables - */ - public String[] getVariables() { - return variables.toArray(new String[variables.size()]); - } - - /** - * Gets the request error. - * - * @return the request error - */ - public CmsoRequestError getRequestError() { - return requestError; - } -} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/CmsoEnvironmentPostProcessor.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/CmsoEnvironmentPostProcessor.java index 5e425d0..bb47567 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/CmsoEnvironmentPostProcessor.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/CmsoEnvironmentPostProcessor.java @@ -28,7 +28,7 @@ package org.onap.optf.cmso.optimizer; import java.util.HashMap; import java.util.Map; -import org.onap.optf.cmso.common.PropertiesManagement; +import org.onap.optf.cmso.optimizer.common.PropertiesManagement; import org.springframework.boot.SpringApplication; import org.springframework.boot.env.EnvironmentPostProcessor; import org.springframework.core.env.ConfigurableEnvironment; diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafAuthorizationFilter.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafAuthorizationFilter.java new file mode 100644 index 0000000..230c0a0 --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafAuthorizationFilter.java @@ -0,0 +1,89 @@ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + ******************************************************************************/ + +package org.onap.optf.cmso.optimizer.aaf; + +import java.io.IOException; +import java.util.List; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.onap.aaf.cadi.CadiWrap; +import org.onap.aaf.cadi.Permission; +import org.onap.optf.cmso.optimizer.SpringProfiles; +import org.onap.optf.cmso.optimizer.common.LogMessages; +import org.onap.optf.cmso.optimizer.exceptions.CmsoException; +import org.onap.optf.cmso.optimizer.observations.Observation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.web.servlet.filter.OrderedRequestContextFilter; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +/** + * AAF authorization filter. + */ + +@Component +@Profile(SpringProfiles.AAF_AUTHENTICATION) +public class AafAuthorizationFilter extends OrderedRequestContextFilter { + + @Autowired + AafUserRoleProperties userRoleProperties; + + /** + * Instantiates a new aaf authorization filter. + */ + public AafAuthorizationFilter() { + this.setOrder(FilterPriority.AAF_AUTHORIZATION.getPriority()); + + + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws IOException, ServletException { + try { + if (request instanceof CadiWrap) { + CadiWrap cw = (CadiWrap) request; + List perms = cw.getPermissions(cw.getUserPrincipal()); + if (userRoleProperties.processPermissions(request, perms)) { + filterChain.doFilter(request, response); + } else { + Observation.report(LogMessages.UNAUTHORIZED); + ResponseFormatter.errorResponse(request, response, new CmsoException( + LogMessages.UNAUTHORIZED.getStatus(), LogMessages.UNAUTHORIZED, "")); + } + } else { + throw new Exception(); + } + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + ResponseFormatter.errorResponse(request, response, + new CmsoException(LogMessages.UNAUTHORIZED.getStatus(), LogMessages.UNAUTHORIZED, "")); + } + } +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafFilter.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafFilter.java new file mode 100644 index 0000000..015305a --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafFilter.java @@ -0,0 +1,81 @@ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + ******************************************************************************/ + +package org.onap.optf.cmso.optimizer.aaf; + +import java.io.IOException; +import java.util.Properties; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.onap.aaf.cadi.PropAccess; +import org.onap.aaf.cadi.filter.CadiFilter; +import org.onap.optf.cmso.optimizer.Application; +import org.onap.optf.cmso.optimizer.SpringProfiles; +import org.onap.optf.cmso.optimizer.common.LogMessages; +import org.onap.optf.cmso.optimizer.exceptions.CmsoException; +import org.onap.optf.cmso.optimizer.observations.Observation; +import org.springframework.boot.web.servlet.filter.OrderedRequestContextFilter; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +/** + * AAF authentication filter. + */ + +@Component +@Profile(SpringProfiles.AAF_AUTHENTICATION) +public class AafFilter extends OrderedRequestContextFilter { + + private final CadiFilter cadiFilter; + + /** + * Instantiates a new aaf filter. + * + * @throws IOException Signals that an I/O exception has occurred. + * @throws ServletException the servlet exception + */ + public AafFilter() throws IOException, ServletException { + Properties cadiProperties = new Properties(); + cadiProperties.load(Application.class.getClassLoader().getResourceAsStream("cadi.properties")); + cadiFilter = new CadiFilter(new PropAccess(cadiProperties)); + this.setOrder(FilterPriority.AAF_AUTHENTICATION.getPriority()); + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws IOException, ServletException { + cadiFilter.doFilter(request, response, filterChain); + if (response.getStatus() == 401) { + Observation.report(LogMessages.UNAUTHENTICATED); + ResponseFormatter.errorResponse(request, response, + new CmsoException(LogMessages.UNAUTHENTICATED.getStatus(), LogMessages.UNAUTHENTICATED, "")); + } + } + + +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafPerm.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafPerm.java new file mode 100644 index 0000000..f2a95ea --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafPerm.java @@ -0,0 +1,137 @@ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + ******************************************************************************/ + +package org.onap.optf.cmso.optimizer.aaf; + +import java.util.HashSet; +import java.util.Set; +import org.onap.aaf.cadi.aaf.AAFPermission; + + +/** + * The Class AafPerm. + */ +public class AafPerm { + private String type; + private String instance; + private String action; + private Set actions = new HashSet<>(); + + /** + * Gets the action. + * + * @return the action + */ + public String getAction() { + return action; + } + + /** + * Sets the action. + * + * @param action the new action + */ + public void setAction(String action) { + this.action = action; + String[] list = action.split(","); + for (String a : list) { + actions.add(a); + } + } + + /** + * Gets the type. + * + * @return the type + */ + public String getType() { + return type; + } + + /** + * Sets the type. + * + * @param type the new type + */ + public void setType(String type) { + this.type = type; + } + + /** + * Gets the single instance of AafPerm. + * + * @return single instance of AafPerm + */ + public String getInstance() { + return instance; + } + + /** + * Sets the instance. + * + * @param instance the new instance + */ + public void setInstance(String instance) { + this.instance = instance; + } + + /** + * Gets the actions. + * + * @return the actions + */ + public Set getActions() { + return actions; + } + + /** + * Sets the actions. + * + * @param actions the new actions + */ + public void setActions(Set actions) { + this.actions = actions; + } + + /** + * Matches. + * + * @param userPerm the user perm + * @return true, if successful + */ + public boolean matches(AAFPermission userPerm) { + if (type.equals(userPerm.getType())) { + if (userPerm.getInstance().equals("*") || instance.equals("*") || userPerm.getInstance().equals(instance)) { + for (String userAction : userPerm.getAction().split(",")) { + if (userAction.equals("*") || actions.contains("*") || actions.contains(userAction)) { + return true; + } + } + } + } + return false; + } +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafSecurityConfig.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafSecurityConfig.java new file mode 100644 index 0000000..1e44433 --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafSecurityConfig.java @@ -0,0 +1,56 @@ +/* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + */ + +package org.onap.optf.cmso.optimizer.aaf; + +import org.onap.optf.cmso.optimizer.SpringProfiles; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +@Configuration +@EnableWebSecurity +@ComponentScan("org.onap.optf") +@Profile(SpringProfiles.AAF_AUTHENTICATION) +public class AafSecurityConfig extends WebSecurityConfigurerAdapter { + + + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + + http.csrf().disable(); + + } +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafUserRole.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafUserRole.java new file mode 100644 index 0000000..859c3ed --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafUserRole.java @@ -0,0 +1,176 @@ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + ******************************************************************************/ + +package org.onap.optf.cmso.optimizer.aaf; + +import java.util.ArrayList; +import java.util.List; + +/** + * The Class AafUserRole. + */ +public class AafUserRole { + private String url = ""; + private String[] pathParts = {}; + private String perm = ""; + private String method = ""; + private List aafPerms = new ArrayList<>(); + + /** + * Instantiates a new aaf user role. + * + * @param url the url + * @param perm the perm + */ + public AafUserRole(String url, String perm) { + this.setUrl(url); + this.setPerm(perm); + pathParts = url.split("\\/"); + + String[] perms = perm.split(","); + for (String p : perms) { + String[] parts = p.split(" "); + if (parts.length == 2) { + method = parts[1]; + } else { + method = "ALL"; + } + + String[] list = parts[0].split("\\|"); + if (list.length == 3) { + AafPerm aafPerm = new AafPerm(); + aafPerm.setAction(list[2]); + aafPerm.setInstance(list[1]); + aafPerm.setType(list[0]); + aafPerms.add(aafPerm); + } + } + } + + /** + * Gets the url. + * + * @return the url + */ + public String getUrl() { + return url; + } + + /** + * Sets the url. + * + * @param url the new url + */ + public void setUrl(String url) { + this.url = url; + } + + /** + * Gets the perm. + * + * @return the perm + */ + public String getPerm() { + return perm; + } + + /** + * Sets the perm. + * + * @param perm the new perm + */ + public void setPerm(String perm) { + this.perm = perm; + } + + /** + * Gets the aaf perms. + * + * @return the aaf perms + */ + public List getAafPerms() { + return aafPerms; + } + + /** + * Sets the aaf perms. + * + * @param aafPerms the new aaf perms + */ + public void setAafPerms(List aafPerms) { + this.aafPerms = aafPerms; + } + + /** + * Matches. + * + * @param path the path + * @param matchMethod the match method + * @return true, if successful + */ + public boolean matches(String path, String matchMethod) { + if (!this.method.equalsIgnoreCase("ALL") && !this.method.equals("*") && !this.method.equals(matchMethod)) { + return false; + } + List inNodes = new ArrayList<>(); + List matchNodes = new ArrayList<>(); + String[] pathList = path.split("\\/"); + for (String n : pathList) { + inNodes.add(n); + } + for (String n : pathParts) { + matchNodes.add(n); + } + + while (!inNodes.isEmpty() && !matchNodes.isEmpty()) { + String inNode = inNodes.remove(0); + String matchNode = matchNodes.get(0); + if (matchNode.equals(inNode) || matchNode.equals("*")) { + matchNodes.remove(0); + } else { + if (!matchNode.equals("**")) { + return false; + } + } + } + + // + if (inNodes.isEmpty() && matchNodes.isEmpty()) { + return true; + } + + // We have incoming nodes remaining, see if we can wildcard them + if (matchNodes.size() == 1) { + if (matchNodes.get(0).equals("**")) { + return true; + } + if (inNodes.size() == 1 && matchNodes.get(0).equals("*")) { + return true; + } + } + return false; + } +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafUserRoleProperties.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafUserRoleProperties.java new file mode 100644 index 0000000..037c54e --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/AafUserRoleProperties.java @@ -0,0 +1,133 @@ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + ******************************************************************************/ + +package org.onap.optf.cmso.optimizer.aaf; + +import java.io.File; +import java.io.FileInputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import javax.annotation.PostConstruct; +import javax.servlet.http.HttpServletRequest; +import org.onap.aaf.cadi.Permission; +import org.onap.aaf.cadi.aaf.AAFPermission; +import org.onap.optf.cmso.optimizer.SpringProfiles; +import org.onap.optf.cmso.optimizer.common.LogMessages; +import org.onap.optf.cmso.optimizer.observations.Observation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +/** + * This class uses a properties file to map URL patterns/method to AAF Permissions (AafPerm). + * + * @author jf9860 + * + */ +@Component +@Profile(SpringProfiles.AAF_AUTHENTICATION) +public class AafUserRoleProperties { + @Autowired + Environment env; + + private List list = new ArrayList<>(); + + /** + * Initialize permissions. + */ + @PostConstruct + public void initializePermissions() { + String userRolePropertiesName = + env.getProperty("aaf.user.roles", "src/main/resources/aaf/AAFUserRoles.properties"); + Properties props = new Properties(); + try { + props.load(new FileInputStream(new File(userRolePropertiesName))); + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + } + for (Object url : props.keySet()) { + Object value = props.get(url); + list.add(new AafUserRole((String) url, (String) value)); + } + } + + /** + * Gets the for url method. + * + * @param url the url + * @param method the method + * @return the for url method + */ + public List getForUrlMethod(String url, String method) { + List userRoleList = new ArrayList<>(); + for (AafUserRole aur : list) { + if (aur.matches(url, method)) { + userRoleList.add(aur); + } + } + return userRoleList; + } + + /** + * Process permissions. + * + * @param request the request + * @param userPerms the user perms + * @return true, if successful + */ + public boolean processPermissions(HttpServletRequest request, List userPerms) { + try { + // Get list of perms that match incoming URL. May be more than 1... + // Users perms must match all that match URL + List perms = getForUrlMethod(request.getRequestURI(), request.getMethod()); + int tested = 0; + int passed = 0; + for (AafUserRole perm : perms) { + for (AafPerm test : perm.getAafPerms()) { + tested++; + for (Permission userPerm : userPerms) { + + if (test.matches((AAFPermission) userPerm)) { + passed++; + break; + } + } + } + } + // All permissions must be OK + if (tested > 0 && tested == passed) { + return true; + } else { + return false; + } + } catch (Exception e) { + Observation.report(LogMessages.UNEXPECTED_EXCEPTION, e, e.getMessage()); + } + return false; + } +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/FilterPriority.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/FilterPriority.java new file mode 100644 index 0000000..0b22e99 --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/FilterPriority.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + ******************************************************************************/ + +package org.onap.optf.cmso.optimizer.aaf; + +import org.springframework.core.Ordered; + +public enum FilterPriority { + AAF_AUTHENTICATION(Ordered.HIGHEST_PRECEDENCE), AAF_AUTHORIZATION(Ordered.HIGHEST_PRECEDENCE + 1); + private final int priority; + + FilterPriority(final int ppri) { + priority = ppri; + } + + public int getPriority() { + return priority; + } +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/ResponseFormatter.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/ResponseFormatter.java new file mode 100644 index 0000000..be8656d --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/aaf/ResponseFormatter.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + ******************************************************************************/ + +package org.onap.optf.cmso.optimizer.aaf; + +import java.io.IOException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.onap.optf.cmso.optimizer.exceptions.CmsoException; + +class ResponseFormatter { + + + static void errorResponse(HttpServletRequest request, HttpServletResponse response, CmsoException error) + throws IOException { + response.setStatus(error.getStatus().getStatusCode()); + response.getWriter().write(error.getRequestError().toString()); + response.getWriter().flush(); + response.getWriter().close(); + } + +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/PolicyManager.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/PolicyManager.java index 58d3355..dcc5e54 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/PolicyManager.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/policies/PolicyManager.java @@ -25,10 +25,10 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; -import org.onap.observations.Observation; import org.onap.optf.cmso.optimizer.availability.policies.model.Policy; import org.onap.optf.cmso.optimizer.availability.policies.model.TimeLimitAndVerticalTopology; import org.onap.optf.cmso.optimizer.common.LogMessages; +import org.onap.optf.cmso.optimizer.observations.Observation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/timewindows/RecurringWindows.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/timewindows/RecurringWindows.java index 81a848e..b3829c3 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/timewindows/RecurringWindows.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/availability/timewindows/RecurringWindows.java @@ -37,11 +37,11 @@ import java.util.List; import java.util.Set; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; -import org.onap.observations.Observation; import org.onap.optf.cmso.optimizer.availability.policies.model.AllowedPeriodicTime; import org.onap.optf.cmso.optimizer.availability.policies.model.TimeLimitAndVerticalTopology; import org.onap.optf.cmso.optimizer.availability.policies.model.TimeRange; import org.onap.optf.cmso.optimizer.common.LogMessages; +import org.onap.optf.cmso.optimizer.observations.Observation; import org.onap.optf.cmso.optimizer.service.rs.models.ChangeWindow; /** @@ -128,7 +128,7 @@ public class RecurringWindows { if (ranges.size() == 0) { TimeRange range = new TimeRange(); range.setStartTime("00:00:00+00:00"); - range.setEndTime("23:59:59+00:00"); + range.setEndTime("24:00:00+00:00"); ranges.add(range); } StringBuilder rdata = new StringBuilder(); @@ -204,6 +204,11 @@ public class RecurringWindows { private static Instant getInstanceFromTime(String timeIn, Instant cwStartInstant) { Instant instant = null; Instant date = cwStartInstant.truncatedTo(ChronoUnit.DAYS); + // Handle ending midnight + if (timeIn.startsWith("24:00:00")) { + timeIn = "00:00:00+00:00"; + date = date.plus(1, ChronoUnit.DAYS); + } LocalDate epoch = LocalDate.ofEpochDay(0); try { OffsetTime offset = OffsetTime.parse(timeIn); diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/ElementAvailability.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/ElementAvailability.java index ac5d2e7..f2193bb 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/ElementAvailability.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/ElementAvailability.java @@ -122,6 +122,7 @@ public class ElementAvailability extends ElementWindowMapping { if (optimizerRequest.getAdditionalDuration() != null) { duration += optimizerRequest.getAdditionalDuration(); } + duration = duration * 1000; for (String elementId : nodeInfo.keySet()) { TopologyElementInfo info = nodeInfo.get(elementId); diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/OptimizerClient.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/OptimizerClient.java index b42ff9c..88570e8 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/OptimizerClient.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/OptimizerClient.java @@ -36,9 +36,6 @@ import java.util.List; import java.util.Map; import java.util.UUID; import org.apache.commons.io.IOUtils; -import org.onap.observations.Observation; -import org.onap.optf.cmso.common.PropertiesManagement; -import org.onap.optf.cmso.common.exceptions.CmsoException; import org.onap.optf.cmso.optimizer.availability.policies.PolicyManager; import org.onap.optf.cmso.optimizer.availability.policies.model.TimeLimitAndVerticalTopology; import org.onap.optf.cmso.optimizer.clients.optimizer.models.OptimizerEngineResponse; @@ -51,12 +48,15 @@ import org.onap.optf.cmso.optimizer.clients.ticketmgt.models.ActiveTicketsRespon import org.onap.optf.cmso.optimizer.clients.topology.TopologyRequestManager; import org.onap.optf.cmso.optimizer.clients.topology.models.TopologyResponse; import org.onap.optf.cmso.optimizer.common.LogMessages; +import org.onap.optf.cmso.optimizer.common.PropertiesManagement; +import org.onap.optf.cmso.optimizer.exceptions.CmsoException; import org.onap.optf.cmso.optimizer.model.Optimizer; import org.onap.optf.cmso.optimizer.model.Request; import org.onap.optf.cmso.optimizer.model.Ticket; import org.onap.optf.cmso.optimizer.model.Topology; import org.onap.optf.cmso.optimizer.model.dao.OptimizerDao; import org.onap.optf.cmso.optimizer.model.dao.RequestDao; +import org.onap.optf.cmso.optimizer.observations.Observation; import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerRequest; import org.onap.optf.cmso.optimizer.service.rs.models.PolicyInfo; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/OptimizerRequestManager.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/OptimizerRequestManager.java index cfe23ba..e3a4ef8 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/OptimizerRequestManager.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/OptimizerRequestManager.java @@ -22,7 +22,6 @@ package org.onap.optf.cmso.optimizer.clients.optimizer; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.Optional; import java.util.UUID; -import org.onap.observations.Observation; import org.onap.optf.cmso.optimizer.clients.optimizer.models.OptimizerEngineResponse; import org.onap.optf.cmso.optimizer.clients.optimizer.models.OptimizerEngineResponse.OptimizerEngineResponseStatus; import org.onap.optf.cmso.optimizer.clients.optimizer.models.OptimizerResults; @@ -36,6 +35,7 @@ import org.onap.optf.cmso.optimizer.model.Response; import org.onap.optf.cmso.optimizer.model.dao.OptimizerDao; import org.onap.optf.cmso.optimizer.model.dao.RequestDao; import org.onap.optf.cmso.optimizer.model.dao.ResponseDao; +import org.onap.optf.cmso.optimizer.observations.Observation; import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerRequest; import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerResponse; import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerResponse.OptimizeScheduleStatus; @@ -76,7 +76,7 @@ public class OptimizerRequestManager { */ public OptimizerEngineResponse createOptimizerRequest(Request requestRow) { // - if (okToDispatch(false)) { + if (okToDispatch()) { Optimizer optimizer = getExistingOptmizer(requestRow.getUuid()); if (optimizer == null) { optimizer = new Optimizer(); @@ -146,14 +146,12 @@ public class OptimizerRequestManager { - private boolean okToDispatch(boolean checkDispatchability) { - if (checkDispatchability) { + private boolean okToDispatch() { + if (env.getProperty("ok.to.dispatch.check", Boolean.class, true)) { // not yet implemented - return false; - } - else { return true; } + return false; } diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/models/OptimizerResponseUtility.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/models/OptimizerResponseUtility.java index 595bc0d..a156619 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/models/OptimizerResponseUtility.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/optimizer/models/OptimizerResponseUtility.java @@ -24,8 +24,8 @@ import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; -import org.onap.observations.Observation; import org.onap.optf.cmso.optimizer.common.LogMessages; +import org.onap.optf.cmso.optimizer.observations.Observation; import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.Constructor; import org.yaml.snakeyaml.introspector.Property; diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/ticketmgt/TicketMgtClient.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/ticketmgt/TicketMgtClient.java index 21f0d76..1ba21e0 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/ticketmgt/TicketMgtClient.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/ticketmgt/TicketMgtClient.java @@ -39,10 +39,6 @@ import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; -import org.onap.observations.Observation; -import org.onap.optf.cmso.common.BasicAuthenticatorFilter; -import org.onap.optf.cmso.common.PropertiesManagement; -import org.onap.optf.cmso.common.exceptions.CmsoException; import org.onap.optf.cmso.optimizer.clients.common.models.ElementCriteria; import org.onap.optf.cmso.optimizer.clients.ticketmgt.models.ActiveTicketsRequest; import org.onap.optf.cmso.optimizer.clients.ticketmgt.models.ActiveTicketsResponse; @@ -52,14 +48,17 @@ import org.onap.optf.cmso.optimizer.clients.topology.models.ConstraintElements; import org.onap.optf.cmso.optimizer.clients.topology.models.TopologyElementInfo; import org.onap.optf.cmso.optimizer.clients.topology.models.TopologyPolicyInfo; import org.onap.optf.cmso.optimizer.clients.topology.models.TopologyResponse; +import org.onap.optf.cmso.optimizer.common.BasicAuthenticatorFilter; import org.onap.optf.cmso.optimizer.common.LogMessages; +import org.onap.optf.cmso.optimizer.common.PropertiesManagement; +import org.onap.optf.cmso.optimizer.exceptions.CmsoException; import org.onap.optf.cmso.optimizer.filters.CmsoClientFilters; import org.onap.optf.cmso.optimizer.model.Request; import org.onap.optf.cmso.optimizer.model.Ticket; import org.onap.optf.cmso.optimizer.model.Topology; import org.onap.optf.cmso.optimizer.model.dao.RequestDao; import org.onap.optf.cmso.optimizer.model.dao.TicketDao; -import org.onap.optf.cmso.optimizer.service.rs.models.ElementInfo; +import org.onap.optf.cmso.optimizer.observations.Observation; import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerRequest; import org.onap.optf.cmso.optimizer.service.rs.models.PolicyInfo; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/ticketmgt/TicketMgtRequestManager.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/ticketmgt/TicketMgtRequestManager.java index 85ff950..df892b3 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/ticketmgt/TicketMgtRequestManager.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/ticketmgt/TicketMgtRequestManager.java @@ -21,12 +21,9 @@ package org.onap.optf.cmso.optimizer.clients.ticketmgt; import java.util.Optional; import java.util.UUID; -import org.onap.observations.Observation; import org.onap.optf.cmso.optimizer.clients.ticketmgt.models.ActiveTicketsResponse; -import org.onap.optf.cmso.optimizer.common.LogMessages; import org.onap.optf.cmso.optimizer.model.Request; import org.onap.optf.cmso.optimizer.model.Ticket; -import org.onap.optf.cmso.optimizer.model.Topology; import org.onap.optf.cmso.optimizer.model.dao.RequestDao; import org.onap.optf.cmso.optimizer.model.dao.TicketDao; import org.springframework.beans.factory.annotation.Autowired; diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/topology/TopologyClient.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/topology/TopologyClient.java index ca6bdb3..6229185 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/topology/TopologyClient.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/clients/topology/TopologyClient.java @@ -33,21 +33,21 @@ import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; -import org.onap.observations.Observation; -import org.onap.optf.cmso.common.BasicAuthenticatorFilter; -import org.onap.optf.cmso.common.PropertiesManagement; -import org.onap.optf.cmso.common.exceptions.CmsoException; import org.onap.optf.cmso.optimizer.clients.common.models.ElementCriteria; import org.onap.optf.cmso.optimizer.clients.topology.models.TopologyPolicyInfo; import org.onap.optf.cmso.optimizer.clients.topology.models.TopologyRequest; import org.onap.optf.cmso.optimizer.clients.topology.models.TopologyResponse; import org.onap.optf.cmso.optimizer.clients.topology.models.TopologyResponse.TopologyRequestStatus; +import org.onap.optf.cmso.optimizer.common.BasicAuthenticatorFilter; import org.onap.optf.cmso.optimizer.common.LogMessages; +import org.onap.optf.cmso.optimizer.common.PropertiesManagement; +import org.onap.optf.cmso.optimizer.exceptions.CmsoException; import org.onap.optf.cmso.optimizer.filters.CmsoClientFilters; import org.onap.optf.cmso.optimizer.model.Request; import org.onap.optf.cmso.optimizer.model.Topology; import org.onap.optf.cmso.optimizer.model.dao.RequestDao; import org.onap.optf.cmso.optimizer.model.dao.TopologyDao; +import org.onap.optf.cmso.optimizer.observations.Observation; import org.onap.optf.cmso.optimizer.service.rs.models.ElementInfo; import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerRequest; import org.onap.optf.cmso.optimizer.service.rs.models.PolicyInfo; diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/BasicAuthenticatorFilter.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/BasicAuthenticatorFilter.java new file mode 100644 index 0000000..00a2971 --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/BasicAuthenticatorFilter.java @@ -0,0 +1,111 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + */ + +package org.onap.optf.cmso.optimizer.common; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.client.ClientRequestContext; +import javax.ws.rs.client.ClientRequestFilter; +import javax.ws.rs.core.MultivaluedMap; +import javax.xml.bind.DatatypeConverter; + +/** + * The Class BasicAuthenticatorFilter. + */ +public class BasicAuthenticatorFilter implements ClientRequestFilter { + private static EELFLogger log = EELFManager.getInstance().getLogger(BasicAuthenticatorFilter.class); + private final String user; + private final String password; + + /** + * Instantiates a new basic authenticator filter. + * + * @param user the user + * @param password the password + */ + public BasicAuthenticatorFilter(String user, String password) { + this.user = user; + this.password = password; + log.info("user: " + user + " pass:" + password); + } + + /** + * Filter. + * + * @param requestContext the request context + * @throws IOException Signals that an I/O exception has occurred. + */ + @Override + public void filter(ClientRequestContext requestContext) throws IOException { + MultivaluedMap headers = requestContext.getHeaders(); + final String basicAuthentication = getBasicAuthentication(); + headers.add("Authorization", basicAuthentication); + } + + private String getBasicAuthentication() { + String token = this.user + ":" + this.password; + try { + return "Basic " + DatatypeConverter.printBase64Binary(token.getBytes("UTF-8")); + } catch (UnsupportedEncodingException ex) { + throw new IllegalStateException("Cannot encode with UTF-8", ex); + } + } + + /** + * Gets the user. + * + * @param request the request + * @return the user + */ + public static String getUser(HttpServletRequest request) { + String user = ""; + String header = request.getHeader("Authorization"); + if (header != null) { + String[] auth = header.split("Basic "); + if (auth.length == 2) { + String token = getToken(auth[1]); + if (token.contains(":")) { + String[] tokens = token.split(":"); + user = tokens[0]; + } + } + } + return user; + } + + private static String getToken(String auth) { + try { + String token = new String(DatatypeConverter.parseBase64Binary(auth)); + return token; + } catch (Exception e) { + return auth; + } + } +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/CmsoRequestError.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/CmsoRequestError.java new file mode 100644 index 0000000..0627b50 --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/CmsoRequestError.java @@ -0,0 +1,103 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + */ + +package org.onap.optf.cmso.optimizer.common; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * The Class CMSRequestError. + */ +public class CmsoRequestError implements Serializable { + private static final long serialVersionUID = 1L; + @JsonProperty + RequestError requestError; + + /** + * Instantiates a new CMS request error. + * + * @param messageId the message id + * @param text the text + * @param variables the variables + */ + public CmsoRequestError(String messageId, String text, List variables) { + requestError = new RequestError(messageId, text, variables); + } + + /** + * Instantiates a new CMS request error. + * + * @param messageId the message id + * @param text the text + */ + public CmsoRequestError(String messageId, String text) { + requestError = new RequestError(messageId, text, new ArrayList()); + } + + /** + * The Class RequestError. + */ + public class RequestError { + @JsonProperty + private String messageId; + @JsonProperty + private String text; + @JsonProperty + private List variables; + + private RequestError(String messageId, String text, List variables) { + this.messageId = "CMSO." + messageId; + this.text = text; + this.variables = variables; + } + + /** + * To string. + * + * @return the string + */ + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append(messageId).append(":").append(text).append(":").append(variables); + return sb.toString(); + + } + } + + /** + * To string. + * + * @return the string + */ + @Override + public String toString() { + return requestError.toString(); + } +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/LogMessages.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/LogMessages.java index f8d23eb..77c057c 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/LogMessages.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/LogMessages.java @@ -35,7 +35,7 @@ import java.nio.file.Files; import java.nio.file.Paths; import javax.ws.rs.core.Response.Status; import org.apache.log4j.Level; -import org.onap.observations.ObservationInterface; +import org.onap.optf.cmso.optimizer.observations.ObservationInterface; /** * The Enum LogMessages. diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/PropertiesManagement.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/PropertiesManagement.java new file mode 100644 index 0000000..4b68176 --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/common/PropertiesManagement.java @@ -0,0 +1,135 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + */ + +package org.onap.optf.cmso.optimizer.common; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import org.apache.commons.codec.binary.Base64; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +/** + * The Class PropertiesManagement. + */ +@Component +public class PropertiesManagement { + + private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); + private static EELFLogger errors = EELFManager.getInstance().getErrorLogger(); + + private static final String algorithm = "AES"; + + private static final String cipherMode = "CBC"; + + private static final String paddingScheme = "PKCS5Padding"; + + private static final String transformation = algorithm + "/" + cipherMode + "/" + paddingScheme; + + private static final String initVector = "ONAPCMSOVECTORIV"; // 16 bytes IV + + @Autowired + Environment env; + + /** + * Gets the property. + * + * @param key the key + * @param defaultValue the default value + * @return the property + */ + public String getProperty(String key, String defaultValue) { + String value = env.getProperty(key, defaultValue); + value = getDecryptedValue(value); + return value; + } + + /** + * Gets the decrypted value. + * + * @param value the value + * @return the decrypted value + */ + public static String getDecryptedValue(String value) { + if (value.startsWith("enc:")) { + String secret = getSecret(); + value = decrypt(secret, initVector, value.substring(4)); + } + return value; + } + + /** + * Gets the encrypted value. + * + * @param value the value + * @return the encrypted value + */ + public static String getEncryptedValue(String value) { + String secret = getSecret(); + value = encrypt(secret, initVector, value); + return value; + } + + private static final String encrypt(String key, String initVector, String value) { + try { + IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8")); + SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); + Cipher cipher = Cipher.getInstance(transformation); + cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); + byte[] encrypted = cipher.doFinal(value.getBytes()); + return Base64.encodeBase64String(encrypted); + } catch (Exception ex) { + errors.error("Unexpected exception {0}", ex.getMessage()); + debug.debug("Unexpected exception", ex); + } + + return null; + } + + private static final String decrypt(String key, String initVector, String encrypted) { + try { + IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8")); + SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); + Cipher cipher = Cipher.getInstance(transformation); + cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); + byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted)); + return new String(original); + } catch (Exception ex) { + errors.error("Unexpected exception {0}", ex.getMessage()); + debug.debug("Unexpected exception", ex); + } + return null; + } + + private static String getSecret() { + return "ONAPCMSOSECRETIV"; + } + +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/core/OptimizerManager.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/core/OptimizerManager.java index b61ec08..04b69b7 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/core/OptimizerManager.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/core/OptimizerManager.java @@ -25,8 +25,6 @@ import java.util.List; import java.util.Optional; import java.util.UUID; import javax.ws.rs.core.Response.Status; -import org.onap.observations.Observation; -import org.onap.optf.cmso.common.exceptions.CmsoException; import org.onap.optf.cmso.optimizer.clients.optimizer.OptimizerRequestManager; import org.onap.optf.cmso.optimizer.clients.optimizer.models.OptimizerEngineResponse; import org.onap.optf.cmso.optimizer.clients.ticketmgt.TicketMgtRequestManager; @@ -34,10 +32,12 @@ import org.onap.optf.cmso.optimizer.clients.ticketmgt.models.ActiveTicketsRespon import org.onap.optf.cmso.optimizer.clients.topology.TopologyRequestManager; import org.onap.optf.cmso.optimizer.clients.topology.models.TopologyResponse; import org.onap.optf.cmso.optimizer.common.LogMessages; +import org.onap.optf.cmso.optimizer.exceptions.CmsoException; import org.onap.optf.cmso.optimizer.model.Request; import org.onap.optf.cmso.optimizer.model.Response; import org.onap.optf.cmso.optimizer.model.dao.RequestDao; import org.onap.optf.cmso.optimizer.model.dao.ResponseDao; +import org.onap.optf.cmso.optimizer.observations.Observation; import org.onap.optf.cmso.optimizer.service.rs.models.ChangeWindow; import org.onap.optf.cmso.optimizer.service.rs.models.ElementInfo; import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerRequest; diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/exceptions/CmsoException.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/exceptions/CmsoException.java new file mode 100644 index 0000000..f780390 --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/exceptions/CmsoException.java @@ -0,0 +1,99 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + */ + +package org.onap.optf.cmso.optimizer.exceptions; + +import com.att.eelf.i18n.EELFResourceManager; +import java.util.ArrayList; +import java.util.List; +import javax.ws.rs.core.Response.Status; +import org.onap.optf.cmso.optimizer.common.CmsoRequestError; +import org.onap.optf.cmso.optimizer.observations.ObservationInterface; + +/** + * The Class CMSException. + */ +public class CmsoException extends Exception { + private static final long serialVersionUID = 1L; + + protected CmsoRequestError requestError = null; + private List variables = new ArrayList(); + protected ObservationInterface messageCode; + protected Status status; + + /** + * Instantiates a new CMS exception. + * + * @param status the status + * @param messageCode the message code + * @param args the args + */ + public CmsoException(Status status, ObservationInterface messageCode, String... args) { + super(EELFResourceManager.format(messageCode, args)); + this.status = status; + this.messageCode = messageCode; + for (String arg : args) { + variables.add(arg); + } + requestError = new CmsoRequestError(messageCode.name(), getMessage(), variables); + } + + /** + * Gets the status. + * + * @return the status + */ + public Status getStatus() { + return status; + } + + /** + * Gets the message code. + * + * @return the message code + */ + public ObservationInterface getMessageCode() { + return messageCode; + } + + /** + * Gets the variables. + * + * @return the variables + */ + public String[] getVariables() { + return variables.toArray(new String[variables.size()]); + } + + /** + * Gets the request error. + * + * @return the request error + */ + public CmsoRequestError getRequestError() { + return requestError; + } +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/filters/CmsoClientFilters.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/filters/CmsoClientFilters.java index fffd53e..07bca5b 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/filters/CmsoClientFilters.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/filters/CmsoClientFilters.java @@ -27,18 +27,17 @@ package org.onap.optf.cmso.optimizer.filters; import static com.att.eelf.configuration.Configuration.MDC_KEY_REQUEST_ID; - import java.io.IOException; import javax.ws.rs.client.ClientRequestContext; import javax.ws.rs.client.ClientRequestFilter; import javax.ws.rs.client.ClientResponseContext; import javax.ws.rs.client.ClientResponseFilter; import javax.ws.rs.core.MultivaluedMap; -import org.onap.observations.Mdc; -import org.onap.observations.MessageHeaders; -import org.onap.observations.MessageHeaders.HeadersEnum; -import org.onap.observations.Observation; import org.onap.optf.cmso.optimizer.common.LogMessages; +import org.onap.optf.cmso.optimizer.observations.Mdc; +import org.onap.optf.cmso.optimizer.observations.MessageHeaders; +import org.onap.optf.cmso.optimizer.observations.MessageHeaders.HeadersEnum; +import org.onap.optf.cmso.optimizer.observations.Observation; import org.slf4j.MDC; import org.springframework.stereotype.Component; diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/filters/CmsoContainerFilters.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/filters/CmsoContainerFilters.java index 3a13805..5a236f9 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/filters/CmsoContainerFilters.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/filters/CmsoContainerFilters.java @@ -40,11 +40,11 @@ import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.ext.Provider; -import org.onap.observations.Mdc; -import org.onap.observations.MessageHeaders; -import org.onap.observations.MessageHeaders.HeadersEnum; -import org.onap.observations.Observation; import org.onap.optf.cmso.optimizer.common.LogMessages; +import org.onap.optf.cmso.optimizer.observations.Mdc; +import org.onap.optf.cmso.optimizer.observations.MessageHeaders; +import org.onap.optf.cmso.optimizer.observations.MessageHeaders.HeadersEnum; +import org.onap.optf.cmso.optimizer.observations.Observation; import org.springframework.stereotype.Component; @Priority(1) @@ -68,8 +68,8 @@ public class CmsoContainerFilters implements ContainerRequestFilter, ContainerRe MultivaluedMap respHeaders = responseContext.getHeaders(); String minorVersion = reqHeaders.getFirst(HeadersEnum.MinorVersion.toString()); respHeaders.add(HeadersEnum.MinorVersion.toString(), minorVersion); - respHeaders.add(HeadersEnum.LatestVersion.toString(), MessageHeaders.getLatestversion()); - respHeaders.add(HeadersEnum.PatchVersion.toString(), MessageHeaders.getPatchversion()); + respHeaders.add(HeadersEnum.LatestVersion.toString(), MessageHeaders.getLatestVersion()); + respHeaders.add(HeadersEnum.PatchVersion.toString(), MessageHeaders.getPatchVersion()); } catch (Exception e) { if (e instanceof WebApplicationException) { diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/Mdc.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/Mdc.java new file mode 100644 index 0000000..66834fa --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/Mdc.java @@ -0,0 +1,279 @@ +/* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + */ + +package org.onap.optf.cmso.optimizer.observations; + +import static com.att.eelf.configuration.Configuration.MDC_BEGIN_TIMESTAMP; +import static com.att.eelf.configuration.Configuration.MDC_END_TIMESTAMP; +import static com.att.eelf.configuration.Configuration.MDC_KEY_REQUEST_ID; +import static com.att.eelf.configuration.Configuration.MDC_PARTNER_NAME; +import static com.att.eelf.configuration.Configuration.MDC_REMOTE_HOST; +import static com.att.eelf.configuration.Configuration.MDC_RESPONSE_CODE; +import static com.att.eelf.configuration.Configuration.MDC_RESPONSE_DESC; +import static com.att.eelf.configuration.Configuration.MDC_STATUS_CODE; +import static com.att.eelf.configuration.Configuration.MDC_TARGET_ENTITY; +import static com.att.eelf.configuration.Configuration.MDC_TARGET_SERVICE_NAME; + +import com.att.eelf.utils.Stopwatch; +import java.net.URI; +import java.util.Date; +import java.util.Map; +import java.util.UUID; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.client.ClientRequestContext; +import javax.ws.rs.client.ClientResponseContext; +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerResponseContext; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.Response.StatusType; +import org.onap.optf.cmso.optimizer.observations.MessageHeaders.HeadersEnum; +import org.slf4j.MDC; + +/** + * EELF logging MDC fields not defined in the MDC Configuration (i.e. MDC_ALERT_SEVERITY) + **/ +public class Mdc { + + /** The Constant SERVICE_NAME. */ + public static final String SERVICE_NAME = "CSS-Scheduler"; + + /** + * The Enum Enum. + */ + public enum Enum { + // BeginTimestamp, + // EndTimeStamp, + // RequestId, + // ServiceInstanceId, + VirtualServerName, + // ServiceName, + // PartnerName, + // StatusCOde, + // ResponseCode, + // ResponseDescription, + // InstanceUUID, + // AlertSeverity, + // ServerIPAddress, + // ElapsedTime, + // ServerFQDN, + // RemoteHost, + ClassName, + Unused, + // ProcessKey, + CustomField1, + CustomField2, + CustomField3, + CustomField4, + // TargetVirtualEntity, + // TargetEntity, + // TargetServiceName, + ErrorCode, + ErrorDescription, + Timer, + } + + /** + * Gets the caller. + * + * @param back the back + * @return the caller + */ + public static String getCaller(int back) { + StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); + return stackTraceElements[back].getClassName() + "." + stackTraceElements[back].getMethodName(); + } + + /** + * Sets the caller. + * + * @param back the new caller + */ + public static void setCaller(int back) { + String caller = MDC.get(Enum.ClassName.name()); + if (caller == null) { + MDC.put(Enum.ClassName.name(), getCaller(back)); + } + } + + /** + * Sets the observation. + * + * @param obs the new observation + */ + public static void setObservation(ObservationInterface obs) { + MDC.put(Enum.CustomField4.name(), obs.name()); + } + + /** + * Clear caller. + */ + public static void clearCaller() { + MDC.remove(Enum.ClassName.name()); + } + + + /** + * Save. + * + * @return the map + */ + public static Map save() { + Map save = MDC.getCopyOfContextMap(); + return save; + } + + /** + * Restore. + * + * @param mdcSave the mdc save + */ + public static void restore(Map mdcSave) { + MDC.clear(); + for (String name : mdcSave.keySet()) { + MDC.put(name, mdcSave.get(name)); + } + } + + + + /** + * Sets the request id if not set. + * + * @param requestId the new request id if not set + */ + public static void setRequestIdIfNotSet(String requestId) { + if (MDC.get(MDC_KEY_REQUEST_ID) == null || MDC.get(MDC_KEY_REQUEST_ID).equals("")) { + setRequestId(requestId); + } + } + + /** + * Sets the request id. + * + * @param requestId the new request id + */ + public static void setRequestId(String requestId) { + MDC.put(MDC_KEY_REQUEST_ID, requestId); + } + + /** + * Metric start. + * + * @param requestContext the request context + */ + public static void metricStart(ClientRequestContext requestContext) { + MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); + setPartnerTargetFromUri(requestContext.getUri()); + } + + /** + * Metric end. + * + * @param response the response + */ + public static void metricEnd(ClientResponseContext response) { + + Date now = new Date(); + // MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now)); + MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now)); + setResponseInfo(response.getStatusInfo()); + + } + + /** + * Audit start. + * + * @param requestContext the request context + * @param servletRequest the servlet request + */ + public static void auditStart(ContainerRequestContext requestContext, HttpServletRequest servletRequest) { + MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); + MDC.put(MDC_REMOTE_HOST, servletRequest.getRemoteHost()); + MDC.put(Enum.ClassName.name(), getCaller(4)); + MultivaluedMap headers = requestContext.getHeaders(); + String transactionId = headers.getFirst(HeadersEnum.TransactionID.toString()); + if (transactionId != null) { + setRequestId(transactionId); + } else { + setRequestId(UUID.randomUUID().toString()); + } + + } + + /** + * Audit end. + * + * @param requestContext the request context + * @param response the response + */ + public static void auditEnd(ContainerRequestContext requestContext, ContainerResponseContext response) { + Date now = new Date(); + // MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(now)); + MDC.put(MDC_END_TIMESTAMP, Stopwatch.isoFormatter.format(now)); + MDC.put(Enum.ClassName.name(), getCaller(4)); + + setResponseInfo(response.getStatusInfo()); + + } + + private static void setResponseInfo(StatusType statusInfo) { + Integer status = statusInfo.getStatusCode(); + String completed = "ERROR"; + if (status >= 200 && status < 300) { + completed = "COMPLETE"; + } + MDC.put(MDC_RESPONSE_CODE, status.toString()); + MDC.put(MDC_RESPONSE_DESC, statusInfo.getReasonPhrase()); + MDC.put(MDC_STATUS_CODE, completed); + } + + /** + * Sets the event. + * + * @param requestId the new event + */ + public static void setEvent(String requestId) { + MDC.put(MDC_BEGIN_TIMESTAMP, Stopwatch.isoFormatter.format(new Date())); + MDC.put(MDC_END_TIMESTAMP, MDC.get(MDC_BEGIN_TIMESTAMP)); + setRequestId(requestId); + } + + private static void setPartnerTargetFromUri(URI uri) { + try { + MDC.put(MDC_PARTNER_NAME, uri.getHost()); + MDC.put(MDC_TARGET_ENTITY, uri.getScheme() + "://" + uri.getHost() + ":" + uri.getPort()); + MDC.put(MDC_TARGET_SERVICE_NAME, uri.getPath()); + } catch (Exception e) { + MDC.put(MDC_PARTNER_NAME, "UNKNOWN"); + MDC.put(MDC_TARGET_ENTITY, "UNKNOWN"); + MDC.put(MDC_TARGET_SERVICE_NAME, "UNKNOWN"); + } + } + + +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/MessageHeaders.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/MessageHeaders.java new file mode 100644 index 0000000..1c40196 --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/MessageHeaders.java @@ -0,0 +1,163 @@ +/* + * Copyright © 2017-2018 AT&T Intellectual Property. Modifications Copyright © 2018 IBM. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + */ + +package org.onap.optf.cmso.optimizer.observations; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * The Class MessageHeaders. + */ +public class MessageHeaders { + + /** + * The Enum HeadersEnum. + */ + public enum HeadersEnum { + UNDEFINED("UNDEFINED"), + TransactionID("X-TransactionId"), + FromAppID("X-FromAppId"), + MinorVersion("X-MinorVersion"), + PatchVersion("X-PatchVersion"), + LatestVersion("X-LatestVersion"),; + + private final String text; + + private HeadersEnum(String text) { + this.text = text; + } + + /** + * To string. + * + * @return the string + */ + @Override + public String toString() { + return text; + } + } + + /** The Constant supportedMajorVersions. */ + public static final Map supportedMajorVersions = new HashMap(); + + static { + supportedMajorVersions.put("v1", "0"); + supportedMajorVersions.put("v2", "0"); + } + + /** The Constant supportedMajorMinorVersions. */ + public static final Set supportedMajorMinorVersions = new HashSet(); + + static { + supportedMajorMinorVersions.add("v1.0"); + supportedMajorMinorVersions.add("v2.0"); + } + + /** The Constant latestVersion. */ + public static final String latestVersion = "2.0.0"; + + /** The Constant patchVersion. */ + public static final String patchVersion = "0"; + + /** + * From string. + * + * @param text the text + * @return the headers enum + */ + public static HeadersEnum fromString(String text) { + for (HeadersEnum e : HeadersEnum.values()) { + if (e.text.equals(text)) { + return e; + } + } + return HeadersEnum.UNDEFINED; + } + + /** + * Gets the patch version. + * + * @return the patch version + */ + public static String getPatchVersion() { + return patchVersion; + } + + /** + * Gets the latest version. + * + * @return the latest version + */ + public static String getLatestVersion() { + return latestVersion; + } + + public static Map getSupportedmajorversions() { + return supportedMajorVersions; + } + + public static Set getSupportedmajorminorversions() { + return supportedMajorMinorVersions; + } + + /** + * Validate major version. + * + * @param major the major + * @return true, if successful + */ + public static boolean validateMajorVersion(String major) { + String majorKey = major.toLowerCase(); + if (!supportedMajorVersions.containsKey(majorKey)) { + return false; + } + return true; + } + + /** + * Validate major minor version. + * + * @param major the major + * @param minor the minor + * @return true, if successful + */ + public static boolean validateMajorMinorVersion(String major, String minor) { + String majorKey = major.toLowerCase(); + if (!supportedMajorVersions.containsKey(majorKey)) { + return false; + } + + if (minor != null) { + String majorMinorKey = majorKey + "." + minor; + return supportedMajorMinorVersions.contains(majorMinorKey); + } + return true; + } +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/Observation.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/Observation.java new file mode 100644 index 0000000..cb36e40 --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/Observation.java @@ -0,0 +1,129 @@ +/* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + */ + +package org.onap.optf.cmso.optimizer.observations; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import org.apache.log4j.Level; +import org.onap.optf.cmso.optimizer.Application; + + +/** + * The Class Observation. + */ +public class Observation { + private static EELFLogger log = EELFManager.getInstance().getLogger(Application.class); + private static EELFLogger metrics = EELFManager.getInstance().getMetricsLogger(); + private static EELFLogger audit = EELFManager.getInstance().getAuditLogger(); + private static EELFLogger errors = EELFManager.getInstance().getErrorLogger(); + private static EELFLogger debug = EELFManager.getInstance().getDebugLogger(); + + /** + * Report. + * + * @param obs the o + * @param execpt the e + * @param arguments the arguments + */ + // ************************************************************************************************* + public static void report(ObservationInterface obs, Exception execpt, String... arguments) { + Mdc.setCaller(4); + Mdc.setObservation(obs); + if (obs.getAudit()) { + audit.info(obs, execpt, arguments); + } + if (obs.getMetric()) { + metrics.info(obs, execpt, arguments); + } + Level lev = obs.getLevel(); + switch (lev.toInt()) { + case Level.WARN_INT: + errors.warn(obs, arguments); + debug.debug(obs, execpt, arguments); + break; + case Level.INFO_INT: + log.info(obs, execpt, arguments); + debug.debug(obs, execpt, arguments); + break; + case Level.ERROR_INT: + errors.error(obs, arguments); + debug.debug(obs, execpt, arguments); + break; + case Level.TRACE_INT: + debug.trace(obs, execpt, arguments); + break; + case Level.DEBUG_INT: + debug.debug(obs, execpt, arguments); + break; + default: + log.info(obs, execpt, arguments); + } + Mdc.clearCaller(); + } + + /** + * Report. + * + * @param obs the o + * @param arguments the arguments + */ + public static void report(ObservationInterface obs, String... arguments) { + Mdc.setCaller(4); + Mdc.setObservation(obs); + if (obs.getAudit()) { + audit.info(obs, arguments); + } + if (obs.getMetric()) { + metrics.info(obs, arguments); + } + Level levl = obs.getLevel(); + switch (levl.toInt()) { + case Level.WARN_INT: + errors.warn(obs, arguments); + debug.debug(obs, arguments); + break; + case Level.INFO_INT: + log.info(obs, arguments); + debug.debug(obs, arguments); + break; + case Level.ERROR_INT: + errors.error(obs, arguments); + debug.debug(obs, arguments); + break; + case Level.TRACE_INT: + debug.debug(obs, arguments); + break; + case Level.DEBUG_INT: + debug.debug(obs, arguments); + break; + default: + log.info(obs, arguments); + } + Mdc.clearCaller(); + } + +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/ObservationInterface.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/ObservationInterface.java new file mode 100644 index 0000000..2b4ff58 --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/ObservationInterface.java @@ -0,0 +1,49 @@ +/* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + */ + +package org.onap.optf.cmso.optimizer.observations; + +import com.att.eelf.i18n.EELFResolvableErrorEnum; +import javax.ws.rs.core.Response.Status; +import org.apache.log4j.Level; + +public interface ObservationInterface extends EELFResolvableErrorEnum { + public Enum getValue(); + + public Level getLevel(); + + public String getMessage(); + + public Status getStatus(); + + public String getDomain(); + + public String name(); + + public Boolean getAudit(); + + public Boolean getMetric(); +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/ObservationObject.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/ObservationObject.java new file mode 100644 index 0000000..60ba2a1 --- /dev/null +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/observations/ObservationObject.java @@ -0,0 +1,198 @@ +/* + * Copyright © 2019 AT&T Intellectual Property. + * + * 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. + * + * + * Unless otherwise specified, all documentation contained herein is licensed under the Creative + * Commons License, Attribution 4.0 Intl. (the "License"); you may not use this documentation except + * in compliance with the License. You may obtain a copy of the License at + * + * https://creativecommons.org/licenses/by/4.0/ + * + * Unless required by applicable law or agreed to in writing, documentation 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. + */ + +package org.onap.optf.cmso.optimizer.observations; + +import com.att.eelf.i18n.EELFResolvableErrorEnum; +import com.att.eelf.i18n.EELFResourceManager; +import javax.ws.rs.core.Response.Status; +import org.apache.log4j.Level; + + +/** + * The Class ObservationObject. + */ +public class ObservationObject implements ObservationInterface { + + // ************************************************************************************************* + // Interface class that matches the ObservationInteface pattern + // This will be used in case we decide to provide external overrides and we need to instantiate + // For now, we'll just use the Enum itself. + // + // + private Enum value = null; + + private Level level = null; + private String message = null; + private Status status = null; + private String domain = null; + private Boolean metric = false; + private Boolean audit = false; + + /** + * Instantiates a new observation object. + * + * @param obs the o + */ + public ObservationObject(ObservationInterface obs) { + this.value = obs.getValue(); + this.level = obs.getLevel(); + this.message = obs.getMessage(); + this.status = obs.getStatus(); + this.domain = obs.getDomain(); + this.metric = obs.getMetric(); + this.audit = obs.getAudit(); + + } + + /** + * Gets the value. + * + * @return the value + */ + @Override + public Enum getValue() { + return value; + } + + /** + * Gets the message. + * + * @return the message + */ + @Override + public String getMessage() { + return message; + } + + /** + * Gets the status. + * + * @return the status + */ + @Override + public Status getStatus() { + return status; + } + + /** + * Gets the domain. + * + * @return the domain + */ + @Override + public String getDomain() { + return domain; + } + + /** + * Gets the level. + * + * @return the level + */ + @Override + public Level getLevel() { + return level; + } + + /** + * Name. + * + * @return the string + */ + @Override + public String name() { + return value.name(); + } + + /** + * Gets the audit. + * + * @return the audit + */ + @Override + public Boolean getAudit() { + return audit; + } + + /** + * Gets the metric. + * + * @return the metric + */ + @Override + public Boolean getMetric() { + return metric; + } + + /** + * Gets the message. + * + * @param arguments the arguments + * @return the message + */ + public String getMessagef(String... arguments) { + return EELFResourceManager.format((EELFResolvableErrorEnum) value, arguments); + } + + /** + * Sets the value. + * + * @param value the new value + */ + public void setValue(Enum value) { + this.value = value; + } + + /** + * Sets the level. + * + * @param level the new level + */ + public void setLevel(Level level) { + this.level = level; + } + + /** + * Sets the message. + * + * @param message the new message + */ + public void setMessage(String message) { + this.message = message; + } + + /** + * Sets the status. + * + * @param status the new status + */ + public void setStatus(Status status) { + this.status = status; + } + + +} diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/AdminToolImpl.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/AdminToolImpl.java index 7b4859d..93da842 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/AdminToolImpl.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/AdminToolImpl.java @@ -32,7 +32,7 @@ import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; -import org.onap.optf.cmso.common.PropertiesManagement; +import org.onap.optf.cmso.optimizer.common.PropertiesManagement; import org.springframework.stereotype.Controller; @Controller diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/OptimizerInterface.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/OptimizerInterface.java index 27a368f..d5cbac4 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/OptimizerInterface.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/OptimizerInterface.java @@ -26,11 +26,6 @@ package org.onap.optf.cmso.optimizer.service.rs; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; import javax.ws.rs.DELETE; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; @@ -40,13 +35,18 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.onap.optf.cmso.common.CmsoRequestError; +import org.onap.optf.cmso.optimizer.common.CmsoRequestError; import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerRequest; import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerResponse; import org.onap.optf.cmso.optimizer.service.rs.models.PolicyInfo; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; @Api("Optimizer Interface") @Path("/{apiVersion}") diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/OptimizerInterfaceImpl.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/OptimizerInterfaceImpl.java index b475861..17260f1 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/OptimizerInterfaceImpl.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/OptimizerInterfaceImpl.java @@ -34,11 +34,11 @@ import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; -import org.onap.observations.Observation; -import org.onap.optf.cmso.common.exceptions.CmsoException; import org.onap.optf.cmso.optimizer.common.LogMessages; import org.onap.optf.cmso.optimizer.core.OptimizerManager; +import org.onap.optf.cmso.optimizer.exceptions.CmsoException; import org.onap.optf.cmso.optimizer.model.dao.RequestDao; +import org.onap.optf.cmso.optimizer.observations.Observation; import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerRequest; import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerResponse; import org.onap.optf.cmso.optimizer.service.rs.models.OptimizerResponse.OptimizeScheduleStatus; diff --git a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/models/ChangeWindow.java b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/models/ChangeWindow.java index bec1de7..5b52963 100644 --- a/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/models/ChangeWindow.java +++ b/cmso-optimizer/src/main/java/org/onap/optf/cmso/optimizer/service/rs/models/ChangeWindow.java @@ -140,7 +140,7 @@ public class ChangeWindow implements Serializable { Instant startInstant = startTime.toInstant(); Instant endInstant = endTime.toInstant(); Instant testStart = test.getStartTime().toInstant().plusMillis(startTimeZoneOffset);; - Instant testEnd = test.getEndTime().toInstant().plusMillis(startTimeZoneOffset);; + Instant testEnd = test.getEndTime().toInstant().plusMillis(endTimeZoneOffset);; if (!testStart.isBefore(startInstant) && !testEnd.isAfter(endInstant)) { return true; diff --git a/cmso-optimizer/src/main/resources/META-INF/spring.factories b/cmso-optimizer/src/main/resources/META-INF/spring.factories index c0b4a01..a2c386a 100644 --- a/cmso-optimizer/src/main/resources/META-INF/spring.factories +++ b/cmso-optimizer/src/main/resources/META-INF/spring.factories @@ -1 +1 @@ -org.springframework.boot.env.EnvironmentPostProcessor=org.onap.optf.cmso.CmsoEnvironmentPostProcessor \ No newline at end of file +org.springframework.boot.env.EnvironmentPostProcessor=org.onap.optf.cmso.optimizer.CmsoEnvironmentPostProcessor \ No newline at end of file diff --git a/cmso-optimizer/src/test/java/org/onap/optf/cmso/optimizer/availability/timewindows/RecurringWindowsTest.java b/cmso-optimizer/src/test/java/org/onap/optf/cmso/optimizer/availability/timewindows/RecurringWindowsTest.java index d772650..a10114e 100644 --- a/cmso-optimizer/src/test/java/org/onap/optf/cmso/optimizer/availability/timewindows/RecurringWindowsTest.java +++ b/cmso-optimizer/src/test/java/org/onap/optf/cmso/optimizer/availability/timewindows/RecurringWindowsTest.java @@ -23,7 +23,6 @@ import java.time.Instant; import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.TimeZone; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -56,7 +55,7 @@ public class RecurringWindowsTest { @Test public void getAvailabilityWindowsForPolicies() { - getAvailabilityWindowsForPolicy("AllDayEveryDay", "2019-03-08T00:00:00.00Z", "2019-03-12T00:00:00.00Z", 5); + getAvailabilityWindowsForPolicy("AllDayEveryDay", "2019-03-08T00:00:00.00Z", "2019-03-12T00:00:00.00Z", 1); getAvailabilityWindowsForPolicy("Weekday_00_06", "2019-03-08T00:00:00.00Z", "2019-03-12T00:00:00.00Z", 3); getAvailabilityWindowsForPolicy("EveryDay_00_06", "2019-03-08T00:00:00.00Z", "2019-03-12T00:00:00.00Z", 5); getAvailabilityWindowsForPolicy("Weekend_00_06", "2019-03-08T00:00:00.00Z", "2019-03-12T00:00:00.00Z", 3); diff --git a/cmso-optimizer/src/test/java/org/onap/optf/cmso/utilities/PropertiesAdmin.java b/cmso-optimizer/src/test/java/org/onap/optf/cmso/utilities/PropertiesAdmin.java index f91fc54..f5adb6f 100644 --- a/cmso-optimizer/src/test/java/org/onap/optf/cmso/utilities/PropertiesAdmin.java +++ b/cmso-optimizer/src/test/java/org/onap/optf/cmso/utilities/PropertiesAdmin.java @@ -19,7 +19,7 @@ package org.onap.optf.cmso.utilities; -import org.onap.optf.cmso.common.PropertiesManagement; +import org.onap.optf.cmso.optimizer.common.PropertiesManagement; /** * The Class PropertiesAdmin. -- cgit 1.2.3-korg