From 63b13a0cddf45b4cfd1691dd5b95a205af355898 Mon Sep 17 00:00:00 2001 From: efiacor Date: Fri, 16 Dec 2022 12:12:30 +0000 Subject: [PATCH] [DMAAP-DR] Remove cadi/aaf from dr-node Signed-off-by: efiacor Change-Id: Iba1b7d8c087a4f68c3a8a517145abf70848ee030 Issue-ID: DMAAP-1642 --- .../docker-compose/node.properties | 41 +-- datarouter-node/pom.xml | 45 --- .../org/onap/dmaap/datarouter/node/DestInfo.java | 2 + .../dmaap/datarouter/node/DestInfoBuilder.java | 18 +- .../dmaap/datarouter/node/NodeAafPropsUtils.java | 58 ---- .../dmaap/datarouter/node/NodeConfigManager.java | 347 ++++++++++----------- .../org/onap/dmaap/datarouter/node/NodeRunner.java | 8 +- .../org/onap/dmaap/datarouter/node/NodeServer.java | 35 +-- .../onap/dmaap/datarouter/node/NodeServlet.java | 154 +++++---- .../org/onap/dmaap/datarouter/node/PathUtil.java | 106 ------- .../org/onap/dmaap/datarouter/node/PublishId.java | 56 ---- .../org/onap/dmaap/datarouter/node/TaskList.java | 2 +- .../datarouter/node/{ => config}/NodeConfig.java | 141 +++------ .../datarouter/node/{ => config}/PathFinder.java | 17 +- .../datarouter/node/{ => config}/ProvData.java | 122 ++++---- .../node/{ => config}/SubnetMatcher.java | 4 +- .../datarouter/node/{ => delivery}/Delivery.java | 6 +- .../node/{ => delivery}/DeliveryQueue.java | 16 +- .../node/{ => delivery}/DeliveryQueueHelper.java | 4 +- .../node/{ => delivery}/DeliveryTask.java | 32 +- .../node/{ => delivery}/DeliveryTaskHelper.java | 4 +- .../dmaap/datarouter/node/eelf/MetricsFilter.java | 2 - .../datarouter/node/{ => log}/LogManager.java | 9 +- .../dmaap/datarouter/node/{ => log}/StatusLog.java | 4 +- .../datarouter/node/utils/NodeTlsManager.java | 169 ++++++++++ .../datarouter/node/{ => utils}/NodeUtils.java | 89 +----- .../resources/aaf/org.onap.dmaap-dr.cred.props | 17 - .../main/resources/aaf/org.onap.dmaap-dr.keyfile | 27 -- .../resources/aaf/org.onap.dmaap-dr.location.props | 8 - .../src/main/resources/aaf/org.onap.dmaap-dr.p12 | Bin 4217 -> 0 bytes .../src/main/resources/aaf/org.onap.dmaap-dr.props | 24 -- .../main/resources/aaf/org.onap.dmaap-dr.trust.jks | Bin 1413 -> 0 bytes datarouter-node/src/main/resources/node.properties | 42 +-- .../dmaap/datarouter/node/DeliveryQueueTest.java | 3 + .../dmaap/datarouter/node/DeliveryTaskTest.java | 2 + .../onap/dmaap/datarouter/node/DeliveryTest.java | 5 +- .../onap/dmaap/datarouter/node/LogManagerTest.java | 4 +- .../datarouter/node/NodeAafPropsUtilsTest.java | 41 --- .../datarouter/node/NodeConfigManagerTest.java | 13 +- .../onap/dmaap/datarouter/node/NodeConfigTest.java | 5 +- .../onap/dmaap/datarouter/node/NodeServerTest.java | 20 +- .../dmaap/datarouter/node/NodeServletTest.java | 15 +- .../dmaap/datarouter/node/NodeTlsManagerTest.java | 51 +++ .../onap/dmaap/datarouter/node/NodeUtilsTest.java | 15 +- .../onap/dmaap/datarouter/node/PathFinderTest.java | 2 + .../onap/dmaap/datarouter/node/ProvDataTest.java | 1 + .../onap/dmaap/datarouter/node/StatusLogTest.java | 1 + .../resources/aaf/org.onap.dmaap-dr.cred.props | 17 - .../test/resources/aaf/org.onap.dmaap-dr.keyfile | 27 -- .../resources/aaf/org.onap.dmaap-dr.location.props | 8 - .../src/test/resources/aaf/org.onap.dmaap-dr.p12 | Bin 4217 -> 0 bytes .../src/test/resources/aaf/org.onap.dmaap-dr.props | 24 -- .../test/resources/aaf/org.onap.dmaap-dr.trust.jks | Bin 1413 -> 0 bytes .../resources/certs/org.onap.dmaap-dr-node.p12 | Bin 0 -> 4596 bytes .../src/test/resources/certs/truststore.jks | Bin 0 -> 3234 bytes .../src/test/resources/node_test.properties | 43 ++- .../test/resources/org.onap.dmaap-dr-test-cert.jks | Bin 3647 -> 0 bytes datarouter-node/src/test/resources/prov_data.json | 2 - 58 files changed, 779 insertions(+), 1129 deletions(-) delete mode 100644 datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeAafPropsUtils.java delete mode 100644 datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/PathUtil.java delete mode 100644 datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/PublishId.java rename datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/{ => config}/NodeConfig.java (89%) rename datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/{ => config}/PathFinder.java (90%) rename datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/{ => config}/ProvData.java (76%) rename datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/{ => config}/SubnetMatcher.java (96%) rename datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/{ => delivery}/Delivery.java (98%) rename datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/{ => delivery}/DeliveryQueue.java (97%) rename datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/{ => delivery}/DeliveryQueueHelper.java (97%) rename datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/{ => delivery}/DeliveryTask.java (95%) rename datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/{ => delivery}/DeliveryTaskHelper.java (96%) rename datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/{ => log}/LogManager.java (95%) rename datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/{ => log}/StatusLog.java (98%) create mode 100644 datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/utils/NodeTlsManager.java rename datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/{ => utils}/NodeUtils.java (72%) delete mode 100644 datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.cred.props delete mode 100644 datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.keyfile delete mode 100644 datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.location.props delete mode 100644 datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.p12 delete mode 100644 datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.props delete mode 100644 datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.trust.jks delete mode 100644 datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeAafPropsUtilsTest.java create mode 100644 datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeTlsManagerTest.java delete mode 100644 datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.cred.props delete mode 100644 datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.keyfile delete mode 100644 datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.location.props delete mode 100644 datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.p12 delete mode 100644 datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.props delete mode 100644 datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.trust.jks create mode 100644 datarouter-node/src/test/resources/certs/org.onap.dmaap-dr-node.p12 create mode 100644 datarouter-node/src/test/resources/certs/truststore.jks delete mode 100644 datarouter-node/src/test/resources/org.onap.dmaap-dr-test-cert.jks diff --git a/csit/scripts/dmaap-datarouter/docker-compose/node.properties b/csit/scripts/dmaap-datarouter/docker-compose/node.properties index 1e684b43..d9c7b824 100644 --- a/csit/scripts/dmaap-datarouter/docker-compose/node.properties +++ b/csit/scripts/dmaap-datarouter/docker-compose/node.properties @@ -51,35 +51,36 @@ SpoolDir = /opt/app/datartr/spool # The path to the redirection data file RedirectionFile = etc/redirections.dat # +# https security required for publish request +TlsEnabled = false +# +# Enabled TLS protocols +NodeHttpsProtocols = TLSv1.1|TLSv1.2 +# # The type of keystore for https KeyStoreType = PKCS12 # +# The path to your KeyStoreFile +KeyStorePath = /opt/app/datartr/certs/org.onap.dmaap-dr-node.p12 +# +# The key store password +KeyStorePass = changeit +# +# The key manager password +KeyManagerPass = changeit +# # The type of truststore for https TrustStoreType = jks # +# The path to your trust store +TrustStorePath = /opt/app/datartr/certs/truststore.jks +# +# The trust store password +TrustStorePass = changeit +# # The path to the file used to trigger an orderly shutdown QuiesceFile = etc/SHUTDOWN # # The key used to generate passwords for node to node transfers NodeAuthKey = Node123! -# -# DR_NODE DEFAULT ENABLED TLS PROTOCOLS -NodeHttpsProtocols = TLSv1.1|TLSv1.2 -# -# AAF type to generate permission string -AAFType = org.onap.dmaap-dr.feed -# -# AAF default instance to generate permission string - default should be legacy -AAFInstance = legacy -# -# AAF action to generate permission string - default should be publish -AAFAction = publish -# -# AAF CADI enabled flag -CadiEnabled = false -# -# AAF Props file path -AAFPropsFilePath = /opt/app/osaaf/local/org.onap.dmaap-dr.props -# https security required for publish request -TlsEnabled = false diff --git a/datarouter-node/pom.xml b/datarouter-node/pom.xml index b3fdd3ca..ffaa2602 100755 --- a/datarouter-node/pom.xml +++ b/datarouter-node/pom.xml @@ -100,10 +100,6 @@ org.eclipse.jetty jetty-http - - org.onap.aaf.authz - aaf-cadi-core - com.intellij annotations @@ -342,47 +338,6 @@ - - copy-resources-etc - validate - - copy-resources - - - ${basedir}/target/docker-stage/opt/app/datartr/etc - - - ${basedir}/src/main/resources - - misc/** - **/** - - - aaf/** - docker/** - - - - - - - copy-aaf-props - validate - - copy-resources - - - ${basedir}/target/docker-stage/opt/app/osaaf/local - - - ${basedir}/src/main/resources/aaf - - **/** - - - - - diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DestInfo.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DestInfo.java index f5fa6e98..ac8c3186 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DestInfo.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DestInfo.java @@ -24,6 +24,8 @@ package org.onap.dmaap.datarouter.node; +import org.onap.dmaap.datarouter.node.config.NodeConfig; + /** * Information for a delivery destination that doesn't change from message to message. */ diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DestInfoBuilder.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DestInfoBuilder.java index 00c5cd8b..2b9db95b 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DestInfoBuilder.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DestInfoBuilder.java @@ -66,7 +66,7 @@ public class DestInfoBuilder { return destInfoLogData; } - DestInfoBuilder setLogdata(String logdata) { + public DestInfoBuilder setLogdata(String logdata) { this.destInfoLogData = logdata; return this; } @@ -84,7 +84,7 @@ public class DestInfoBuilder { return destInfoAuthUser; } - DestInfoBuilder setAuthuser(String authuser) { + public DestInfoBuilder setAuthuser(String authuser) { this.destInfoAuthUser = authuser; return this; } @@ -93,7 +93,7 @@ public class DestInfoBuilder { return destInfoAuthentication; } - DestInfoBuilder setAuthentication(String authentication) { + public DestInfoBuilder setAuthentication(String authentication) { this.destInfoAuthentication = authentication; return this; } @@ -102,7 +102,7 @@ public class DestInfoBuilder { return destInfoMetaOnly; } - DestInfoBuilder setMetaonly(boolean metaonly) { + public DestInfoBuilder setMetaonly(boolean metaonly) { this.destInfoMetaOnly = metaonly; return this; } @@ -111,7 +111,7 @@ public class DestInfoBuilder { return destInfoUse100; } - DestInfoBuilder setUse100(boolean use100) { + public DestInfoBuilder setUse100(boolean use100) { this.destInfoUse100 = use100; return this; } @@ -120,7 +120,7 @@ public class DestInfoBuilder { return destInfoPrivilegedSubscriber; } - DestInfoBuilder setPrivilegedSubscriber(boolean privilegedSubscriber) { + public DestInfoBuilder setPrivilegedSubscriber(boolean privilegedSubscriber) { this.destInfoPrivilegedSubscriber = privilegedSubscriber; return this; } @@ -129,7 +129,7 @@ public class DestInfoBuilder { return destInfoFollowRedirects; } - DestInfoBuilder setFollowRedirects(boolean followRedirects) { + public DestInfoBuilder setFollowRedirects(boolean followRedirects) { this.destInfoFollowRedirects = followRedirects; return this; } @@ -138,12 +138,12 @@ public class DestInfoBuilder { return destInfoDecompress; } - DestInfoBuilder setDecompress(boolean decompress) { + public DestInfoBuilder setDecompress(boolean decompress) { this.destInfoDecompress = decompress; return this; } - DestInfo createDestInfo() { + public DestInfo createDestInfo() { return new DestInfo(this); } } \ No newline at end of file diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeAafPropsUtils.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeAafPropsUtils.java deleted file mode 100644 index ec49807e..00000000 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeAafPropsUtils.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.dmaap.datarouter.node; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import org.onap.aaf.cadi.PropAccess; - -class NodeAafPropsUtils { - - private static final EELFLogger eelfLogger = EELFManager.getInstance().getLogger(NodeAafPropsUtils.class); - private final PropAccess propAccess; - - NodeAafPropsUtils(File propsFile) throws IOException { - propAccess = new PropAccess(); - try { - propAccess.load(new FileInputStream(propsFile.getPath())); - } catch (IOException e) { - eelfLogger.error("Failed to load props file: " + propsFile + "\n" + e.getMessage(), e); - throw e; - } - } - - String getDecryptedPass(String password) { - String decryptedPass = ""; - try { - decryptedPass = propAccess.decrypt(propAccess.getProperty(password), false); - } catch (IOException e) { - eelfLogger.error("Failed to decrypt " + password + " : " + e.getMessage(), e); - } - return decryptedPass; - } - - PropAccess getPropAccess() { - return propAccess; - } -} diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java index 1debcf63..d02bedb2 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfigManager.java @@ -36,10 +36,17 @@ import java.io.InputStreamReader; import java.io.Reader; import java.net.URL; import java.nio.file.Files; +import java.util.HashSet; +import java.util.Iterator; import java.util.Objects; import java.util.Properties; import java.util.Timer; +import org.onap.dmaap.datarouter.node.config.NodeConfig; +import org.onap.dmaap.datarouter.node.config.ProvData; +import org.onap.dmaap.datarouter.node.delivery.DeliveryQueueHelper; import org.onap.dmaap.datarouter.node.eelf.EelfMsgs; +import org.onap.dmaap.datarouter.node.utils.NodeTlsManager; +import org.onap.dmaap.datarouter.node.utils.NodeUtils; /** @@ -56,8 +63,6 @@ public class NodeConfigManager implements DeliveryQueueHelper { private static final String NODE_CONFIG_MANAGER = "NodeConfigManager"; private static final EELFLogger eelfLogger = EELFManager.getInstance().getLogger(NodeConfigManager.class); - private static NodeConfigManager base; - private long maxfailuretimer; private long initfailuretimer; private long waitForFileProcessFailureTimer; @@ -73,19 +78,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { private final int intHttpPort; private final int intHttpsPort; private final int extHttpsPort; - private String[] enabledprotocols; - private final boolean cadiEnabled; - private String aafType; - private String aafInstance; - private String aafAction; private final boolean tlsEnabled; - private String kstype; - private String ksfile; - private String kspass; - private String kpass; - private String tstype; - private String tsfile; - private String tspass; private String myname; private final String nak; private final File quiesce; @@ -103,8 +96,9 @@ public class NodeConfigManager implements DeliveryQueueHelper { private final RedirManager rdmgr; private final Timer timer = new Timer("Node Configuration Timer", true); private final RateLimitedOperation pfetcher; - private NodeConfig config; - private NodeAafPropsUtils nodeAafPropsUtils; + private static NodeConfigManager base; + private static NodeTlsManager nodeTlsManager; + private NodeConfig nodeConfig; private static Properties drNodeProperties; public static Properties getDrNodeProperties() { @@ -135,42 +129,24 @@ public class NodeConfigManager implements DeliveryQueueHelper { } eelfLogger.debug("NODE0303 Provisioning server is at: " + provhost); provcheck = new IsFrom(provhost); - - cadiEnabled = Boolean.parseBoolean(getDrNodeProperties().getProperty("CadiEnabled", "false")); - if (cadiEnabled) { - aafType = getDrNodeProperties().getProperty("AAFType", "org.onap.dmaap-dr.feed"); - aafInstance = getDrNodeProperties().getProperty("AAFInstance", "legacy"); - aafAction = getDrNodeProperties().getProperty("AAFAction", "publish"); - } tlsEnabled = Boolean.parseBoolean(getDrNodeProperties().getProperty("TlsEnabled", "true")); if (isTlsEnabled()) { try { - kstype = getDrNodeProperties().getProperty("KeyStoreType", "PKCS12"); - tstype = getDrNodeProperties().getProperty("TrustStoreType", "jks"); - enabledprotocols = ((getDrNodeProperties().getProperty("NodeHttpsProtocols")).trim()).split("\\|"); - nodeAafPropsUtils = new NodeAafPropsUtils(new File(getDrNodeProperties() - .getProperty("AAFPropsFilePath", "/opt/app/osaaf/local/org.onap.dmaap-dr.props"))); - getSslContextData(); - if (tsfile != null && tsfile.length() > 0) { - System.setProperty("javax.net.ssl.trustStoreType", tstype); - System.setProperty("javax.net.ssl.trustStore", tsfile); - System.setProperty("javax.net.ssl.trustStorePassword", tspass); - } - myname = NodeUtils.getCanonicalName(kstype, ksfile, kspass); + nodeTlsManager = new NodeTlsManager(getDrNodeProperties()); + myname = nodeTlsManager.getMyNameFromCertificate(); if (myname == null) { NodeUtils.setIpAndFqdnForEelf(NODE_CONFIG_MANAGER); - eelfLogger.error(EelfMsgs.MESSAGE_KEYSTORE_FETCH_ERROR, ksfile); - eelfLogger.error("NODE0309 Unable to fetch canonical name from keystore file " + ksfile); + eelfLogger.error(EelfMsgs.MESSAGE_KEYSTORE_FETCH_ERROR, nodeTlsManager.getKeyStorefile()); + eelfLogger.error("NODE0309 Unable to fetch canonical name from keystore file {}", nodeTlsManager.getKeyStorefile()); exit(1); } - eelfLogger.debug("NODE0304 My certificate says my name is " + myname); + eelfLogger.debug("NODE0304 My certificate says my name is {}", myname); } catch (Exception e) { eelfLogger.error("NODE0314 Failed to load AAF props. Exiting", e); exit(1); } } myname = "dmaap-dr-node"; - eventlogurl = getDrNodeProperties().getProperty("LogUploadURL", "https://feeds-drtr.web.att.com/internal/logs"); intHttpPort = Integer.parseInt(getDrNodeProperties().getProperty("IntHttpPort", "80")); intHttpsPort = Integer.parseInt(getDrNodeProperties().getProperty("IntHttpsPort", "443")); @@ -200,21 +176,13 @@ public class NodeConfigManager implements DeliveryQueueHelper { pfetcher = new RateLimitedOperation( Long.parseLong(getDrNodeProperties().getProperty("MinProvFetchInterval", "10000")), timer) { public void run() { - fetchconfig(); + fetchNodeConfigFromProv(); } }; eelfLogger.debug("NODE0305 Attempting to fetch configuration at " + provurl); pfetcher.request(); } - private void getSslContextData() { - ksfile = nodeAafPropsUtils.getPropAccess().getProperty("cadi_keystore"); - kspass = nodeAafPropsUtils.getDecryptedPass("cadi_keystore_password"); - kpass = nodeAafPropsUtils.getDecryptedPass("cadi_keystore_password"); - tsfile = nodeAafPropsUtils.getPropAccess().getProperty("cadi_truststore"); - tspass = nodeAafPropsUtils.getDecryptedPass("cadi_truststore_password"); - } - /** * Get the default node configuration manager. */ @@ -303,19 +271,19 @@ public class NodeConfigManager implements DeliveryQueueHelper { } } - private void fetchconfig() { + private void fetchNodeConfigFromProv() { try { - eelfLogger.debug("NodeConfigMan.fetchConfig: provurl:: " + provurl); + eelfLogger.debug("NodeConfigMan.fetchNodeConfigFromProv: provurl:: {}", provurl); URL url = new URL(provurl); Reader reader = new InputStreamReader(url.openStream()); - config = new NodeConfig(new ProvData(reader), myname, spooldir, extHttpsPort, nak); + nodeConfig = new NodeConfig(new ProvData(reader), myname, spooldir, extHttpsPort, nak); localconfig(); configtasks.startRun(); runTasks(); } catch (Exception e) { - NodeUtils.setIpAndFqdnForEelf("fetchconfigs"); + NodeUtils.setIpAndFqdnForEelf("fetchNodeConfigFromProv"); eelfLogger.error(EelfMsgs.MESSAGE_CONF_FAILED, e.toString()); - eelfLogger.error("NODE0306 Configuration failed " + e + " - try again later", e); + eelfLogger.error("NODE0306 Configuration failed {} - try again later", e); pfetcher.request(); } } @@ -348,8 +316,8 @@ public class NodeConfigManager implements DeliveryQueueHelper { /** * Am I configured. */ - boolean isConfigured() { - return config != null; + public boolean isConfigured() { + return nodeConfig != null; } /** @@ -366,7 +334,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { * @return array of targets */ Target[] parseRouting(String routing) { - return config.parseRouting(routing); + return nodeConfig.parseRouting(routing); } /** @@ -377,7 +345,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { * @return If the credentials and IP address are recognized, true, otherwise false. */ boolean isAnotherNode(String credentials, String ip) { - return config.isAnotherNode(credentials, ip); + return nodeConfig.isAnotherNode(credentials, ip); } /** @@ -389,18 +357,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { * @return True if the IP and credentials are valid for the specified feed. */ String isPublishPermitted(String feedid, String credentials, String ip) { - return config.isPublishPermitted(feedid, credentials, ip); - } - - /** - * Check whether publication is allowed for AAF Feed. - * - * @param feedid The ID of the feed being requested - * @param ip The requesting IP address - * @return True if the IP and credentials are valid for the specified feed. - */ - String isPublishPermitted(String feedid, String ip) { - return config.isPublishPermitted(feedid, ip); + return nodeConfig.isPublishPermitted(feedid, credentials, ip); } /** @@ -410,7 +367,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { * @return True if the delete file is permitted for the subscriber. */ boolean isDeletePermitted(String subId) { - return config.isDeletePermitted(subId); + return nodeConfig.isDeletePermitted(subId); } /** @@ -421,20 +378,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { * @return Null if the credentials are invalid or the user if they are valid. */ String getAuthUser(String feedid, String credentials) { - return config.getAuthUser(feedid, credentials); - } - - /** - * AAF changes: TDP EPIC US# 307413 Check AAF_instance for feed ID in NodeConfig. - * - * @param feedid The ID of the feed specified - */ - String getAafInstance(String feedid) { - return config.getAafInstance(feedid); - } - - String getAafInstance() { - return aafInstance; + return nodeConfig.getAuthUser(feedid, credentials); } /** @@ -446,7 +390,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { * @return Null if the request should be accepted or the correct hostname if it should be sent to another node. */ String getIngressNode(String feedid, String user, String ip) { - return config.getIngressNode(feedid, user, ip); + return nodeConfig.getIngressNode(feedid, user, ip); } /** @@ -456,7 +400,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { * @return The value of the parameter or null if it is not defined. */ private String getProvParam(String name) { - return config.getProvParam(name); + return nodeConfig.getProvParam(name); } /** @@ -467,7 +411,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { * @return The value of the parameter or deflt if it is not defined. */ private String getProvParam(String name, String defaultValue) { - name = config.getProvParam(name); + name = nodeConfig.getProvParam(name); if (name == null) { name = defaultValue; } @@ -484,14 +428,14 @@ public class NodeConfigManager implements DeliveryQueueHelper { /** * Get all the outbound spooling destinations. This will include both subscriptions and nodes. */ - DestInfo[] getAllDests() { - return config.getAllDests(); + public DestInfo[] getAllDests() { + return nodeConfig.getAllDests(); } /** * Register a task to run whenever the configuration changes. */ - void registerConfigTask(Runnable task) { + public void registerConfigTask(Runnable task) { configtasks.addTask(task); } @@ -601,7 +545,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { * @return The targets this feed should be delivered to */ Target[] getTargets(String feedid) { - return config.getTargets(feedid); + return nodeConfig.getTargets(feedid); } /** @@ -616,7 +560,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { */ String getSpoolDir(String subid, String remoteaddr) { if (provcheck.isFrom(remoteaddr)) { - String sdir = config.getSpoolDir(subid); + String sdir = nodeConfig.getSpoolDir(subid); if (sdir != null) { eelfLogger.debug("NODE0310 Received subscription reset request for subscription " + subid + " from provisioning server " + remoteaddr); @@ -634,51 +578,10 @@ public class NodeConfigManager implements DeliveryQueueHelper { /** * Get the base directory for spool directories. */ - String getSpoolBase() { + public String getSpoolBase() { return spooldir; } - /** - * Get the key store type. - */ - String getKSType() { - return kstype; - } - - /** - * Get the key store file. - */ - String getKSFile() { - return ksfile; - } - - /** - * Get the key store password. - */ - String getKSPass() { - return kspass; - } - - /** - * Get the key password. - */ - String getKPass() { - return kpass; - } - - - String getTstype() { - return tstype; - } - - String getTsfile() { - return tsfile; - } - - String getTspass() { - return tspass; - } - /** * Get the http port. */ @@ -703,42 +606,42 @@ public class NodeConfigManager implements DeliveryQueueHelper { /** * Get the external name of this machine. */ - String getMyName() { + public String getMyName() { return myname; } /** * Get the number of threads to use for delivery. */ - int getDeliveryThreads() { + public int getDeliveryThreads() { return deliverythreads; } /** * Get the URL for uploading the event log data. */ - String getEventLogUrl() { + public String getEventLogUrl() { return eventlogurl; } /** * Get the prefix for the names of event log files. */ - String getEventLogPrefix() { + public String getEventLogPrefix() { return eventlogprefix; } /** * Get the suffix for the names of the event log files. */ - String getEventLogSuffix() { + public String getEventLogSuffix() { return eventlogsuffix; } /** * Get the interval between event log file rollovers. */ - String getEventLogInterval() { + public String getEventLogInterval() { return eventloginterval; } @@ -752,14 +655,14 @@ public class NodeConfigManager implements DeliveryQueueHelper { /** * Get the directory where the event and node log files live. */ - String getLogDir() { + public String getLogDir() { return logdir; } /** * How long do I keep log files (in milliseconds). */ - long getLogRetention() { + public long getLogRetention() { return logretention; } @@ -777,7 +680,7 @@ public class NodeConfigManager implements DeliveryQueueHelper { * @return The feed ID */ public String getFeedId(String subid) { - return config.getFeedId(subid); + return nodeConfig.getFeedId(subid); } /** @@ -785,15 +688,15 @@ public class NodeConfigManager implements DeliveryQueueHelper { * * @return The Authorization string for this node */ - String getMyAuth() { - return config.getMyAuth(); + public String getMyAuth() { + return nodeConfig.getMyAuth(); } /** * Get the fraction of free spool disk space where we start throwing away undelivered files. This is * FREE_DISK_RED_PERCENT / 100.0. Default is 0.05. Limited by 0.01 <= FreeDiskStart <= 0.5. */ - double getFreeDiskStart() { + public double getFreeDiskStart() { return fdpstart; } @@ -801,54 +704,138 @@ public class NodeConfigManager implements DeliveryQueueHelper { * Get the fraction of free spool disk space where we stop throwing away undelivered files. This is * FREE_DISK_YELLOW_PERCENT / 100.0. Default is 0.2. Limited by FreeDiskStart <= FreeDiskStop <= 0.5. */ - double getFreeDiskStop() { + public double getFreeDiskStop() { return fdpstop; } - /** - * Disable and enable protocols. - */ - String[] getEnabledprotocols() { - return enabledprotocols; + protected boolean isTlsEnabled() { + return tlsEnabled; } - String getAafType() { - return aafType; + public static NodeTlsManager getNodeTlsManager() { + return nodeTlsManager; } - String getAafAction() { - return aafAction; - } + /** + * Generate publish IDs. + */ + static class PublishId { - protected boolean isTlsEnabled() { - return tlsEnabled; - } + private long nextuid; + private final String myname; - boolean getCadiEnabled() { - return cadiEnabled; - } + /** + * Generate publish IDs for the specified name. + * + * @param myname Unique identifier for this publish ID generator (usually fqdn of server) + */ + public PublishId(String myname) { + this.myname = myname; + } - NodeAafPropsUtils getNodeAafPropsUtils() { - return nodeAafPropsUtils; + /** + * Generate a Data Router Publish ID that uniquely identifies the particular invocation of the Publish API for log + * correlation purposes. + */ + public synchronized String next() { + long now = System.currentTimeMillis(); + if (now < nextuid) { + now = nextuid; + } + nextuid = now + 1; + return (now + "." + myname); + } } /** - * Builds the permissions string to be verified. - * - * @param aafInstance The aaf instance - * @return The permissions - */ - String getPermission(String aafInstance) { - try { - String type = getAafType(); - String action = getAafAction(); - if ("".equals(aafInstance)) { - aafInstance = getAafInstance(); + * Manage a list of tasks to be executed when an event occurs. This makes the following guarantees: + *
    + *
  • Tasks can be safely added and removed in the middle of a run.
  • + *
  • No task will be returned more than once during a run.
  • + *
  • No task will be returned when it is not, at that moment, in the list of tasks.
  • + *
  • At the moment when next() returns null, all tasks on the list have been returned during the run.
  • + *
  • Initially and once next() returns null during a run, next() will continue to return null until startRun() is + * called. + *
+ */ + static class TaskList { + + private Iterator runlist; + private final HashSet tasks = new HashSet<>(); + private HashSet togo; + private HashSet sofar; + private HashSet added; + private HashSet removed; + + /** + * Start executing the sequence of tasks. + */ + synchronized void startRun() { + sofar = new HashSet<>(); + added = new HashSet<>(); + removed = new HashSet<>(); + togo = new HashSet<>(tasks); + runlist = togo.iterator(); + } + + /** + * Get the next task to execute. + */ + synchronized Runnable next() { + while (runlist != null) { + if (runlist.hasNext()) { + Runnable task = runlist.next(); + if (addTaskToSoFar(task)) { + return task; + } + } + if (!added.isEmpty()) { + togo = added; + added = new HashSet<>(); + removed.clear(); + runlist = togo.iterator(); + continue; + } + togo = null; + added = null; + removed = null; + sofar = null; + runlist = null; } - return type + "|" + aafInstance + "|" + action; - } catch (Exception e) { - eelfLogger.error("NODE0543 NodeConfigManager.getPermission: ", e); + return (null); + } + + /** + * Add a task to the list of tasks to run whenever the event occurs. + */ + synchronized void addTask(Runnable task) { + if (runlist != null) { + added.add(task); + removed.remove(task); + } + tasks.add(task); + } + + /** + * Remove a task from the list of tasks to run whenever the event occurs. + */ + synchronized void removeTask(Runnable task) { + if (runlist != null) { + removed.add(task); + added.remove(task); + } + tasks.remove(task); + } + + private boolean addTaskToSoFar(Runnable task) { + if (removed.contains(task)) { + return false; + } + if (sofar.contains(task)) { + return false; + } + sofar.add(task); + return true; } - return null; } } diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeRunner.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeRunner.java index 485cdb20..036599a4 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeRunner.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeRunner.java @@ -28,6 +28,9 @@ import static java.lang.System.exit; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import org.eclipse.jetty.server.Server; +import org.onap.dmaap.datarouter.node.log.LogManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * The main starting point for the Data Router node. @@ -49,7 +52,7 @@ public class NodeRunner { nodeMainLogger.debug("NODE0001 Data Router Node Starting"); IsFrom.setDNSCache(); NodeConfigManager nodeConfigManager = NodeConfigManager.getInstance(); - nodeMainLogger.debug("NODE0002 I am " + nodeConfigManager.getMyName()); + nodeMainLogger.debug("NODE0002 I am {}", nodeConfigManager.getMyName()); (new WaitForConfig(nodeConfigManager)).waitForConfig(); new LogManager(nodeConfigManager); try { @@ -58,8 +61,7 @@ public class NodeRunner { server.join(); nodeMainLogger.debug("NODE0006 Node Server started-" + server.getState()); } catch (Exception e) { - nodeMainLogger.error("NODE0006 Jetty failed to start. Reporting will we be unavailable: " - + e.getMessage(), e); + nodeMainLogger.error("NODE0006 Jetty failed to start. Reporting will we be unavailable: {}", e.getMessage()); exit(1); } nodeMainLogger.debug("NODE0007 Node Server joined"); diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServer.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServer.java index cc07ab62..1a29f682 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServer.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServer.java @@ -22,9 +22,6 @@ package org.onap.dmaap.datarouter.node; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import java.util.EnumSet; -import javax.servlet.DispatcherType; -import javax.servlet.ServletException; import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.HttpConfiguration; @@ -33,11 +30,11 @@ import org.eclipse.jetty.server.SecureRequestCustomizer; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.SslConnectionFactory; -import org.eclipse.jetty.servlet.FilterHolder; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.jetbrains.annotations.NotNull; +import org.onap.dmaap.datarouter.node.delivery.Delivery; public class NodeServer { @@ -47,8 +44,7 @@ public class NodeServer { private static Server server; private static Delivery delivery; - private NodeServer(){ - } + private NodeServer(){} static Server getServerInstance(NodeConfigManager nodeConfigManager) { if (server == null) { @@ -77,7 +73,7 @@ public class NodeServer { servletContextHandler.addServlet(new ServletHolder(new NodeServlet(delivery, nodeConfigManager)), "/*"); if (nodeConfigManager.isTlsEnabled()) { - initialiseHttpsConnector(nodeConfigManager, httpConfiguration, httpServerConnector, servletContextHandler); + initialiseHttpsConnector(nodeConfigManager, httpConfiguration, httpServerConnector); } else { eelfLogger.info("NODE0005 Adding HTTP Connector"); server.setConnectors(new Connector[]{httpServerConnector}); @@ -88,7 +84,7 @@ public class NodeServer { } private static void initialiseHttpsConnector(NodeConfigManager nodeConfigManager, HttpConfiguration httpConfiguration, - ServerConnector httpServerConnector, ServletContextHandler servletContextHandler) { + ServerConnector httpServerConnector) { HttpConfiguration httpsConfiguration = new HttpConfiguration(httpConfiguration); httpsConfiguration.setRequestHeaderSize(8192); @@ -99,9 +95,8 @@ public class NodeServer { // HTTPS connector try (ServerConnector httpsServerConnector = new ServerConnector(server, - new SslConnectionFactory(getSslContextFactory(nodeConfigManager), HttpVersion.HTTP_1_1.asString()), + new SslConnectionFactory(getSslContextFactory(), HttpVersion.HTTP_1_1.asString()), new HttpConnectionFactory(httpsConfiguration))) { - httpsServerConnector.setPort(nodeConfigManager.getHttpsPort()); httpsServerConnector.setIdleTimeout(3600000); httpsServerConnector.setAcceptQueueSize(2); @@ -119,12 +114,16 @@ public class NodeServer { @NotNull - private static SslContextFactory.Server getSslContextFactory(NodeConfigManager nodeConfigManager) { - SslContextFactory sslContextFactory = new SslContextFactory.Server(); - sslContextFactory.setKeyStoreType(nodeConfigManager.getKSType()); - sslContextFactory.setKeyStorePath(nodeConfigManager.getKSFile()); - sslContextFactory.setKeyStorePassword(nodeConfigManager.getKSPass()); - sslContextFactory.setKeyManagerPassword(nodeConfigManager.getKPass()); + private static SslContextFactory.Server getSslContextFactory() { + SslContextFactory.Server sslContextFactory = new SslContextFactory.Server(); + sslContextFactory.setKeyStoreType(NodeConfigManager.getNodeTlsManager().getKeyStoreType()); + sslContextFactory.setKeyStorePath(NodeConfigManager.getNodeTlsManager().getKeyStorefile()); + sslContextFactory.setKeyStorePassword(NodeConfigManager.getNodeTlsManager().getKeyStorePassword()); + sslContextFactory.setKeyManagerPassword(NodeConfigManager.getNodeTlsManager().getKeyManagerPassword()); + +// sslContextFactory.setTrustStoreType(NodeConfigManager.getNodeTlsManager().getTrustStoreType()); +// sslContextFactory.setTrustStorePath(ProvRunner.getAafPropsUtils().getTruststorePathProperty()); +// sslContextFactory.setTrustStorePassword(ProvRunner.getAafPropsUtils().getTruststorePassProperty()); sslContextFactory.setExcludeCipherSuites( "SSL_RSA_WITH_DES_CBC_SHA", @@ -135,12 +134,12 @@ public class NodeServer { "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA" ); - sslContextFactory.addExcludeProtocols("SSLv3"); + sslContextFactory.setIncludeProtocols(NodeConfigManager.getNodeTlsManager().getEnabledProtocols()); eelfLogger.info("Unsupported protocols: " + String.join(",", sslContextFactory.getExcludeProtocols())); eelfLogger.info("Supported protocols: " + String.join(",", sslContextFactory.getIncludeProtocols())); eelfLogger.info("Unsupported ciphers: " + String.join(",", sslContextFactory.getExcludeCipherSuites())); eelfLogger.info("Supported ciphers: " + String.join(",", sslContextFactory.getIncludeCipherSuites())); - return (SslContextFactory.Server) sslContextFactory; + return sslContextFactory; } } diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java index 80f7e3ad..4dbe0e75 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeServlet.java @@ -24,7 +24,7 @@ package org.onap.dmaap.datarouter.node; -import static org.onap.dmaap.datarouter.node.NodeUtils.sendResponseError; +import static org.onap.dmaap.datarouter.node.utils.NodeUtils.sendResponseError; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -44,7 +44,10 @@ import java.util.regex.Pattern; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.jetbrains.annotations.Nullable; +import org.onap.dmaap.datarouter.node.delivery.Delivery; import org.onap.dmaap.datarouter.node.eelf.EelfMsgs; +import org.onap.dmaap.datarouter.node.log.StatusLog; +import org.onap.dmaap.datarouter.node.utils.NodeUtils; import org.slf4j.MDC; /** @@ -195,7 +198,6 @@ public class NodeServlet extends HttpServlet { String pubid = null; String rcvd = NodeUtils.logts(System.currentTimeMillis()) + ";from=" + ip + ";by=" + lip; Target[] targets; - boolean isAAFFeed = false; if (fileid.startsWith("/delete/")) { deleteFile(req, resp, fileid, pubid); return; @@ -220,28 +222,6 @@ public class NodeServlet extends HttpServlet { return; } feedid = fileid.substring(0, index); - - if (config.getCadiEnabled()) { - String path = req.getPathInfo(); - if (!path.startsWith("/internal") && feedid != null) { - String aafInstance = config.getAafInstance(feedid); - if (!("legacy".equalsIgnoreCase(aafInstance))) { - isAAFFeed = true; - String permission = config.getPermission(aafInstance); - eelfLogger.debug("NodeServlet.common() permission string - " + permission); - //Check in CADI Framework API if user has AAF permission or not - if (!req.isUserInRole(permission)) { - String message = "AAF disallows access to permission string - " + permission; - eelfLogger.error("NODE0307 Rejecting unauthenticated PUT or DELETE of " + req.getPathInfo() - + FROM + req.getRemoteAddr()); - resp.sendError(HttpServletResponse.SC_FORBIDDEN, message); - eelfLogger.info(EelfMsgs.EXIT); - return; - } - } - } - } - fileid = fileid.substring(index + 1); pubid = config.getPublishId(); targets = config.getTargets(feedid); @@ -254,8 +234,6 @@ public class NodeServlet extends HttpServlet { } fileid = fileid.substring(18); pubid = generateAndValidatePublishId(req); - - user = "datartr"; // SP6 : Added usr as datartr to avoid null entries for internal routing targets = config.parseRouting(req.getHeader("X-DMAAP-DR-ROUTING")); } else { eelfLogger.error("NODE0204 Rejecting bad URI for PUT or DELETE of " + req.getPathInfo() + FROM + req @@ -285,39 +263,15 @@ public class NodeServlet extends HttpServlet { String logurl = HTTPS + hp + INTERNAL_PUBLISH + fileid; if (feedid != null) { logurl = HTTPS + hp + PUBLISH + feedid + "/" + fileid; - //Cadi code starts - if (!isAAFFeed) { - String reason = config.isPublishPermitted(feedid, credentials, ip); - if (reason != null) { - eelfLogger.error("NODE0111 Rejecting unauthorized publish attempt to feed " + PathUtil - .cleanString(feedid) + " fileid " + PathUtil.cleanString(fileid) + FROM + PathUtil - .cleanString(ip) + " reason " + PathUtil.cleanString(reason)); - resp.sendError(HttpServletResponse.SC_FORBIDDEN, reason); - eelfLogger.info(EelfMsgs.EXIT); - return; - } - user = config.getAuthUser(feedid, credentials); - } else { - String reason = config.isPublishPermitted(feedid, ip); - if (reason != null) { - eelfLogger.error("NODE0111 Rejecting unauthorized publish attempt to feed " + PathUtil - .cleanString(feedid) + " fileid " + PathUtil.cleanString(fileid) + FROM + PathUtil - .cleanString(ip) + " reason Invalid AAF user- " + PathUtil.cleanString(reason)); - String message = "Invalid AAF user- " + PathUtil.cleanString(reason); - eelfLogger.debug("NODE0308 Rejecting unauthenticated PUT or DELETE of " + PathUtil - .cleanString(req.getPathInfo()) + FROM + PathUtil.cleanString(req.getRemoteAddr())); - resp.sendError(HttpServletResponse.SC_FORBIDDEN, message); - return; - } - if ((req.getUserPrincipal() != null) && (req.getUserPrincipal().getName() != null)) { - String userName = req.getUserPrincipal().getName(); - String[] attid = userName.split("@"); - user = attid[0]; - } else { - user = "AAFUser"; - } + String reason = config.isPublishPermitted(feedid, credentials, ip); + if (reason != null) { + eelfLogger.info("NODE0111 Rejecting unauthorized publish attempt to feed " + feedid + " fileid " + + fileid + " from " + ip + " reason " + reason); + resp.sendError(javax.servlet.http.HttpServletResponse.SC_FORBIDDEN, reason); + eelfLogger.info(EelfMsgs.EXIT); + return; } - //Cadi code Ends + user = config.getAuthUser(feedid, credentials); String newnode = config.getIngressNode(feedid, user, ip); if (newnode != null) { String port = ""; @@ -601,4 +555,88 @@ public class NodeServlet extends HttpServlet { return -1; } } + + /** + * Utility class that validates the path url formed from + * the string passed in the request parameters. + */ + static class PathUtil { + + private PathUtil() { + throw new IllegalStateException("Utility Class"); + } + + /** + * This method takes String as the parameter and return the filtered path string. + * + * @param string String to clean + * @return A cleaned String + */ + static String cleanString(String string) { + if (string == null) { + return null; + } + StringBuilder cleanString = new StringBuilder(); + for (int i = 0; i < string.length(); ++i) { + cleanString.append(cleanChar(string.charAt(i))); + } + return cleanString.toString(); + } + + /** + * This method filters the valid special characters in path string. + * + * @param character The char to be cleaned + * @return The cleaned char + */ + private static char cleanChar(char character) { + // 0 - 9 + for (int i = 48; i < 58; ++i) { + if (character == i) { + return (char) i; + } + } + // 'A' - 'Z' + for (int i = 65; i < 91; ++i) { + if (character == i) { + return (char) i; + } + } + // 'a' - 'z' + for (int i = 97; i < 123; ++i) { + if (character == i) { + return (char) i; + } + } + return getValidCharacter(character); + } + + private static char getValidCharacter(char character) { + // other valid characters + switch (character) { + case '/': + return '/'; + case '.': + return '.'; + case '-': + return '-'; + case ':': + return ':'; + case '?': + return '?'; + case '&': + return '&'; + case '=': + return '='; + case '#': + return '#'; + case '_': + return '_'; + case ' ': + return ' '; + default: + return '%'; + } + } + } } diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/PathUtil.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/PathUtil.java deleted file mode 100644 index d67c9094..00000000 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/PathUtil.java +++ /dev/null @@ -1,106 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.dmaap.datarouter.node; - -/** - * FORTIFY SCAN FIXES. - *

This Utility is used for Fortify fixes. It Validates the path url formed from - * the string passed in the request parameters.

- */ -class PathUtil { - - private PathUtil() { - throw new IllegalStateException("Utility Class"); - } - - /** - * This method takes String as the parameter and return the filtered path string. - * - * @param string String to clean - * @return A cleaned String - */ - static String cleanString(String string) { - if (string == null) { - return null; - } - StringBuilder cleanString = new StringBuilder(); - for (int i = 0; i < string.length(); ++i) { - cleanString.append(cleanChar(string.charAt(i))); - } - return cleanString.toString(); - } - - /** - * This method filters the valid special characters in path string. - * - * @param character The char to be cleaned - * @return The cleaned char - */ - private static char cleanChar(char character) { - // 0 - 9 - for (int i = 48; i < 58; ++i) { - if (character == i) { - return (char) i; - } - } - // 'A' - 'Z' - for (int i = 65; i < 91; ++i) { - if (character == i) { - return (char) i; - } - } - // 'a' - 'z' - for (int i = 97; i < 123; ++i) { - if (character == i) { - return (char) i; - } - } - return getValidCharacter(character); - } - - private static char getValidCharacter(char character) { - // other valid characters - switch (character) { - case '/': - return '/'; - case '.': - return '.'; - case '-': - return '-'; - case ':': - return ':'; - case '?': - return '?'; - case '&': - return '&'; - case '=': - return '='; - case '#': - return '#'; - case '_': - return '_'; - case ' ': - return ' '; - default: - return '%'; - } - } -} diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/PublishId.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/PublishId.java deleted file mode 100644 index 1ffc9ec4..00000000 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/PublishId.java +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START================================================== - * * org.onap.dmaap - * * =========================================================================== - * * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * * =========================================================================== - * * Licensed under the Apache License, Version 2.0 (the "License"); - * * you may not use this file except in compliance with the License. - * * You may obtain a copy of the License at - * * - * * http://www.apache.org/licenses/LICENSE-2.0 - * * - * * Unless required by applicable law or agreed to in writing, software - * * distributed under the License is distributed on an "AS IS" BASIS, - * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * * See the License for the specific language governing permissions and - * * limitations under the License. - * * ============LICENSE_END==================================================== - * * - * * ECOMP is a trademark and service mark of AT&T Intellectual Property. - * * - ******************************************************************************/ - - -package org.onap.dmaap.datarouter.node; - -/** - * Generate publish IDs. - */ -public class PublishId { - - private long nextuid; - private final String myname; - - /** - * Generate publish IDs for the specified name. - * - * @param myname Unique identifier for this publish ID generator (usually fqdn of server) - */ - public PublishId(String myname) { - this.myname = myname; - } - - /** - * Generate a Data Router Publish ID that uniquely identifies the particular invocation of the Publish API for log - * correlation purposes. - */ - public synchronized String next() { - long now = System.currentTimeMillis(); - if (now < nextuid) { - now = nextuid; - } - nextuid = now + 1; - return (now + "." + myname); - } -} diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/TaskList.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/TaskList.java index a77277f2..26031854 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/TaskList.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/TaskList.java @@ -41,7 +41,7 @@ import java.util.Iterator; class TaskList { private Iterator runlist; - private HashSet tasks = new HashSet<>(); + private final HashSet tasks = new HashSet<>(); private HashSet togo; private HashSet sofar; private HashSet added; diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfig.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/config/NodeConfig.java similarity index 89% rename from datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfig.java rename to datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/config/NodeConfig.java index 127668ff..33b7bd0e 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeConfig.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/config/NodeConfig.java @@ -22,7 +22,7 @@ ******************************************************************************/ -package org.onap.dmaap.datarouter.node; +package org.onap.dmaap.datarouter.node.config; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -32,6 +32,11 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import org.jetbrains.annotations.NotNull; +import org.onap.dmaap.datarouter.node.DestInfo; +import org.onap.dmaap.datarouter.node.DestInfoBuilder; +import org.onap.dmaap.datarouter.node.IsFrom; +import org.onap.dmaap.datarouter.node.Target; +import org.onap.dmaap.datarouter.node.utils.NodeUtils; /** * Processed configuration for this node. @@ -43,16 +48,16 @@ import org.jetbrains.annotations.NotNull; public class NodeConfig { private static final String PUBLISHER_NOT_PERMITTED = "Publisher not permitted for this feed"; - private static EELFLogger logger = EELFManager.getInstance().getLogger(NodeConfig.class); - private HashMap params = new HashMap<>(); - private HashMap feeds = new HashMap<>(); - private HashMap nodeinfo = new HashMap<>(); - private HashMap subinfo = new HashMap<>(); - private HashMap nodes = new HashMap<>(); - private HashMap provSubscriptions = new HashMap<>(); - private String myname; + private static final EELFLogger logger = EELFManager.getInstance().getLogger(NodeConfig.class); + private final HashMap params = new HashMap<>(); + private final HashMap feeds = new HashMap<>(); + private final HashMap nodeinfo = new HashMap<>(); + private final HashMap subinfo = new HashMap<>(); + private final HashMap nodes = new HashMap<>(); + private final HashMap provSubscriptions = new HashMap<>(); + private final String myname; private String myauth; - private DestInfo[] alldests; + private final DestInfo[] alldests; private int rrcntr; /** @@ -228,11 +233,6 @@ public class NodeConfig { feed.createdDate = pfx.getCreatedDate(); feed.loginfo = pfx.getLogData(); feed.status = pfx.getStatus(); - /* - * AAF changes: TDP EPIC US# 307413 - * Passing aafInstance from ProvFeed to identify legacy/AAF feeds - */ - feed.aafInstance = pfx.getAafInstance(); ArrayList v1 = pfstab.get(fid); if (v1 == null) { feed.subnets = new SubnetMatcher[0]; @@ -329,33 +329,6 @@ public class NodeConfig { return (PUBLISHER_NOT_PERMITTED); } - /** - * Check whether publication is allowed for AAF Feed. - * - * @param feedid The ID of the feed being requested. - * @param ip The requesting IP address - */ - public String isPublishPermitted(String feedid, String ip) { - Feed feed = feeds.get(feedid); - String nf = "Feed does not exist"; - if (feed != null) { - nf = feed.status; - } - if (nf != null) { - return nf; - } - if (feed.subnets.length == 0) { - return null; - } - byte[] addr = NodeUtils.getInetAddress(ip); - for (SubnetMatcher snm : feed.subnets) { - if (snm.matches(addr)) { - return null; - } - } - return PUBLISHER_NOT_PERMITTED; - } - /** * Check whether delete file is allowed. * @@ -373,16 +346,6 @@ public class NodeConfig { return (feeds.get(feedid).authusers.get(credentials)); } - /** - * AAF changes: TDP EPIC US# 307413 Check AAF_instance for feed ID. - * - * @param feedid The ID of the feed specified - */ - public String getAafInstance(String feedid) { - Feed feed = feeds.get(feedid); - return feed.aafInstance; - } - /** * Check if the request should be redirected to a different ingress node. */ @@ -586,15 +549,10 @@ public class NodeConfig { */ public static class ProvFeed { - private String id; - private String logdata; - private String status; - private String createdDate; - /* - * AAF changes: TDP EPIC US# 307413 - * Passing aafInstance from to identify legacy/AAF feeds - */ - private String aafInstance; + private final String id; + private final String logdata; + private final String status; + private final String createdDate; /** * Construct a feed configuration entry. @@ -604,12 +562,11 @@ public class NodeConfig { * @param status The reason why this feed cannot be used (Feed has been deleted, Feed has been suspended) or * null if it is valid. */ - public ProvFeed(String id, String logdata, String status, String createdDate, String aafInstance) { + public ProvFeed(String id, String logdata, String status, String createdDate) { this.id = id; this.logdata = logdata; this.status = status; this.createdDate = createdDate; - this.aafInstance = aafInstance; } /** @@ -619,13 +576,6 @@ public class NodeConfig { return (createdDate); } - /** - * Get the aafInstance of the data feed. - */ - public String getAafInstance() { - return aafInstance; - } - /** * Get the feed id of the data feed. */ @@ -653,9 +603,9 @@ public class NodeConfig { */ public static class ProvFeedUser { - private String feedid; - private String user; - private String credentials; + private final String feedid; + private final String user; + private final String credentials; /** * Construct a feed user configuration entry. @@ -697,8 +647,8 @@ public class NodeConfig { */ public static class ProvFeedSubnet { - private String feedid; - private String cidr; + private final String feedid; + private final String cidr; /** * Construct a feed subnet configuration entry. @@ -731,16 +681,16 @@ public class NodeConfig { */ public static class ProvSubscription { - private String subid; - private String feedid; - private String url; - private String authuser; - private String credentials; - private boolean metaonly; - private boolean use100; - private boolean privilegedSubscriber; - private boolean followRedirect; - private boolean decompress; + private final String subid; + private final String feedid; + private final String url; + private final String authuser; + private final String credentials; + private final boolean metaonly; + private final boolean use100; + private final boolean privilegedSubscriber; + private final boolean followRedirect; + private final boolean decompress; /** * Construct a subscription configuration entry. @@ -839,7 +789,7 @@ public class NodeConfig { * New field is added - FOLLOW_REDIRECTS feature iTrack:DATARTR-17 - 1706 Get the followRedirect of this * destination. */ - boolean getFollowRedirect() { + public boolean getFollowRedirect() { return (followRedirect); } } @@ -849,10 +799,10 @@ public class NodeConfig { */ public static class ProvForceIngress { - private String feedid; - private String subnet; - private String user; - private String[] nodes; + private final String feedid; + private final String subnet; + private final String user; + private final String[] nodes; /** * Construct a forced ingress configuration entry. @@ -909,8 +859,8 @@ public class NodeConfig { */ public static class ProvForceEgress { - private String subid; - private String node; + private final String subid; + private final String node; /** * Construct a forced egress configuration entry. @@ -943,9 +893,9 @@ public class NodeConfig { */ public static class ProvHop { - private String from; - private String to; - private String via; + private final String from; + private final String to; + private final String via; /** * Construct a hop entry. @@ -1005,6 +955,5 @@ public class NodeConfig { Redirection[] redirections; Target[] targets; String createdDate; - String aafInstance; } } diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/PathFinder.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/config/PathFinder.java similarity index 90% rename from datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/PathFinder.java rename to datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/config/PathFinder.java index fe3fdb6e..b911df2c 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/PathFinder.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/config/PathFinder.java @@ -22,23 +22,24 @@ ******************************************************************************/ -package org.onap.dmaap.datarouter.node; +package org.onap.dmaap.datarouter.node.config; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import org.jetbrains.annotations.Nullable; -import org.onap.dmaap.datarouter.node.NodeConfig.ProvHop; +import org.onap.dmaap.datarouter.node.config.NodeConfig; +import org.onap.dmaap.datarouter.node.config.NodeConfig.ProvHop; /** * Given a set of node names and next hops, identify and ignore any cycles and figure out the sequence of next hops to * get from this node to any other node. */ -class PathFinder { +public class PathFinder { - private ArrayList errors = new ArrayList<>(); - private HashMap routes = new HashMap<>(); + private final ArrayList errors = new ArrayList<>(); + private final HashMap routes = new HashMap<>(); /** * Find routes from a specified origin to all of the nodes given a set of specified next hops. @@ -47,7 +48,7 @@ class PathFinder { * @param nodes where we can go * @param hops detours along the way */ - PathFinder(String origin, String[] nodes, NodeConfig.ProvHop[] hops) { + public PathFinder(String origin, String[] nodes, NodeConfig.ProvHop[] hops) { HashSet known = new HashSet<>(); HashMap> ht = new HashMap<>(); for (String n : nodes) { @@ -77,7 +78,7 @@ class PathFinder { * * @return array of error descriptions */ - String[] getErrors() { + public String[] getErrors() { return (errors.toArray(new String[0])); } @@ -87,7 +88,7 @@ class PathFinder { * @param destination node * @return list of node names separated by and ending with "/" */ - String getPath(String destination) { + public String getPath(String destination) { String ret = routes.get(destination); if (ret == null) { return (""); diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/ProvData.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/config/ProvData.java similarity index 76% rename from datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/ProvData.java rename to datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/config/ProvData.java index 2c205804..1c584fd7 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/ProvData.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/config/ProvData.java @@ -22,7 +22,7 @@ ******************************************************************************/ -package org.onap.dmaap.datarouter.node; +package org.onap.dmaap.datarouter.node.config; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -34,16 +34,17 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONTokener; -import org.onap.dmaap.datarouter.node.NodeConfig.ProvFeed; -import org.onap.dmaap.datarouter.node.NodeConfig.ProvFeedSubnet; -import org.onap.dmaap.datarouter.node.NodeConfig.ProvFeedUser; -import org.onap.dmaap.datarouter.node.NodeConfig.ProvForceEgress; -import org.onap.dmaap.datarouter.node.NodeConfig.ProvForceIngress; -import org.onap.dmaap.datarouter.node.NodeConfig.ProvHop; -import org.onap.dmaap.datarouter.node.NodeConfig.ProvNode; -import org.onap.dmaap.datarouter.node.NodeConfig.ProvParam; -import org.onap.dmaap.datarouter.node.NodeConfig.ProvSubscription; +import org.onap.dmaap.datarouter.node.config.NodeConfig.ProvFeed; +import org.onap.dmaap.datarouter.node.config.NodeConfig.ProvFeedSubnet; +import org.onap.dmaap.datarouter.node.config.NodeConfig.ProvFeedUser; +import org.onap.dmaap.datarouter.node.config.NodeConfig.ProvForceEgress; +import org.onap.dmaap.datarouter.node.config.NodeConfig.ProvForceIngress; +import org.onap.dmaap.datarouter.node.config.NodeConfig.ProvHop; +import org.onap.dmaap.datarouter.node.config.NodeConfig.ProvNode; +import org.onap.dmaap.datarouter.node.config.NodeConfig.ProvParam; +import org.onap.dmaap.datarouter.node.config.NodeConfig.ProvSubscription; import org.onap.dmaap.datarouter.node.eelf.EelfMsgs; +import org.onap.dmaap.datarouter.node.utils.NodeUtils; /** * Parser for provisioning data from the provisioning server. @@ -55,16 +56,16 @@ public class ProvData { private static final String FEED_ID = "feedid"; - private static EELFLogger eelfLogger = EELFManager.getInstance().getLogger(ProvData.class); - private NodeConfig.ProvNode[] pn; - private NodeConfig.ProvParam[] pp; - private NodeConfig.ProvFeed[] pf; - private NodeConfig.ProvFeedUser[] pfu; - private NodeConfig.ProvFeedSubnet[] pfsn; - private NodeConfig.ProvSubscription[] ps; - private NodeConfig.ProvForceIngress[] pfi; - private NodeConfig.ProvForceEgress[] pfe; - private NodeConfig.ProvHop[] ph; + private static final EELFLogger eelfLogger = EELFManager.getInstance().getLogger(ProvData.class); + private final NodeConfig.ProvNode[] provNodes; + private final NodeConfig.ProvParam[] provParams; + private final NodeConfig.ProvFeed[] provFeeds; + private final NodeConfig.ProvFeedUser[] provFeedUsers; + private final NodeConfig.ProvFeedSubnet[] provFeedSubnets; + private final NodeConfig.ProvSubscription[] provSubscriptions; + private final NodeConfig.ProvForceIngress[] provForceIngresses; + private final NodeConfig.ProvForceEgress[] provForceEgresses; + private final NodeConfig.ProvHop[] provHops; /** * Construct raw provisioing data entries from the text (JSON) provisioning document received from the provisioning @@ -73,27 +74,27 @@ public class ProvData { * @param reader The reader for the JSON text. */ public ProvData(Reader reader) throws IOException { - ArrayList pnv = new ArrayList<>(); - ArrayList ppv = new ArrayList<>(); - ArrayList pfv = new ArrayList<>(); - ArrayList pfuv = new ArrayList<>(); - ArrayList pfsnv = new ArrayList<>(); - ArrayList psv = new ArrayList<>(); - ArrayList pfiv = new ArrayList<>(); - ArrayList pfev = new ArrayList<>(); - ArrayList phv = new ArrayList<>(); + ArrayList provNodeArrayList = new ArrayList<>(); + ArrayList provParamArrayList = new ArrayList<>(); + ArrayList provFeedArrayList = new ArrayList<>(); + ArrayList provFeedUserArrayList = new ArrayList<>(); + ArrayList provFeedSubnetArrayList = new ArrayList<>(); + ArrayList provSubscriptionArrayList = new ArrayList<>(); + ArrayList provForceIngressArrayList = new ArrayList<>(); + ArrayList provForceEgressArrayList = new ArrayList<>(); + ArrayList provHopArrayList = new ArrayList<>(); try { - JSONTokener jtx = new JSONTokener(reader); - JSONObject jcfg = new JSONObject(jtx); - char cch = jtx.nextClean(); - if (cch != '\0') { + JSONTokener jsonTokener = new JSONTokener(reader); + JSONObject jsonObject = new JSONObject(jsonTokener); + char nextCleanChar = jsonTokener.nextClean(); + if (nextCleanChar != '\0') { throw new JSONException("Spurious characters following configuration"); } reader.close(); - addJSONFeeds(pfv, pfuv, pfsnv, jcfg); - addJSONSubs(psv, jcfg); - addJSONParams(pnv, ppv, jcfg); - addJSONRoutingInformation(pfiv, pfev, phv, jcfg); + addJSONFeeds(provFeedArrayList, provFeedUserArrayList, provFeedSubnetArrayList, jsonObject); + addJSONSubs(provSubscriptionArrayList, jsonObject); + addJSONParams(provNodeArrayList, provParamArrayList, jsonObject); + addJSONRoutingInformation(provForceIngressArrayList, provForceEgressArrayList, provHopArrayList, jsonObject); } catch (JSONException jse) { NodeUtils.setIpAndFqdnForEelf("ProvData"); eelfLogger.error(EelfMsgs.MESSAGE_PARSING_ERROR, jse.toString()); @@ -101,15 +102,15 @@ public class ProvData { .error("NODE0201 Error parsing configuration data from provisioning server " + jse.toString(), jse); throw new IOException(jse.toString(), jse); } - pn = pnv.toArray(new NodeConfig.ProvNode[pnv.size()]); - pp = ppv.toArray(new NodeConfig.ProvParam[ppv.size()]); - pf = pfv.toArray(new NodeConfig.ProvFeed[pfv.size()]); - pfu = pfuv.toArray(new NodeConfig.ProvFeedUser[pfuv.size()]); - pfsn = pfsnv.toArray(new NodeConfig.ProvFeedSubnet[pfsnv.size()]); - ps = psv.toArray(new NodeConfig.ProvSubscription[psv.size()]); - pfi = pfiv.toArray(new NodeConfig.ProvForceIngress[pfiv.size()]); - pfe = pfev.toArray(new NodeConfig.ProvForceEgress[pfev.size()]); - ph = phv.toArray(new NodeConfig.ProvHop[phv.size()]); + provNodes = provNodeArrayList.toArray(new ProvNode[0]); + provParams = provParamArrayList.toArray(new ProvParam[0]); + provFeeds = provFeedArrayList.toArray(new ProvFeed[0]); + provFeedUsers = provFeedUserArrayList.toArray(new ProvFeedUser[0]); + provFeedSubnets = provFeedSubnetArrayList.toArray(new ProvFeedSubnet[0]); + provSubscriptions = provSubscriptionArrayList.toArray(new ProvSubscription[0]); + provForceIngresses = provForceIngressArrayList.toArray(new ProvForceIngress[0]); + provForceEgresses = provForceEgressArrayList.toArray(new ProvForceEgress[0]); + provHops = provHopArrayList.toArray(new ProvHop[0]); } private static String[] gvasa(JSONObject object, String key) { @@ -156,63 +157,63 @@ public class ProvData { * Get the raw node configuration entries. */ public NodeConfig.ProvNode[] getNodes() { - return (pn); + return (provNodes); } /** * Get the raw parameter configuration entries. */ public NodeConfig.ProvParam[] getParams() { - return (pp); + return (provParams); } /** * Ge the raw feed configuration entries. */ public NodeConfig.ProvFeed[] getFeeds() { - return (pf); + return (provFeeds); } /** * Get the raw feed user configuration entries. */ public NodeConfig.ProvFeedUser[] getFeedUsers() { - return (pfu); + return (provFeedUsers); } /** * Get the raw feed subnet configuration entries. */ public NodeConfig.ProvFeedSubnet[] getFeedSubnets() { - return (pfsn); + return (provFeedSubnets); } /** * Get the raw subscription entries. */ public NodeConfig.ProvSubscription[] getSubscriptions() { - return (ps); + return (provSubscriptions); } /** * Get the raw forced ingress entries. */ public NodeConfig.ProvForceIngress[] getForceIngress() { - return (pfi); + return (provForceIngresses); } /** * Get the raw forced egress entries. */ public NodeConfig.ProvForceEgress[] getForceEgress() { - return (pfe); + return (provForceEgresses); } /** * Get the raw next hop entries. */ public NodeConfig.ProvHop[] getHops() { - return (ph); + return (provHops); } @Nullable @@ -245,16 +246,7 @@ public class ProvData { String fname = gvas(jfeed, "name"); String fver = gvas(jfeed, "version"); String createdDate = gvas(jfeed, "created_date"); - /* - * START - AAF changes - * TDP EPIC US# 307413 - * Passing aafInstance to ProvFeed from feeds json passed by prov to identify legacy/AAF feeds - */ - String aafInstance = gvas(jfeed, "aaf_instance"); - pfv.add(new ProvFeed(fid, fname + "//" + fver, stat, createdDate, aafInstance)); - /* - * END - AAF changes - */ + pfv.add(new ProvFeed(fid, fname + "//" + fver, stat, createdDate)); addJSONFeedAuthArrays(pfuv, pfsnv, jfeed, fid); } diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/SubnetMatcher.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/config/SubnetMatcher.java similarity index 96% rename from datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/SubnetMatcher.java rename to datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/config/SubnetMatcher.java index 2f510120..602c283e 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/SubnetMatcher.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/config/SubnetMatcher.java @@ -22,7 +22,9 @@ ******************************************************************************/ -package org.onap.dmaap.datarouter.node; +package org.onap.dmaap.datarouter.node.config; + +import org.onap.dmaap.datarouter.node.utils.NodeUtils; /** * Compare IP addresses as byte arrays to a subnet specified as a CIDR. diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/Delivery.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/Delivery.java similarity index 98% rename from datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/Delivery.java rename to datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/Delivery.java index 0326fb08..5164e612 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/Delivery.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/Delivery.java @@ -21,7 +21,7 @@ * * ******************************************************************************/ -package org.onap.dmaap.datarouter.node; +package org.onap.dmaap.datarouter.node.delivery; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -32,6 +32,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Objects; +import org.onap.dmaap.datarouter.node.DestInfo; +import org.onap.dmaap.datarouter.node.NodeConfigManager; /** * Main control point for delivering files to destinations. @@ -277,7 +279,7 @@ public class Delivery { return false; } - static class DelItem implements Comparable { + public static class DelItem implements Comparable { private String pubid; private String spool; diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueue.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/DeliveryQueue.java similarity index 97% rename from datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueue.java rename to datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/DeliveryQueue.java index d447bcc1..de1defca 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueue.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/DeliveryQueue.java @@ -22,7 +22,7 @@ ******************************************************************************/ -package org.onap.dmaap.datarouter.node; +package org.onap.dmaap.datarouter.node.delivery; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -32,6 +32,8 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import org.jetbrains.annotations.Nullable; +import org.onap.dmaap.datarouter.node.DestInfo; +import org.onap.dmaap.datarouter.node.log.StatusLog; /** * Mechanism for monitoring and controlling delivery of files to a destination. @@ -85,7 +87,7 @@ public class DeliveryQueue implements Runnable, DeliveryTaskHelper { /** * Create a delivery queue for a given destination info. */ - DeliveryQueue(DeliveryQueueHelper deliveryQueueHelper, DestInfo destinationInfo) { + public DeliveryQueue(DeliveryQueueHelper deliveryQueueHelper, DestInfo destinationInfo) { this.deliveryQueueHelper = deliveryQueueHelper; this.destinationInfo = destinationInfo; dir = new File(destinationInfo.getSpool()); @@ -97,7 +99,7 @@ public class DeliveryQueue implements Runnable, DeliveryTaskHelper { * * @return The length of the task in bytes or 0 if the task cannot be cancelled. */ - synchronized long cancelTask(String pubid) { + public synchronized long cancelTask(String pubid) { if (working.get(pubid) != null) { return (0); } @@ -197,7 +199,7 @@ public class DeliveryQueue implements Runnable, DeliveryTaskHelper { /** * Get the next task. */ - synchronized DeliveryTask getNext() { + public synchronized DeliveryTask getNext() { DeliveryTask ret = peekNext(); if (ret != null) { todoindex++; @@ -209,7 +211,7 @@ public class DeliveryQueue implements Runnable, DeliveryTaskHelper { /** * Peek at the next task. */ - synchronized DeliveryTask peekNext() { + public synchronized DeliveryTask peekNext() { long now = System.currentTimeMillis(); long mindate = now - deliveryQueueHelper.getExpirationTimer(); if (failed) { @@ -364,14 +366,14 @@ public class DeliveryQueue implements Runnable, DeliveryTaskHelper { /** * Reset the retry timer. */ - void resetQueue() { + public void resetQueue() { resumetime = System.currentTimeMillis(); } /** * Get task if in queue and mark as success. */ - boolean markTaskSuccess(String pubId) { + public boolean markTaskSuccess(String pubId) { DeliveryTask task = working.get(pubId); if (task != null) { markSuccess(task); diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueueHelper.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/DeliveryQueueHelper.java similarity index 97% rename from datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueueHelper.java rename to datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/DeliveryQueueHelper.java index 5427fafd..ec69fff1 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryQueueHelper.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/DeliveryQueueHelper.java @@ -22,7 +22,9 @@ ******************************************************************************/ -package org.onap.dmaap.datarouter.node; +package org.onap.dmaap.datarouter.node.delivery; + +import org.onap.dmaap.datarouter.node.DestInfo; /** * Interface to allow independent testing of the DeliveryQueue code diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryTask.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/DeliveryTask.java similarity index 95% rename from datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryTask.java rename to datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/DeliveryTask.java index 55ad6aa8..744a4476 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryTask.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/DeliveryTask.java @@ -22,10 +22,10 @@ ******************************************************************************/ -package org.onap.dmaap.datarouter.node; +package org.onap.dmaap.datarouter.node.delivery; import static com.att.eelf.configuration.Configuration.MDC_KEY_REQUEST_ID; -import static org.onap.dmaap.datarouter.node.NodeUtils.isFiletypeGzip; +import static org.onap.dmaap.datarouter.node.utils.NodeUtils.isFiletypeGzip; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -45,6 +45,8 @@ import java.util.Arrays; import java.util.UUID; import java.util.zip.GZIPInputStream; import org.jetbrains.annotations.Nullable; +import org.onap.dmaap.datarouter.node.DestInfo; +import org.onap.dmaap.datarouter.node.utils.NodeUtils; import org.onap.dmaap.datarouter.node.eelf.EelfMsgs; import org.slf4j.MDC; @@ -86,7 +88,7 @@ public class DeliveryTask implements Runnable, Comparable { * @param pubid The publish ID for this file. This is used as the base for the file name in the spool directory and * is of the form (milliseconds since 1970).(fqdn of initial data router node) */ - DeliveryTask(DeliveryTaskHelper deliveryTaskHelper, String pubid) { + public DeliveryTask(DeliveryTaskHelper deliveryTaskHelper, String pubid) { this.deliveryTaskHelper = deliveryTaskHelper; this.pubid = pubid; destInfo = deliveryTaskHelper.getDestinationInfo(); @@ -177,7 +179,7 @@ public class DeliveryTask implements Runnable, Comparable { /** * Get the publish ID. */ - String getPublishId() { + public String getPublishId() { return (pubid); } @@ -356,7 +358,7 @@ public class DeliveryTask implements Runnable, Comparable { /** * Remove meta and data files. */ - void clean() { + public void clean() { deleteWithRetry(datafile); deleteWithRetry(metafile); eelfLogger.info(EelfMsgs.INVOKE, newInvocationId); @@ -389,14 +391,14 @@ public class DeliveryTask implements Runnable, Comparable { /** * Set the resume time for a delivery task. */ - void setResumeTime(long resumeTime) { + public void setResumeTime(long resumeTime) { this.resumeTime = resumeTime; } /** * Has this delivery task been cleaned. */ - boolean isCleaned() { + public boolean isCleaned() { return (hdrs == null); } @@ -410,7 +412,7 @@ public class DeliveryTask implements Runnable, Comparable { /** * Get creation date as encoded in the publish ID. */ - long getDate() { + public long getDate() { return (date); } @@ -424,49 +426,49 @@ public class DeliveryTask implements Runnable, Comparable { /** * Get the content type. */ - String getCType() { + public String getCType() { return (ctype); } /** * Get the method. */ - String getMethod() { + public String getMethod() { return (method); } /** * Get the file ID. */ - String getFileId() { + public String getFileId() { return (fileid); } /** * Get the number of delivery attempts. */ - int getAttempts() { + public int getAttempts() { return (attempts); } /** * Get the (space delimited list of) subscription ID for this delivery task. */ - String getSubId() { + public String getSubId() { return (subid); } /** * Get the feed ID for this delivery task. */ - String getFeedId() { + public String getFeedId() { return (feedid); } /** * Get the followRedirects for this delivery task. */ - boolean getFollowRedirects() { + public boolean getFollowRedirects() { return (followRedirects); } } diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryTaskHelper.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/DeliveryTaskHelper.java similarity index 96% rename from datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryTaskHelper.java rename to datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/DeliveryTaskHelper.java index b9068f2f..529acfe0 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/DeliveryTaskHelper.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/delivery/DeliveryTaskHelper.java @@ -22,7 +22,9 @@ ******************************************************************************/ -package org.onap.dmaap.datarouter.node; +package org.onap.dmaap.datarouter.node.delivery; + +import org.onap.dmaap.datarouter.node.DestInfo; /** * Interface to allow independent testing of the DeliveryTask code. diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/MetricsFilter.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/MetricsFilter.java index af820797..5f29683f 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/MetricsFilter.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/eelf/MetricsFilter.java @@ -36,8 +36,6 @@ public class MetricsFilter extends Filter { "PBF|") && !event.getMessage().contains("EXP|") && !event.getMessage().contains("DLX|")) { return FilterReply.ACCEPT; } - } else { - return FilterReply.DENY; } return FilterReply.DENY; } diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/LogManager.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/log/LogManager.java similarity index 95% rename from datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/LogManager.java rename to datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/log/LogManager.java index 4c7ea9c8..47739739 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/LogManager.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/log/LogManager.java @@ -21,7 +21,7 @@ * * ******************************************************************************/ -package org.onap.dmaap.datarouter.node; +package org.onap.dmaap.datarouter.node.log; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -38,6 +38,11 @@ import java.util.TimerTask; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jetbrains.annotations.NotNull; +import org.onap.dmaap.datarouter.node.DestInfo; +import org.onap.dmaap.datarouter.node.DestInfoBuilder; +import org.onap.dmaap.datarouter.node.NodeConfigManager; +import org.onap.dmaap.datarouter.node.delivery.DeliveryQueue; +import org.onap.dmaap.datarouter.node.delivery.DeliveryQueueHelper; /** * Cleanup of old log files. @@ -93,7 +98,7 @@ public class LogManager extends TimerTask { return worker; } - class Uploader extends Thread implements DeliveryQueueHelper { + public class Uploader extends Thread implements DeliveryQueueHelper { private static final String META = "/.meta"; private EELFLogger logger = EELFManager.getInstance().getLogger(Uploader.class); diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/StatusLog.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/log/StatusLog.java similarity index 98% rename from datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/StatusLog.java rename to datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/log/StatusLog.java index 2e646043..ba248a58 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/StatusLog.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/log/StatusLog.java @@ -21,7 +21,7 @@ * * ******************************************************************************/ -package org.onap.dmaap.datarouter.node; +package org.onap.dmaap.datarouter.node.log; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -35,6 +35,8 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.onap.dmaap.datarouter.node.NodeConfigManager; +import org.onap.dmaap.datarouter.node.utils.NodeUtils; /** * Logging for data router delivery events (PUB/DEL/EXP). diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/utils/NodeTlsManager.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/utils/NodeTlsManager.java new file mode 100644 index 00000000..a32699d4 --- /dev/null +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/utils/NodeTlsManager.java @@ -0,0 +1,169 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2022 Nordix Foundation. + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.dmaap.datarouter.node.utils; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; +import java.io.FileInputStream; +import java.io.IOException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.Enumeration; +import java.util.Properties; +import javax.naming.InvalidNameException; +import javax.naming.ldap.LdapName; +import javax.naming.ldap.Rdn; +import org.onap.dmaap.datarouter.node.eelf.EelfMsgs; + +public class NodeTlsManager { + + private static final EELFLogger eelfLogger = EELFManager.getInstance().getLogger(NodeTlsManager.class); + + private String keyStoreType; + private String keyStorefile; + private String keyStorePassword; + private String keyManagerPassword; + private final String[] enabledProtocols; + + public NodeTlsManager(Properties properties) { + enabledProtocols = properties.getProperty("NodeHttpsProtocols", + "TLSv1.1|TLSv1.2").trim().split("\\|"); + setUpKeyStore(properties); + setUpTrustStore(properties); + } + + private void setUpKeyStore(Properties properties) { + keyStoreType = properties.getProperty("KeyStoreType", "PKCS12"); + keyStorefile = properties.getProperty("KeyStorePath"); + keyStorePassword = properties.getProperty("KeyStorePass"); + keyManagerPassword = properties.getProperty("KeyManagerPass"); + } + + private void setUpTrustStore(Properties properties) { + String trustStoreType = properties.getProperty("TrustStoreType", "jks"); + String trustStoreFile = properties.getProperty("TrustStorePath"); + String trustStorePassword = properties.getProperty("TrustStorePass"); + if (trustStoreFile != null && trustStoreFile.length() > 0) { + eelfLogger.info("TrustStore found. Loading {} file {} to System Properties.", trustStoreType, trustStoreFile); + System.setProperty("javax.net.ssl.trustStoreType", trustStoreType); + System.setProperty("javax.net.ssl.trustStore", trustStoreFile); + System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword); + return; + } + eelfLogger.error("TrustStore not found. Falling back to 1 way TLS"); + } + + public String getKeyStoreType() { + return keyStoreType; + } + + public String getKeyStorefile() { + return keyStorefile; + } + + public String getKeyStorePassword() { + return keyStorePassword; + } + + public String getKeyManagerPassword() { + return keyManagerPassword; + } + + public String[] getEnabledProtocols() { + return enabledProtocols; + } + + /** + * Get the CN value of the first private key entry with a certificate. + * + * @return CN of the certificate subject or null + */ + public String getMyNameFromCertificate() { + return getCanonicalName(this.keyStoreType, this.keyStorefile, this.keyStorePassword); + } + + private String getCanonicalName(String kstype, String ksfile, String kspass) { + KeyStore ks; + try { + ks = KeyStore.getInstance(kstype); + if (loadKeyStore(ksfile, kspass, ks)) { + return (null); + } + } catch (Exception e) { + NodeUtils.setIpAndFqdnForEelf("getCanonicalName"); + eelfLogger.error(EelfMsgs.MESSAGE_KEYSTORE_LOAD_ERROR, e, ksfile); + return (null); + } + return (getCanonicalName(ks)); + } + + private String getCanonicalName(KeyStore ks) { + try { + Enumeration aliases = ks.aliases(); + while (aliases.hasMoreElements()) { + String name = getNameFromSubject(ks, aliases); + if (name != null) { + return name; + } + } + } catch (Exception e) { + eelfLogger.error("NODE0402 Error extracting my name from my keystore file " + e); + } + return (null); + } + + private boolean loadKeyStore(String ksfile, String kspass, KeyStore ks) + throws NoSuchAlgorithmException, CertificateException { + try (FileInputStream fileInputStream = new FileInputStream(ksfile)) { + ks.load(fileInputStream, kspass.toCharArray()); + } catch (IOException ioException) { + eelfLogger.error("IOException occurred while opening FileInputStream: " + ioException.getMessage(), + ioException); + return true; + } + return false; + } + + private String getNameFromSubject(KeyStore ks, Enumeration aliases) throws KeyStoreException { + String alias = aliases.nextElement(); + String nameFromSubject = null; + if (ks.entryInstanceOf(alias, KeyStore.PrivateKeyEntry.class)) { + X509Certificate cert = (X509Certificate) ks.getCertificate(alias); + if (cert != null) { + String subject = cert.getSubjectX500Principal().getName(); + try { + LdapName ln = new LdapName(subject); + for (Rdn rdn : ln.getRdns()) { + if (rdn.getType().equalsIgnoreCase("CN")) { + nameFromSubject = rdn.getValue().toString(); + } + } + } catch (InvalidNameException e) { + eelfLogger.error("No valid CN not found for dr-node cert", e); + } + } + } + return nameFromSubject; + } +} diff --git a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeUtils.java b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/utils/NodeUtils.java similarity index 72% rename from datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeUtils.java rename to datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/utils/NodeUtils.java index 5cca7375..bd233d3e 100644 --- a/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/NodeUtils.java +++ b/datarouter-node/src/main/java/org/onap/dmaap/datarouter/node/utils/NodeUtils.java @@ -22,7 +22,7 @@ ******************************************************************************/ -package org.onap.dmaap.datarouter.node; +package org.onap.dmaap.datarouter.node.utils; import static com.att.eelf.configuration.Configuration.MDC_KEY_REQUEST_ID; import static com.att.eelf.configuration.Configuration.MDC_SERVER_FQDN; @@ -111,51 +111,6 @@ public class NodeUtils { } } - /** - * Given a keystore file and its password, return the value of the CN of the first private key entry with a - * certificate. - * - * @param kstype The type of keystore - * @param ksfile The file name of the keystore - * @param kspass The password of the keystore - * @return CN of the certificate subject or null - */ - public static String getCanonicalName(String kstype, String ksfile, String kspass) { - KeyStore ks; - try { - ks = KeyStore.getInstance(kstype); - if (loadKeyStore(ksfile, kspass, ks)) { - return (null); - } - } catch (Exception e) { - setIpAndFqdnForEelf("getCanonicalName"); - eelfLogger.error(EelfMsgs.MESSAGE_KEYSTORE_LOAD_ERROR, e, ksfile); - return (null); - } - return (getCanonicalName(ks)); - } - - /** - * Given a keystore, return the value of the CN of the first private key entry with a certificate. - * - * @param ks The KeyStore - * @return CN of the certificate subject or null - */ - public static String getCanonicalName(KeyStore ks) { - try { - Enumeration aliases = ks.aliases(); - while (aliases.hasMoreElements()) { - String name = getNameFromSubject(ks, aliases); - if (name != null) { - return name; - } - } - } catch (Exception e) { - eelfLogger.error("NODE0402 Error extracting my name from my keystore file " + e.toString(), e); - } - return (null); - } - /** * Given a string representation of an IP address, get the corresponding byte array. * @@ -281,54 +236,18 @@ public class NodeUtils { } /** - * Method to check to see if file is of type gzip. + * If file is of type gzip. * * @param file The name of the file to be checked * @return True if the file is of type gzip */ public static boolean isFiletypeGzip(File file) { try (FileInputStream fileInputStream = new FileInputStream(file); - GZIPInputStream gzip = new GZIPInputStream(fileInputStream)) { - + GZIPInputStream ignored = new GZIPInputStream(fileInputStream)) { return true; } catch (IOException e) { - eelfLogger.error("NODE0403 " + file.toString() + " Not in gzip(gz) format: " + e.toString() + e); + eelfLogger.error("NODE0403 " + file + " Not in gzip(gz) format: " + e + e); return false; } } - - - private static boolean loadKeyStore(String ksfile, String kspass, KeyStore ks) - throws NoSuchAlgorithmException, CertificateException { - try (FileInputStream fileInputStream = new FileInputStream(ksfile)) { - ks.load(fileInputStream, kspass.toCharArray()); - } catch (IOException ioException) { - eelfLogger.error("IOException occurred while opening FileInputStream: " + ioException.getMessage(), - ioException); - return true; - } - return false; - } - - - private static String getNameFromSubject(KeyStore ks, Enumeration aliases) throws KeyStoreException { - String alias = aliases.nextElement(); - if (ks.entryInstanceOf(alias, KeyStore.PrivateKeyEntry.class)) { - X509Certificate cert = (X509Certificate) ks.getCertificate(alias); - if (cert != null) { - String subject = cert.getSubjectX500Principal().getName(); - try { - LdapName ln = new LdapName(subject); - for (Rdn rdn : ln.getRdns()) { - if (rdn.getType().equalsIgnoreCase("CN")) { - return rdn.getValue().toString(); - } - } - } catch (InvalidNameException e) { - eelfLogger.error("No valid CN not found for dr-node cert", e); - } - } - } - return null; - } } diff --git a/datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.cred.props b/datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.cred.props deleted file mode 100644 index 9a43f584..00000000 --- a/datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.cred.props +++ /dev/null @@ -1,17 +0,0 @@ -############################################################ -# Properties Generated by AT&T Certificate Manager -# by root -# on 2022-03-22T12:31:16.865+0000 -# @copyright 2019, AT&T -############################################################ -Challenge=enc:2dZO7B2UVelU01IezilQ9hUYptjIvurC6JWO9vJHOiiqg9qUna3AdEMxzBpXcgIO -cadi_alias=dmaap-dr-node@dmaap-dr.onap.org -cadi_key_password=enc:ow380FBQU5xvQEDzTiXdfx-BD_0dEWbRCXjnUPxVFatk_7KaejgiLCVew6C6x8_9 -cadi_keyfile=/opt/app/osaaf/local/org.onap.dmaap-dr.keyfile -cadi_keystore=/opt/app/osaaf/local/org.onap.dmaap-dr.p12 -cadi_keystore_password=enc:Urky1AuqpokGwoSl72ypmhVONokY0H1Gy28S9P8jfvK1-d7W8SODXf87K37EubDo -cadi_keystore_password_jks=enc:lwXWmxaVAHy207uNeiHPYLho3qezj4xu7_iH4myTitXuj_bo9esv0e1L19HluXlM -cadi_keystore_password_p12=enc:Urky1AuqpokGwoSl72ypmhVONokY0H1Gy28S9P8jfvK1-d7W8SODXf87K37EubDo -cadi_truststore=/opt/app/osaaf/local/org.onap.dmaap-dr.trust.jks -cadi_truststore_password=enc:stAsWWKk5FOcWxyWsNqyQlSdkwWSxcy3Jed6RW_r4jyZosqV8kmSCJLSHNLyWyTH -cadi_x509_issuers=CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_7, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_9, OU=OSAAF, O=ONAP, C=US diff --git a/datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.keyfile b/datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.keyfile deleted file mode 100644 index 987cae1f..00000000 --- a/datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.keyfile +++ /dev/null @@ -1,27 +0,0 @@ -uXr3OodaCvEvTDHfkpgh-_5UdpEkBowSRpKF18WNxMG0A9Y9k2REr-d075mNHshr5gOUYAlykgaX -ImvY-oFtG71N-Q0uqYnYuU7eX7zgcOOFNpeT4q2db3wkiScaZgdv2UnfDOVX2Aq53GzyYeKcGB1W -u0jKX8ryHVC0uvj69y1boiJBxQY1HwAqsh9q39Ut1XxyB42D7xDM7sa9G1I6YosQlthXPMt7Q_i0 -0CUHrozT6Wtnxfb8-qR6rM5PNmAxp8r5Jb4cnSbxJGEWpx1DkZPPZNvLjE9bBfinVftzrpIlqHd3 -2CCp3k6xrqui2c_0HaNILtKHX5VVKttRf9zoADk_l5_MowEJgh1fgu8m0r-iEB6oH18AWZ_PCtSr -A0cqEDGbP-h7e8w-Dwb0yS_oSfeDISarZ1Q46CQFcDz7f4bVB3AW67YGM4SQBaFGivWS_Lz_juOx -fhyo55HW_wL_92xRvAyXD1Eg64Lw0Cx0f9rn4uM7NkKaSCP8MmIvs84egCvDzCiWkT6SGzUTeZ7M -qI0ow2tJPFUuvhozcYxJW9sFzTqTFL7iLtrO5nHmo7YUVf2WU8ByGOfC-ylZPjw0fiKpe-7MXVSz -MIOxl3pgWSYt6kImBtZCateif6TgF_A-91yAOoQLm72baJKhOo-F-aJ4k6ToT4bZ-9-Hjs5Wk9sO -4thYzDcMaGrWsssnR9QMBjl9x3uw5bfOYGduyyRCWC_TYNorrW6Bvh7gFZAWk_f6cK-pPahRo_3O -erNlUHx6xaektjqUsmp91LzjCEWbmt5nDGw16VUSPhrtkca2ReWDL0vTnpjvPuRI7mWHdfyoVYMw -KUDkRgn61QvELC0Rl0C12polUEjqSxCRvGzL8QiOrU_Z1hXhVyp2gVIYvDKyuyguvJlniEBQ2qbM -3Y5savSaANj-b2-_J0ofhvYFGz1k_bjcCE6Wx2RSWk1nSJFJ0gFjp1Ky2cyKhhVMXCiWcbbA3vC8 -E1cE9Ixn4z5WYyHOAFyzrsiiapdn5MhB_kI-ObR2HuRy_GRJHMVpxqX15Bv3OXxWy51bXeYeRfit -SVCoyfXMXbx12eVG4tvf3WyYg9RqK_QN57VAmnffq09MAXuzFB1NuxSeJeBHGtBW6XIvb6E32K6I -rL7vfxGHhD7ZHqQzzie5I42HufANtBb1KNKHikeeACxxlpjOIHjjEZ6yffhoyhNbSHx4TNs7UYOf -FUKs0TCO9ffSJ8JT67X-baqlnSYFkdqR6QTGhltZq1ssPYq6Y6NGN1iEHJMfapev07AQgp6mBBxJ -dEwDZMAwlmb1yVkU1gfzcrGdAUeAAuM6LowPHUKYLJJvvaFLQJKbwwLvjnm_Tf9UR5QJ8a3JKiLt -F0Ykc1AeO-fyiNPUVRnkc3--Gs0bLUpLe0_medGOZ_LLk45GarEzBCGajgF_joz8fsndKtDrEnB0 -z-8iiQ4bTZb_ALjKnnhcdKjoJNhZ-e3AsmadYO7ve2K3ApwOelWWh24iZ-ZSUbnlw-OQMu4RvI9h -9KOTbu4gWokep3O2uT8-cVN-ax1FYRpmexHgIxZy-tmYjDdJTJQv3dMp5UngUs6xmIy5nyIBr51B -YORSQmXRvbdvYeY7jOEQUGfXfS2yYtzLfJ07f8ODQJ24APDKsVEGWVBcBMqp53o9W7cPJ-4vnMLU -mVYCKqVrT2bThRWb38OtaaJuA4A8GboDDe5Q0IZao0v3gqwgfCzJIjQx97AEHzEbLzEBxio_z8a0 -AYLi-_f7kMtgrMsj61gcRVUan5NVqnL7oVwFn8FuqeTRzMMbgJHUHfFzrgLxpRwnscGRzygZf39Q -JqqOLGriWe_IOhXQ7aIp3uyBF-brJnrXcQIp3PF0fbVTGK_VyKDB6J0BjJyjmyL0TA37hDr8usna -TgMtjF1qq9kOrJr2582n8TW-ogpyqm1ft7R18VT9_1JjtnCcTCudW-oJX87jv3UTJdaEkBMhc1Pe -euLti-qSG3Q5QeO5AxM8mP_9YbLHB9YQboRWnbfC9oIFRmVgGAcdbHNFn0hfILBOTIYStQL4 \ No newline at end of file diff --git a/datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.location.props b/datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.location.props deleted file mode 100644 index c30adee4..00000000 --- a/datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.location.props +++ /dev/null @@ -1,8 +0,0 @@ -############################################################ -# Properties Generated by AT&T Certificate Manager -# by root -# on 2022-03-22T12:31:14.170+0000 -# @copyright 2019, AT&T -############################################################ -cadi_latitude=0.0 -cadi_longitude=0.0 diff --git a/datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.p12 b/datarouter-node/src/main/resources/aaf/org.onap.dmaap-dr.p12 deleted file mode 100644 index 4238c868b863ba52a49061a90f8182f34ad9d8a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4217 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 SWgksF*&D)L4b`wnT>1w@Sz^5a diff --git a/datarouter-node/src/main/resources/node.properties b/datarouter-node/src/main/resources/node.properties index ac9aec22..68580f73 100644 --- a/datarouter-node/src/main/resources/node.properties +++ b/datarouter-node/src/main/resources/node.properties @@ -56,35 +56,35 @@ SpoolDir = /opt/app/datartr/spool # The path to the redirection data file RedirectionFile = etc/redirections.dat # +# https security required for publish request +TlsEnabled = false +# +# Enabled TLS protocols +NodeHttpsProtocols = TLSv1.1|TLSv1.2 +# # The type of keystore for https KeyStoreType = PKCS12 # +# The path to your KeyStoreFile +KeyStorePath = /opt/app/datartr/certs/org.onap.dmaap-dr-node.p12 +# +# The key store password +KeyStorePass = changeit +# +# The key manager password +KeyManagerPass = changeit +# # The type of truststore for https TrustStoreType = jks # +# The path to your trust store +TrustStorePath = /opt/app/datartr/certs/truststore.jks +# +# The trust store password +TrustStorePass = changeit +# # The path to the file used to trigger an orderly shutdown QuiesceFile = etc/SHUTDOWN # # The key used to generate passwords for node to node transfers NodeAuthKey = Node123! -# -# DR_NODE DEFAULT ENABLED TLS PROTOCOLS -NodeHttpsProtocols = TLSv1.1|TLSv1.2 -# -# AAF CADI enabled flag -CadiEnabled = false -# -# AAF type to generate permission string -AAFType = org.onap.dmaap-dr.feed -# -# AAF default instance to generate permission string - default should be legacy -AAFInstance = legacy -# -# AAF action to generate permission string - default should be publish -AAFAction = publish -# -# AAF Props file path -AAFPropsFilePath = /opt/app/osaaf/local/org.onap.dmaap-dr.props - -# https security required for publish request -TlsEnabled = false diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryQueueTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryQueueTest.java index d1194279..ea221cbd 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryQueueTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryQueueTest.java @@ -44,6 +44,9 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.onap.dmaap.datarouter.node.delivery.DeliveryQueue; +import org.onap.dmaap.datarouter.node.delivery.DeliveryQueueHelper; +import org.onap.dmaap.datarouter.node.delivery.DeliveryTask; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryTaskTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryTaskTest.java index 0f019161..b749afec 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryTaskTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryTaskTest.java @@ -33,6 +33,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; +import org.onap.dmaap.datarouter.node.delivery.DeliveryQueue; +import org.onap.dmaap.datarouter.node.delivery.DeliveryTask; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryTest.java index 25830cdd..61c53180 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryTest.java @@ -29,7 +29,6 @@ import static org.mockito.Mockito.verify; import java.io.File; import java.io.IOException; import java.util.HashMap; -import java.util.Hashtable; import org.apache.commons.lang3.reflect.FieldUtils; import org.junit.After; import org.junit.Assert; @@ -37,7 +36,9 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.onap.dmaap.datarouter.node.Delivery.DelItem; +import org.onap.dmaap.datarouter.node.delivery.Delivery; +import org.onap.dmaap.datarouter.node.delivery.Delivery.DelItem; +import org.onap.dmaap.datarouter.node.delivery.DeliveryQueue; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/LogManagerTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/LogManagerTest.java index cb3c88a4..1875a220 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/LogManagerTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/LogManagerTest.java @@ -30,13 +30,13 @@ import java.io.IOException; import java.util.Timer; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.reflect.FieldUtils; -import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.onap.dmaap.datarouter.node.LogManager.Uploader; +import org.onap.dmaap.datarouter.node.log.LogManager; +import org.onap.dmaap.datarouter.node.log.LogManager.Uploader; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeAafPropsUtilsTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeAafPropsUtilsTest.java deleted file mode 100644 index fbb93324..00000000 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeAafPropsUtilsTest.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * ================================================================================ - * 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. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ -package org.onap.dmaap.datarouter.node; - -import java.io.File; -import java.io.IOException; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -public class NodeAafPropsUtilsTest { - - private NodeAafPropsUtils nodeAafPropsUtils; - - @Before - public void setUp() throws IOException { - nodeAafPropsUtils = new NodeAafPropsUtils(new File("src/test/resources/aaf/org.onap.dmaap-dr.props")); - } - - @Test - public void Veirfy_Aaf_Pass_Decryp_Successful() { - Assert.assertEquals("w7(O#.QV#kQ;L(8fsaoT7cY&", nodeAafPropsUtils.getDecryptedPass("cadi_keystore_password")); - } -} diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java index 046a56e2..10732dfa 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java @@ -45,6 +45,7 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.Mock; +import org.onap.dmaap.datarouter.node.config.NodeConfig; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; @@ -95,10 +96,8 @@ public class NodeConfigManagerTest { @Test public void Verify_NodeConfigMan_Getters_Secure() { NodeConfigManager nodeConfigManager = NodeConfigManager.getInstance(); - Assert.assertEquals("legacy", nodeConfigManager.getAafInstance()); Assert.assertEquals("src/test/resources/spool/f", nodeConfigManager.getSpoolDir()); Assert.assertEquals("src/test/resources/spool", nodeConfigManager.getSpoolBase()); - Assert.assertEquals("PKCS12", nodeConfigManager.getKSType()); Assert.assertEquals(8080, nodeConfigManager.getHttpPort()); Assert.assertEquals(8443, nodeConfigManager.getHttpsPort()); Assert.assertEquals(443, nodeConfigManager.getExtHttpsPort()); @@ -108,12 +107,8 @@ public class NodeConfigManagerTest { Assert.assertEquals(".log", nodeConfigManager.getEventLogSuffix()); Assert.assertEquals("src/test/resources/logs", nodeConfigManager.getLogDir()); Assert.assertEquals((86400000L * 30), nodeConfigManager.getLogRetention()); - Assert.assertEquals(new String[] {"TLSv1.1", "TLSv1.2"}, nodeConfigManager.getEnabledprotocols()); - Assert.assertEquals("org.onap.dmaap-dr.feed", nodeConfigManager.getAafType()); - Assert.assertEquals("publish", nodeConfigManager.getAafAction()); - Assert.assertTrue(nodeConfigManager.getCadiEnabled()); Assert.assertFalse(nodeConfigManager.isShutdown()); - Assert.assertTrue(nodeConfigManager.isTlsEnabled()); + Assert.assertFalse(nodeConfigManager.isTlsEnabled()); Assert.assertTrue(nodeConfigManager.isConfigured()); Assert.assertNotNull(nodeConfigManager.getPublishId()); Assert.assertNotNull(nodeConfigManager.getAllDests()); @@ -126,9 +121,6 @@ public class NodeConfigManagerTest { Assert.assertEquals(60000, nodeConfigManager.getFairTimeLimit()); Assert.assertNotNull(nodeConfigManager.getTargets("1")); Assert.assertEquals("src/test/resources/spool/f", nodeConfigManager.getSpoolDir()); - Assert.assertEquals("src/test/resources/aaf/org.onap.dmaap-dr.p12", nodeConfigManager.getKSFile()); - Assert.assertEquals("jks", nodeConfigManager.getTstype()); - Assert.assertEquals("src/test/resources/aaf/org.onap.dmaap-dr.trust.jks", nodeConfigManager.getTsfile()); Assert.assertEquals(40, nodeConfigManager.getDeliveryThreads()); Assert.assertEquals("30", nodeConfigManager.getEventLogInterval()); Assert.assertFalse(nodeConfigManager.isFollowRedirects()); @@ -137,7 +129,6 @@ public class NodeConfigManagerTest { Assert.assertEquals("Basic ZG1hYXAtZHItbm9kZTp2OStFanZpWVBXSURrazVxRlF5ZkoxSC9LdHBuYWo4K0NVTXlNL0lRRUp2UGdjOUxpU2s5ZnpKTjdFazl3SzZkaG11S1E4S3RtcC9kelpBU3BRUGZCdz09", nodeConfigManager.getMyAuth()); Assert.assertEquals(0.05, nodeConfigManager.getFreeDiskStart(), 0.0); Assert.assertEquals(0.2, nodeConfigManager.getFreeDiskStop(), 0.0); - Assert.assertEquals("org.onap.dmaap-dr.feed|legacy|publish", nodeConfigManager.getPermission("legacy")); } /** diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigTest.java index 6804ebfe..1272f3c2 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigTest.java @@ -31,12 +31,14 @@ import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; +import org.onap.dmaap.datarouter.node.config.NodeConfig; +import org.onap.dmaap.datarouter.node.config.ProvData; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) -@SuppressStaticInitializationFor({"org.onap.dmaap.datarouter.node.ProvData"}) +@SuppressStaticInitializationFor({"org.onap.dmaap.datarouter.node.config.ProvData"}) @PowerMockIgnore({"com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*"}) public class NodeConfigTest { @@ -79,7 +81,6 @@ public class NodeConfigTest { endpointAddrs.put("172.0.0.1"); auth.put("endpoint_addrs", endpointAddrs); feed.put("authorization", auth); - feed.put("aaf_instance", "legacy"); feeds.put(feed); provData.put("feeds", feeds); } diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServerTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServerTest.java index af43e5d8..8d0b2a2d 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServerTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServerTest.java @@ -27,12 +27,15 @@ import static org.mockito.Mockito.when; import java.io.File; import java.io.IOException; +import java.util.Properties; import org.apache.commons.lang3.reflect.FieldUtils; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.onap.dmaap.datarouter.node.delivery.Delivery; +import org.onap.dmaap.datarouter.node.utils.NodeTlsManager; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; @@ -44,9 +47,11 @@ import org.powermock.modules.junit4.PowerMockRunner; public class NodeServerTest { private final NodeConfigManager config = mock(NodeConfigManager.class); + private NodeTlsManager nodeTlsManager; @Before public void setUp() throws Exception { setUpConfig(); + setUpNodeTlsMan(); setUpNodeMainDelivery(); createFilesAndDirectories(); } @@ -61,7 +66,7 @@ public class NodeServerTest { Assert.assertNotNull(NodeServer.getServerInstance(config)); } - private void setUpConfig() throws IllegalAccessException { + private void setUpConfig() { PowerMockito.mockStatic(NodeConfigManager.class); when(config.isShutdown()).thenReturn(false); when(config.isConfigured()).thenReturn(true); @@ -74,15 +79,16 @@ public class NodeServerTest { when(config.isDeletePermitted("1")).thenReturn(true); when(config.getAllDests()).thenReturn(new DestInfo[0]); when(config.isTlsEnabled()).thenReturn(true); - when(config.getKSType()).thenReturn("PKCS12"); - when(config.getKSFile()).thenReturn("src/test/resources/aaf/org.onap.dmaap-dr.p12"); - when(config.getKSPass()).thenReturn("tVac2#@Stx%tIOE^x[c&2fgZ"); - when(config.getTstype()).thenReturn("jks"); - when(config.getTsfile()).thenReturn("src/test/resources/aaf/org.onap.dmaap-dr.trust.jks"); - when(config.getTspass()).thenReturn("XHX$2Vl?Lk*2CB.i1+ZFAhZd"); PowerMockito.when(NodeConfigManager.getInstance()).thenReturn(config); } + private void setUpNodeTlsMan() throws IOException { + Properties nodeProps = new Properties(); + nodeProps.load(NodeTlsManagerTest.class.getClassLoader().getResourceAsStream("node_test.properties")); + nodeTlsManager = new NodeTlsManager(nodeProps); + PowerMockito.when(NodeConfigManager.getNodeTlsManager()).thenReturn(nodeTlsManager); + } + private void setUpNodeMainDelivery() throws IllegalAccessException{ Delivery delivery = mock(Delivery.class); doNothing().when(delivery).resetQueue(anyObject()); diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java index 0dcc0a19..b48db880 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java @@ -24,7 +24,6 @@ package org.onap.dmaap.datarouter.node; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyObject; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.anyString; @@ -50,10 +49,8 @@ import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.BDDMockito; import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.internal.matchers.Any; +import org.onap.dmaap.datarouter.node.delivery.Delivery; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; @@ -238,16 +235,6 @@ public class NodeServletTest { verify(response).sendError(eq(HttpServletResponse.SC_BAD_REQUEST), anyString()); } - @Test - public void Given_Request_Is_HTTP_PUT_On_Publish_On_AAF_Feed_And_Cadi_Enabled_And_No_Permissions_Then_Forbidden_Response_Is_Generated() throws Exception { - when(config.getCadiEnabled()).thenReturn(true); - when(config.getAafInstance("1")).thenReturn("*"); - when(request.getPathInfo()).thenReturn("/publish/1/fileName"); - setHeadersForValidRequest(true); - nodeServlet.doPut(request, response); - verify(response).sendError(eq(HttpServletResponse.SC_FORBIDDEN), anyString()); - verifyEnteringExitCalled(listAppender); - } @Test public void Given_Request_Is_HTTP_DELETE_On_Publish_With_Meta_Data_Malformed_Then_Bad_Request_Response_Is_Generated() throws Exception { diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeTlsManagerTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeTlsManagerTest.java new file mode 100644 index 00000000..f259d926 --- /dev/null +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeTlsManagerTest.java @@ -0,0 +1,51 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +package org.onap.dmaap.datarouter.node; + +import java.io.IOException; +import java.util.Properties; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.dmaap.datarouter.node.utils.NodeTlsManager; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.modules.junit4.PowerMockRunner; + +@RunWith(PowerMockRunner.class) +@PowerMockIgnore({"java.net.ssl", "javax.security.auth.x500.X500Principal", "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*"}) +public class NodeTlsManagerTest { + + private static NodeTlsManager nodeTlsManager; + + @BeforeClass + public static void setUpClass() throws IOException { + Properties nodeProps = new Properties(); + nodeProps.load(NodeTlsManagerTest.class.getClassLoader().getResourceAsStream("node_test.properties")); + nodeTlsManager = new NodeTlsManager(nodeProps); + } + + @Test + public void Given_Get_CanonicalName_Called_Valid_CN_Returned_From_JKS() { + String canonicalName = nodeTlsManager.getMyNameFromCertificate(); + Assert.assertEquals("dmaap-dr-node", canonicalName); + } + +} diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeUtilsTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeUtilsTest.java index 40cb11fb..9469ce0f 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeUtilsTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeUtilsTest.java @@ -29,12 +29,13 @@ import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.onap.dmaap.datarouter.node.utils.NodeUtils; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.modules.junit4.PowerMockRunner; import org.slf4j.MDC; @RunWith(PowerMockRunner.class) -@PowerMockIgnore({"java.net.ssl", "javax.security.auth.x500.X500Principal", "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*"}) +@PowerMockIgnore({"java.net.ssl", "com.sun.org.apache.xerces.*", "javax.xml.*", "org.xml.*", "javax.management.*"}) public class NodeUtilsTest { @Mock @@ -76,16 +77,4 @@ public class NodeUtilsTest { Assert.assertEquals("123", MDC.get("RequestId")); Assert.assertEquals("456", MDC.get("InvocationId")); } - - @Test - public void Given_Get_CanonicalName_Called_Valid_CN_Returned_From_JKS() { - String canonicalName = NodeUtils.getCanonicalName("jks", "src/test/resources/org.onap.dmaap-dr-test-cert.jks", "WGxd2P6MDo*Bi4+UdzWs{?$8"); - Assert.assertEquals("dmaap-dr-node", canonicalName); - } - - @Test - public void Given_Get_CanonicalName_Called_Valid_CN_Returned_From_P12() { - String canonicalName = NodeUtils.getCanonicalName("PKCS12", "src/test/resources/aaf/org.onap.dmaap-dr.p12", "w7(O#.QV#kQ;L(8fsaoT7cY&"); - Assert.assertEquals("dmaap-dr-node", canonicalName); - } } diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/PathFinderTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/PathFinderTest.java index 25edd0c0..2bf320b3 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/PathFinderTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/PathFinderTest.java @@ -26,6 +26,8 @@ import static org.junit.Assert.assertThat; import org.junit.Test; import org.junit.runner.RunWith; +import org.onap.dmaap.datarouter.node.config.NodeConfig; +import org.onap.dmaap.datarouter.node.config.PathFinder; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/ProvDataTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/ProvDataTest.java index 1a4564ab..1747fc12 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/ProvDataTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/ProvDataTest.java @@ -29,6 +29,7 @@ import java.io.Reader; import java.nio.charset.StandardCharsets; import org.junit.Test; import org.junit.runner.RunWith; +import org.onap.dmaap.datarouter.node.config.ProvData; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.modules.junit4.PowerMockRunner; diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/StatusLogTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/StatusLogTest.java index 28dcba9a..5cd46e88 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/StatusLogTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/StatusLogTest.java @@ -29,6 +29,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.onap.dmaap.datarouter.node.log.StatusLog; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; diff --git a/datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.cred.props b/datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.cred.props deleted file mode 100644 index 452a0112..00000000 --- a/datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.cred.props +++ /dev/null @@ -1,17 +0,0 @@ -############################################################ -# Properties Generated by AT&T Certificate Manager -# by root -# on 2022-03-22T12:31:16.865+0000 -# @copyright 2019, AT&T -############################################################ -Challenge=enc:2dZO7B2UVelU01IezilQ9hUYptjIvurC6JWO9vJHOiiqg9qUna3AdEMxzBpXcgIO -cadi_alias=dmaap-dr-node@dmaap-dr.onap.org -cadi_key_password=enc:ow380FBQU5xvQEDzTiXdfx-BD_0dEWbRCXjnUPxVFatk_7KaejgiLCVew6C6x8_9 -cadi_keyfile=src/test/resources/aaf/org.onap.dmaap-dr.keyfile -cadi_keystore=src/test/resources/aaf/org.onap.dmaap-dr.p12 -cadi_keystore_password=enc:Urky1AuqpokGwoSl72ypmhVONokY0H1Gy28S9P8jfvK1-d7W8SODXf87K37EubDo -cadi_keystore_password_jks=enc:lwXWmxaVAHy207uNeiHPYLho3qezj4xu7_iH4myTitXuj_bo9esv0e1L19HluXlM -cadi_keystore_password_p12=enc:Urky1AuqpokGwoSl72ypmhVONokY0H1Gy28S9P8jfvK1-d7W8SODXf87K37EubDo -cadi_truststore=src/test/resources/aaf/org.onap.dmaap-dr.trust.jks -cadi_truststore_password=enc:stAsWWKk5FOcWxyWsNqyQlSdkwWSxcy3Jed6RW_r4jyZosqV8kmSCJLSHNLyWyTH -cadi_x509_issuers=CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_7, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_9, OU=OSAAF, O=ONAP, C=US diff --git a/datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.keyfile b/datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.keyfile deleted file mode 100644 index 987cae1f..00000000 --- a/datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.keyfile +++ /dev/null @@ -1,27 +0,0 @@ -uXr3OodaCvEvTDHfkpgh-_5UdpEkBowSRpKF18WNxMG0A9Y9k2REr-d075mNHshr5gOUYAlykgaX -ImvY-oFtG71N-Q0uqYnYuU7eX7zgcOOFNpeT4q2db3wkiScaZgdv2UnfDOVX2Aq53GzyYeKcGB1W -u0jKX8ryHVC0uvj69y1boiJBxQY1HwAqsh9q39Ut1XxyB42D7xDM7sa9G1I6YosQlthXPMt7Q_i0 -0CUHrozT6Wtnxfb8-qR6rM5PNmAxp8r5Jb4cnSbxJGEWpx1DkZPPZNvLjE9bBfinVftzrpIlqHd3 -2CCp3k6xrqui2c_0HaNILtKHX5VVKttRf9zoADk_l5_MowEJgh1fgu8m0r-iEB6oH18AWZ_PCtSr -A0cqEDGbP-h7e8w-Dwb0yS_oSfeDISarZ1Q46CQFcDz7f4bVB3AW67YGM4SQBaFGivWS_Lz_juOx -fhyo55HW_wL_92xRvAyXD1Eg64Lw0Cx0f9rn4uM7NkKaSCP8MmIvs84egCvDzCiWkT6SGzUTeZ7M -qI0ow2tJPFUuvhozcYxJW9sFzTqTFL7iLtrO5nHmo7YUVf2WU8ByGOfC-ylZPjw0fiKpe-7MXVSz -MIOxl3pgWSYt6kImBtZCateif6TgF_A-91yAOoQLm72baJKhOo-F-aJ4k6ToT4bZ-9-Hjs5Wk9sO -4thYzDcMaGrWsssnR9QMBjl9x3uw5bfOYGduyyRCWC_TYNorrW6Bvh7gFZAWk_f6cK-pPahRo_3O -erNlUHx6xaektjqUsmp91LzjCEWbmt5nDGw16VUSPhrtkca2ReWDL0vTnpjvPuRI7mWHdfyoVYMw -KUDkRgn61QvELC0Rl0C12polUEjqSxCRvGzL8QiOrU_Z1hXhVyp2gVIYvDKyuyguvJlniEBQ2qbM -3Y5savSaANj-b2-_J0ofhvYFGz1k_bjcCE6Wx2RSWk1nSJFJ0gFjp1Ky2cyKhhVMXCiWcbbA3vC8 -E1cE9Ixn4z5WYyHOAFyzrsiiapdn5MhB_kI-ObR2HuRy_GRJHMVpxqX15Bv3OXxWy51bXeYeRfit -SVCoyfXMXbx12eVG4tvf3WyYg9RqK_QN57VAmnffq09MAXuzFB1NuxSeJeBHGtBW6XIvb6E32K6I -rL7vfxGHhD7ZHqQzzie5I42HufANtBb1KNKHikeeACxxlpjOIHjjEZ6yffhoyhNbSHx4TNs7UYOf -FUKs0TCO9ffSJ8JT67X-baqlnSYFkdqR6QTGhltZq1ssPYq6Y6NGN1iEHJMfapev07AQgp6mBBxJ -dEwDZMAwlmb1yVkU1gfzcrGdAUeAAuM6LowPHUKYLJJvvaFLQJKbwwLvjnm_Tf9UR5QJ8a3JKiLt -F0Ykc1AeO-fyiNPUVRnkc3--Gs0bLUpLe0_medGOZ_LLk45GarEzBCGajgF_joz8fsndKtDrEnB0 -z-8iiQ4bTZb_ALjKnnhcdKjoJNhZ-e3AsmadYO7ve2K3ApwOelWWh24iZ-ZSUbnlw-OQMu4RvI9h -9KOTbu4gWokep3O2uT8-cVN-ax1FYRpmexHgIxZy-tmYjDdJTJQv3dMp5UngUs6xmIy5nyIBr51B -YORSQmXRvbdvYeY7jOEQUGfXfS2yYtzLfJ07f8ODQJ24APDKsVEGWVBcBMqp53o9W7cPJ-4vnMLU -mVYCKqVrT2bThRWb38OtaaJuA4A8GboDDe5Q0IZao0v3gqwgfCzJIjQx97AEHzEbLzEBxio_z8a0 -AYLi-_f7kMtgrMsj61gcRVUan5NVqnL7oVwFn8FuqeTRzMMbgJHUHfFzrgLxpRwnscGRzygZf39Q -JqqOLGriWe_IOhXQ7aIp3uyBF-brJnrXcQIp3PF0fbVTGK_VyKDB6J0BjJyjmyL0TA37hDr8usna -TgMtjF1qq9kOrJr2582n8TW-ogpyqm1ft7R18VT9_1JjtnCcTCudW-oJX87jv3UTJdaEkBMhc1Pe -euLti-qSG3Q5QeO5AxM8mP_9YbLHB9YQboRWnbfC9oIFRmVgGAcdbHNFn0hfILBOTIYStQL4 \ No newline at end of file diff --git a/datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.location.props b/datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.location.props deleted file mode 100644 index c30adee4..00000000 --- a/datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.location.props +++ /dev/null @@ -1,8 +0,0 @@ -############################################################ -# Properties Generated by AT&T Certificate Manager -# by root -# on 2022-03-22T12:31:14.170+0000 -# @copyright 2019, AT&T -############################################################ -cadi_latitude=0.0 -cadi_longitude=0.0 diff --git a/datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.p12 b/datarouter-node/src/test/resources/aaf/org.onap.dmaap-dr.p12 deleted file mode 100644 index 4238c868b863ba52a49061a90f8182f34ad9d8a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4217 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 SWgksF*&D)L4b`wnT>1w@Sz^5a diff --git a/datarouter-node/src/test/resources/certs/org.onap.dmaap-dr-node.p12 b/datarouter-node/src/test/resources/certs/org.onap.dmaap-dr-node.p12 new file mode 100644 index 0000000000000000000000000000000000000000..3793a9d45c8b2fe8bc3a156f89e3353af5501851 GIT binary patch literal 4596 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 literal 0 HcmV?d00001 diff --git a/datarouter-node/src/test/resources/certs/truststore.jks b/datarouter-node/src/test/resources/certs/truststore.jks new file mode 100644 index 0000000000000000000000000000000000000000..91547c6062ddb5d9fdf4b3f6ce463b3b67707091 GIT binary patch literal 3234 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 u+iMKT3AsAjR^x}C>Kf0=1qu?I=b0#_r!