From f0af18429aec79a590835103fedd753ee5ea93a9 Mon Sep 17 00:00:00 2001 From: PatrikBuhr Date: Thu, 23 Mar 2023 15:04:00 +0100 Subject: [PATCH] Added support for using oauth token for Kafka in datafile collector OAUTHBEARER is supported as SASL mechanism. This can be done over SSL or plain text. Signed-off-by: PatrikBuhr Issue-ID: NONRTRIC-853 Change-Id: I55760d72f2f8c498bd9d57dbb7a99756843f4606 --- datafilecollector/config/application.yaml | 13 ++- datafilecollector/pom.xml | 2 +- .../collectors => oran}/datafile/MainApp.java | 6 +- .../datafile/commons/FileCollectClient.java | 8 +- .../datafile/commons/FileServerData.java | 4 +- .../datafile/commons/Scheme.java | 11 +-- .../datafile/commons/SecurityUtil.java | 4 +- .../datafile/configuration/AppConfig.java | 80 ++++++++++++---- .../datafile/configuration/CertificateConfig.java | 4 +- .../datafile/configuration/SftpConfig.java | 2 +- .../datafile/configuration/SwaggerConfig.java | 6 +- .../datafile/controllers/StatusController.java | 8 +- .../datafile/datastore/DataStore.java | 4 +- .../datafile/datastore/FileStore.java | 18 ++-- .../datafile/datastore/S3ObjectStore.java | 4 +- .../datafile/exceptions/DatafileTaskException.java | 4 +- .../exceptions/EnvironmentLoaderException.java | 3 +- .../NonRetryableDatafileTaskException.java | 4 +- .../datafile/ftp/FtpesClient.java | 16 ++-- .../datafile/ftp/SftpClient.java | 13 ++- .../datafile/ftp/SftpClientSettings.java | 4 +- .../datafile/http/DfcHttpClient.java | 13 ++- .../datafile/http/DfcHttpsClient.java | 13 ++- .../http/HttpAsyncClientBuilderWrapper.java | 4 +- .../http/HttpsClientConnectionManagerUtil.java | 7 +- .../datafile/model/Counters.java | 4 +- .../datafile/model/FileData.java | 14 +-- .../datafile/model/FilePublishInformation.java | 4 +- .../datafile/model/FileReadyMessage.java | 4 +- .../oran/datafile/oauth2/OAuthBearerTokenJwt.java | 101 +++++++++++++++++++++ ...OAuthKafkaAuthenticateLoginCallbackHandler.java | 93 +++++++++++++++++++ .../org/oran/datafile/oauth2/SecurityContext.java | 83 +++++++++++++++++ .../datafile/service/HttpUtils.java | 6 +- .../datafile/tasks/CollectAndReportFiles.java | 34 +++---- .../datafile/tasks/FileCollector.java | 38 ++++---- .../datafile/tasks/KafkaTopicListener.java | 30 +++--- .../collectors => oran}/datafile/MockDatafile.java | 55 ++++++----- .../datafile/controllers/StatusControllerTest.java | 8 +- .../datafile/ftp/FtpesClientTest.java | 6 +- .../datafile/ftp/SftpClientSettingsTest.java | 6 +- .../datafile/ftp/SftpClientTest.java | 11 ++- .../datafile/http/DfcHttpClientTest.java | 9 +- .../datafile/http/DfcHttpsClientTest.java | 9 +- .../datafile/http/HttpClientResponseHelper.java | 3 +- .../http/HttpsClientConnectionManagerUtilTest.java | 5 +- .../datafile/scheme/SchemeTest.java | 8 +- .../datafile/service/HttpUtilsTest.java | 6 +- .../datafile/tasks/FileCollectorTest.java | 30 +++--- .../datafile/utils/JsonMessage.java | 10 +- .../datafile/utils/LoggingUtils.java | 10 +- datafilecollector/src/test/resources/jwtToken.b64 | 1 + 51 files changed, 586 insertions(+), 257 deletions(-) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/MainApp.java (85%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/commons/FileCollectClient.java (80%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/commons/FileServerData.java (92%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/commons/Scheme.java (89%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/commons/SecurityUtil.java (93%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/configuration/AppConfig.java (56%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/configuration/CertificateConfig.java (90%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/configuration/SftpConfig.java (94%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/configuration/SwaggerConfig.java (88%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/controllers/StatusController.java (94%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/datastore/DataStore.java (92%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/datastore/FileStore.java (88%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/datastore/S3ObjectStore.java (98%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/exceptions/DatafileTaskException.java (90%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/exceptions/EnvironmentLoaderException.java (88%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/exceptions/NonRetryableDatafileTaskException.java (91%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/ftp/FtpesClient.java (94%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/ftp/SftpClient.java (91%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/ftp/SftpClientSettings.java (95%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/http/DfcHttpClient.java (93%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/http/DfcHttpsClient.java (93%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/http/HttpAsyncClientBuilderWrapper.java (95%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/http/HttpsClientConnectionManagerUtil.java (95%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/model/Counters.java (97%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/model/FileData.java (91%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/model/FilePublishInformation.java (92%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/model/FileReadyMessage.java (96%) create mode 100644 datafilecollector/src/main/java/org/oran/datafile/oauth2/OAuthBearerTokenJwt.java create mode 100644 datafilecollector/src/main/java/org/oran/datafile/oauth2/OAuthKafkaAuthenticateLoginCallbackHandler.java create mode 100644 datafilecollector/src/main/java/org/oran/datafile/oauth2/SecurityContext.java rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/service/HttpUtils.java (97%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/tasks/CollectAndReportFiles.java (90%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/tasks/FileCollector.java (84%) rename datafilecollector/src/main/java/org/{onap/dcaegen2/collectors => oran}/datafile/tasks/KafkaTopicListener.java (80%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/MockDatafile.java (86%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/controllers/StatusControllerTest.java (90%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/ftp/FtpesClientTest.java (98%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/ftp/SftpClientSettingsTest.java (93%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/ftp/SftpClientTest.java (96%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/http/DfcHttpClientTest.java (96%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/http/DfcHttpsClientTest.java (96%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/http/HttpClientResponseHelper.java (99%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/http/HttpsClientConnectionManagerUtilTest.java (94%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/scheme/SchemeTest.java (87%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/service/HttpUtilsTest.java (97%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/tasks/FileCollectorTest.java (94%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/utils/JsonMessage.java (97%) rename datafilecollector/src/test/java/org/{onap/dcaegen2/collectors => oran}/datafile/utils/LoggingUtils.java (90%) create mode 100644 datafilecollector/src/test/resources/jwtToken.b64 diff --git a/datafilecollector/config/application.yaml b/datafilecollector/config/application.yaml index 7861618..9875abb 100644 --- a/datafilecollector/config/application.yaml +++ b/datafilecollector/config/application.yaml @@ -21,7 +21,7 @@ logging: org.springframework: WARN org.springframework.data: WARN org.springframework.web.reactive.function.client.ExchangeFunctions: WARN - org.onap.dcaegen2.collectors.datafile: INFO + org.oran.datafile: INFO file: name: /var/log/ONAP/application.log @@ -31,6 +31,8 @@ app: number-of-worker-treads: 200 # KAFKA boostrap servers. # several redundant boostrap servers can be specified, separated by a comma ','. + # If the file name is empty, no authorization token is used + auth-token-file: kafka: bootstrap-servers: localhost:9092 # output topic @@ -38,6 +40,15 @@ app: client-id: datafile-1 # input topic file-ready-event-topic: file-ready + # Configues if oath2 tokens shall be used. If set to true, auth-token-file must also be configured + use-oath-token: false + ssl: + key-store-type: PEM + key-store-location: + # key password is needed if the private key is encrypted + key-store-password: + trust-store-type: PEM + trust-store-location: sftp: known-hosts-file-path: strict-host-key-checking: false diff --git a/datafilecollector/pom.xml b/datafilecollector/pom.xml index 6c869bd..4dc55a7 100644 --- a/datafilecollector/pom.xml +++ b/datafilecollector/pom.xml @@ -157,7 +157,7 @@ spring-boot-maven-plugin ${project.artifactId} - org.onap.dcaegen2.collectors.datafile.MainApp + org.oran.datafile.MainApp diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/MainApp.java b/datafilecollector/src/main/java/org/oran/datafile/MainApp.java similarity index 85% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/MainApp.java rename to datafilecollector/src/main/java/org/oran/datafile/MainApp.java index 851db32..51e4c14 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/MainApp.java +++ b/datafilecollector/src/main/java/org/oran/datafile/MainApp.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START====================================================================== + * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved. - * Copyright (C) 2018-2021 Nordix Foundation. 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. @@ -17,7 +17,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile; +package org.oran.datafile; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -29,8 +29,6 @@ import org.springframework.scheduling.concurrent.ConcurrentTaskScheduler; /** * The main app of DFC. * - * @author Przemysław Wąsala on 3/23/18 - * @author Henrik Andersson */ @SpringBootApplication() @EnableScheduling diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/commons/FileCollectClient.java b/datafilecollector/src/main/java/org/oran/datafile/commons/FileCollectClient.java similarity index 80% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/commons/FileCollectClient.java rename to datafilecollector/src/main/java/org/oran/datafile/commons/FileCollectClient.java index 517e382..752fc65 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/commons/FileCollectClient.java +++ b/datafilecollector/src/main/java/org/oran/datafile/commons/FileCollectClient.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. 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 @@ -14,16 +14,14 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.commons; +package org.oran.datafile.commons; import java.nio.file.Path; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.exceptions.DatafileTaskException; /** * A closeable file client. - * - * @author Henrik Andersson */ public interface FileCollectClient extends AutoCloseable { public void collectFile(String remoteFile, Path localFile) throws DatafileTaskException; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/commons/FileServerData.java b/datafilecollector/src/main/java/org/oran/datafile/commons/FileServerData.java similarity index 92% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/commons/FileServerData.java rename to datafilecollector/src/main/java/org/oran/datafile/commons/FileServerData.java index 5896fe6..14ddd43 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/commons/FileServerData.java +++ b/datafilecollector/src/main/java/org/oran/datafile/commons/FileServerData.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. * Modifications copyright (C) 2021 Nokia. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except @@ -15,7 +15,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.commons; +package org.oran.datafile.commons; import java.util.ArrayList; import java.util.List; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/commons/Scheme.java b/datafilecollector/src/main/java/org/oran/datafile/commons/Scheme.java similarity index 89% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/commons/Scheme.java rename to datafilecollector/src/main/java/org/oran/datafile/commons/Scheme.java index 613fa39..2dcc75d 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/commons/Scheme.java +++ b/datafilecollector/src/main/java/org/oran/datafile/commons/Scheme.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2019-2023 Nordix Foundation. All rights reserved. * Copyright (C) 2020-2021 Nokia. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,15 +17,13 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.collectors.datafile.commons; +package org.oran.datafile.commons; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.exceptions.DatafileTaskException; /** * Enum specifying the schemes that DFC support for downloading files. * - * @author Henrik Andersson - * */ public enum Scheme { FTPES, SFTP, HTTP, HTTPS; @@ -39,7 +37,8 @@ public enum Scheme { * * @param schemeString the string to convert to Scheme. * @return The corresponding Scheme - * @throws DatafileTaskException if the value of the string doesn't match any defined scheme. + * @throws DatafileTaskException if the value of the string doesn't match any + * defined scheme. */ public static Scheme getSchemeFromString(String schemeString) throws DatafileTaskException { Scheme result; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/commons/SecurityUtil.java b/datafilecollector/src/main/java/org/oran/datafile/commons/SecurityUtil.java similarity index 93% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/commons/SecurityUtil.java rename to datafilecollector/src/main/java/org/oran/datafile/commons/SecurityUtil.java index 9d6b7f9..856274a 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/commons/SecurityUtil.java +++ b/datafilecollector/src/main/java/org/oran/datafile/commons/SecurityUtil.java @@ -13,7 +13,7 @@ * the License. * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.commons; +package org.oran.datafile.commons; import java.io.IOException; import java.nio.file.Files; @@ -24,8 +24,6 @@ import org.slf4j.LoggerFactory; /** * Utility class containing functions used for certificates configuration - * - * @author Krzysztof Gajewski */ public final class SecurityUtil { private SecurityUtil() { diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/configuration/AppConfig.java b/datafilecollector/src/main/java/org/oran/datafile/configuration/AppConfig.java similarity index 56% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/configuration/AppConfig.java rename to datafilecollector/src/main/java/org/oran/datafile/configuration/AppConfig.java index 37faf70..6689f5d 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/configuration/AppConfig.java +++ b/datafilecollector/src/main/java/org/oran/datafile/configuration/AppConfig.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START====================================================================== * Copyright (C) 2018, 2020-2022 Nokia. All rights reserved. - * Copyright (C) 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. 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 @@ -15,51 +15,54 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.configuration; +package org.oran.datafile.configuration; -import java.util.Properties; +import java.util.Map; import lombok.Getter; +import org.apache.kafka.clients.CommonClientConfigs; +import org.apache.kafka.common.config.SaslConfigs; +import org.apache.kafka.common.config.SslConfigs; +import org.apache.kafka.common.security.auth.SecurityProtocol; +import org.oran.datafile.oauth2.OAuthKafkaAuthenticateLoginCallbackHandler; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.stereotype.Component; /** * Holds all configuration for the DFC. - * - * @author Przemysław Wąsala on - * 3/23/18 - * @author Henrik Andersson */ @Component @EnableConfigurationProperties public class AppConfig { - @Value("#{systemEnvironment}") - Properties systemEnvironment; - @Value("${app.kafka.bootstrap-servers:}") private String kafkaBootStrapServers; @Value("${app.kafka.collected-file-topic:}") - public String collectedFileTopic; + @Getter + private String collectedFileTopic; @Value("${app.kafka.file-ready-event-topic:}") - public String fileReadyEventTopic; + @Getter + private String inputTopic; @Value("${app.kafka.client-id:undefined}") - public String kafkaClientId; + @Getter + private String kafkaClientId; - @Value("${app.collected-files-path:}") - public String collectedFilesPath; + @Value("${app.collected-files-path}") + @Getter + private String collectedFilesPath; @Value("${app.sftp.strict-host-key-checking:false}") - public boolean strictHostKeyChecking; + private boolean strictHostKeyChecking; @Value("${app.sftp.known-hosts-file-path:}") - public String knownHostsFilePath; + @Getter + private String knownHostsFilePath; @Value("${app.ssl.key-store-password-file}") private String clientKeyStorePassword = ""; @@ -96,6 +99,24 @@ public class AppConfig { @Getter private int noOfWorkerThreads; + @Value("${app.kafka.ssl.key-store-location}") + private String kafkaKeyStoreLocation; + + @Value("${app.kafka.ssl.key-store-type}") + private String kafkaKeyStoreType; + + @Value("${app.kafka.ssl.key-store-password}") + private String kafkaKeyStorePassword; + + @Value("${app.kafka.ssl.trust-store-type}") + private String kafkaTrustStoreType; + + @Value("${app.kafka.ssl.trust-store-location}") + private String kafkTrustStoreLocation; + + @Value("${app.kafka.use-oath-token}") + private boolean useOathToken; + public String getS3LocksBucket() { return s3LocksBucket.isEmpty() ? s3Bucket : s3LocksBucket; } @@ -124,4 +145,29 @@ public class AppConfig { .build(); } + public void addKafkaSecurityProps(Map props) { + + if (useOathToken) { + props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, SecurityProtocol.SASL_PLAINTEXT.name); + props.put(SaslConfigs.SASL_MECHANISM, "OAUTHBEARER"); + props.put(SaslConfigs.SASL_LOGIN_CALLBACK_HANDLER_CLASS, + OAuthKafkaAuthenticateLoginCallbackHandler.class.getName()); + props.put(SaslConfigs.SASL_JAAS_CONFIG, + "org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required unsecuredLoginStringClaim_sub=\"alice\"; "); + } + if (!kafkaKeyStoreLocation.isEmpty()) { + props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, SecurityProtocol.SASL_SSL.name); + // SSL + props.put(SslConfigs.SSL_KEYSTORE_TYPE_CONFIG, kafkaKeyStoreType); + props.put(SslConfigs.SSL_KEYSTORE_LOCATION_CONFIG, kafkaKeyStoreLocation); + if (!kafkaKeyStorePassword.isEmpty()) { + props.put(SslConfigs.SSL_KEY_PASSWORD_CONFIG, kafkaKeyStorePassword); + } + if (!kafkTrustStoreLocation.isEmpty()) { + props.put(SslConfigs.SSL_TRUSTSTORE_TYPE_CONFIG, kafkaTrustStoreType); + props.put(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG, kafkTrustStoreLocation); + } + } + } + } diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/configuration/CertificateConfig.java b/datafilecollector/src/main/java/org/oran/datafile/configuration/CertificateConfig.java similarity index 90% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/configuration/CertificateConfig.java rename to datafilecollector/src/main/java/org/oran/datafile/configuration/CertificateConfig.java index 938d322..889eb98 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/configuration/CertificateConfig.java +++ b/datafilecollector/src/main/java/org/oran/datafile/configuration/CertificateConfig.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2018-2022 Nokia. All rights reserved. - * Copyright (C) 2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2019-2023 Nordix Foundation. 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. @@ -19,7 +19,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.collectors.datafile.configuration; +package org.oran.datafile.configuration; import lombok.Builder; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/configuration/SftpConfig.java b/datafilecollector/src/main/java/org/oran/datafile/configuration/SftpConfig.java similarity index 94% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/configuration/SftpConfig.java rename to datafilecollector/src/main/java/org/oran/datafile/configuration/SftpConfig.java index 182a59e..559e64e 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/configuration/SftpConfig.java +++ b/datafilecollector/src/main/java/org/oran/datafile/configuration/SftpConfig.java @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.collectors.datafile.configuration; +package org.oran.datafile.configuration; import lombok.Builder; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/configuration/SwaggerConfig.java b/datafilecollector/src/main/java/org/oran/datafile/configuration/SwaggerConfig.java similarity index 88% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/configuration/SwaggerConfig.java rename to datafilecollector/src/main/java/org/oran/datafile/configuration/SwaggerConfig.java index b7dc521..2f26740 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/configuration/SwaggerConfig.java +++ b/datafilecollector/src/main/java/org/oran/datafile/configuration/SwaggerConfig.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START====================================================================== * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved. - * Copyright (C) 2018-2021 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. 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. @@ -17,7 +17,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.configuration; +package org.oran.datafile.configuration; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.info.Info; @@ -29,7 +29,7 @@ import io.swagger.v3.oas.annotations.info.License; version = SwaggerConfig.VERSION, description = SwaggerConfig.DESCRIPTION, license = @License( - name = "Copyright (C) 2020 Nordix Foundation. Licensed under the Apache License.", + name = "Copyright (C) 2020-2023 NordixFoundation. Licensed under the Apache License.", url = "http://www.apache.org/licenses/LICENSE-2.0"))) public class SwaggerConfig { diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/controllers/StatusController.java b/datafilecollector/src/main/java/org/oran/datafile/controllers/StatusController.java similarity index 94% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/controllers/StatusController.java rename to datafilecollector/src/main/java/org/oran/datafile/controllers/StatusController.java index f4baeaf..78e8ca6 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/controllers/StatusController.java +++ b/datafilecollector/src/main/java/org/oran/datafile/controllers/StatusController.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START====================================================================== * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved. - * Copyright (C) 2018-2021 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. 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 @@ -15,15 +15,15 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.controllers; +package org.oran.datafile.controllers; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; -import org.onap.dcaegen2.collectors.datafile.model.Counters; -import org.onap.dcaegen2.collectors.datafile.tasks.CollectAndReportFiles; +import org.oran.datafile.model.Counters; +import org.oran.datafile.tasks.CollectAndReportFiles; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/datastore/DataStore.java b/datafilecollector/src/main/java/org/oran/datafile/datastore/DataStore.java similarity index 92% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/datastore/DataStore.java rename to datafilecollector/src/main/java/org/oran/datafile/datastore/DataStore.java index af0512e..44c276f 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/datastore/DataStore.java +++ b/datafilecollector/src/main/java/org/oran/datafile/datastore/DataStore.java @@ -18,11 +18,11 @@ * ========================LICENSE_END=================================== */ -package org.onap.dcaegen2.collectors.datafile.datastore; +package org.oran.datafile.datastore; import java.nio.file.Path; -import org.onap.dcaegen2.collectors.datafile.configuration.AppConfig; +import org.oran.datafile.configuration.AppConfig; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/datastore/FileStore.java b/datafilecollector/src/main/java/org/oran/datafile/datastore/FileStore.java similarity index 88% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/datastore/FileStore.java rename to datafilecollector/src/main/java/org/oran/datafile/datastore/FileStore.java index 7f497be..a8408a8 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/datastore/FileStore.java +++ b/datafilecollector/src/main/java/org/oran/datafile/datastore/FileStore.java @@ -18,7 +18,7 @@ * ========================LICENSE_END=================================== */ -package org.onap.dcaegen2.collectors.datafile.datastore; +package org.oran.datafile.datastore; import java.io.File; import java.io.IOException; @@ -29,7 +29,7 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; -import org.onap.dcaegen2.collectors.datafile.configuration.AppConfig; +import org.oran.datafile.configuration.AppConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.FileSystemUtils; @@ -40,15 +40,15 @@ import reactor.core.publisher.Mono; public class FileStore implements DataStore { private static final Logger logger = LoggerFactory.getLogger(java.lang.invoke.MethodHandles.lookup().lookupClass()); - AppConfig applicationConfig; + AppConfig appConfig; public FileStore(AppConfig applicationConfig) { - this.applicationConfig = applicationConfig; + this.appConfig = applicationConfig; } @Override public Flux listObjects(Bucket bucket, String prefix) { - Path root = Path.of(applicationConfig.collectedFilesPath, prefix); + Path root = Path.of(appConfig.getCollectedFilesPath(), prefix); if (!root.toFile().exists()) { root = root.getParent(); } @@ -76,7 +76,7 @@ public class FileStore implements DataStore { private String externalName(Path path) { String fullName = path.toString(); - String externalName = fullName.substring(applicationConfig.collectedFilesPath.length()); + String externalName = fullName.substring(appConfig.getCollectedFilesPath().length()); if (externalName.startsWith("/")) { externalName = externalName.substring(1); } @@ -139,7 +139,7 @@ public class FileStore implements DataStore { } private Path path(String name) { - return Path.of(applicationConfig.collectedFilesPath, name); + return Path.of(appConfig.getCollectedFilesPath(), name); } public Mono fileExists(Bucket bucket, String key) { @@ -149,9 +149,9 @@ public class FileStore implements DataStore { @Override public Mono deleteBucket(Bucket bucket) { try { - FileSystemUtils.deleteRecursively(Path.of(applicationConfig.collectedFilesPath)); + FileSystemUtils.deleteRecursively(Path.of(appConfig.getCollectedFilesPath())); } catch (IOException e) { - logger.debug("Could not delete directory: {}, reason; {}", applicationConfig.collectedFilesPath, + logger.debug("Could not delete directory: {}, reason; {}", appConfig.getCollectedFilesPath(), e.getMessage()); } return Mono.just("OK"); diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/datastore/S3ObjectStore.java b/datafilecollector/src/main/java/org/oran/datafile/datastore/S3ObjectStore.java similarity index 98% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/datastore/S3ObjectStore.java rename to datafilecollector/src/main/java/org/oran/datafile/datastore/S3ObjectStore.java index f93bbaf..2581735 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/datastore/S3ObjectStore.java +++ b/datafilecollector/src/main/java/org/oran/datafile/datastore/S3ObjectStore.java @@ -18,7 +18,7 @@ * ========================LICENSE_END=================================== */ -package org.onap.dcaegen2.collectors.datafile.datastore; +package org.oran.datafile.datastore; import java.net.URI; import java.nio.file.Path; @@ -26,7 +26,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.concurrent.CompletableFuture; -import org.onap.dcaegen2.collectors.datafile.configuration.AppConfig; +import org.oran.datafile.configuration.AppConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/exceptions/DatafileTaskException.java b/datafilecollector/src/main/java/org/oran/datafile/exceptions/DatafileTaskException.java similarity index 90% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/exceptions/DatafileTaskException.java rename to datafilecollector/src/main/java/org/oran/datafile/exceptions/DatafileTaskException.java index 6aa7615..0ed8b17 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/exceptions/DatafileTaskException.java +++ b/datafilecollector/src/main/java/org/oran/datafile/exceptions/DatafileTaskException.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. 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. @@ -16,7 +16,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.exceptions; +package org.oran.datafile.exceptions; public class DatafileTaskException extends Exception { diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/exceptions/EnvironmentLoaderException.java b/datafilecollector/src/main/java/org/oran/datafile/exceptions/EnvironmentLoaderException.java similarity index 88% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/exceptions/EnvironmentLoaderException.java rename to datafilecollector/src/main/java/org/oran/datafile/exceptions/EnvironmentLoaderException.java index d49a051..61d54b1 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/exceptions/EnvironmentLoaderException.java +++ b/datafilecollector/src/main/java/org/oran/datafile/exceptions/EnvironmentLoaderException.java @@ -16,12 +16,11 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.collectors.datafile.exceptions; +package org.oran.datafile.exceptions; /** * Exception thrown when there is a problem with the Consul environment. * - * @author Przemysław Wąsala on 9/19/18 */ public class EnvironmentLoaderException extends Exception { diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/exceptions/NonRetryableDatafileTaskException.java b/datafilecollector/src/main/java/org/oran/datafile/exceptions/NonRetryableDatafileTaskException.java similarity index 91% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/exceptions/NonRetryableDatafileTaskException.java rename to datafilecollector/src/main/java/org/oran/datafile/exceptions/NonRetryableDatafileTaskException.java index 5c2a0d2..276c826 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/exceptions/NonRetryableDatafileTaskException.java +++ b/datafilecollector/src/main/java/org/oran/datafile/exceptions/NonRetryableDatafileTaskException.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2019-2023 Nordix Foundation. 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. @@ -16,7 +16,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.exceptions; +package org.oran.datafile.exceptions; public class NonRetryableDatafileTaskException extends DatafileTaskException { diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/ftp/FtpesClient.java b/datafilecollector/src/main/java/org/oran/datafile/ftp/FtpesClient.java similarity index 94% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/ftp/FtpesClient.java rename to datafilecollector/src/main/java/org/oran/datafile/ftp/FtpesClient.java index aef5033..06313e5 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/ftp/FtpesClient.java +++ b/datafilecollector/src/main/java/org/oran/datafile/ftp/FtpesClient.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. * Copyright (C) 2020-2021 Nokia. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except @@ -15,7 +15,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.ftp; +package org.oran.datafile.ftp; import java.io.File; import java.io.FileOutputStream; @@ -38,19 +38,17 @@ import javax.net.ssl.TrustManagerFactory; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPReply; import org.apache.commons.net.ftp.FTPSClient; -import org.onap.dcaegen2.collectors.datafile.commons.FileCollectClient; -import org.onap.dcaegen2.collectors.datafile.commons.FileServerData; -import org.onap.dcaegen2.collectors.datafile.commons.SecurityUtil; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.exceptions.NonRetryableDatafileTaskException; +import org.oran.datafile.commons.FileCollectClient; +import org.oran.datafile.commons.FileServerData; +import org.oran.datafile.commons.SecurityUtil; +import org.oran.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.exceptions.NonRetryableDatafileTaskException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.FileSystemResource; /** * Gets file from PNF with FTPS protocol. - * - * @author Martin Yan */ public class FtpesClient implements FileCollectClient { private static final Logger logger = LoggerFactory.getLogger(FtpesClient.class); diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/ftp/SftpClient.java b/datafilecollector/src/main/java/org/oran/datafile/ftp/SftpClient.java similarity index 91% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/ftp/SftpClient.java rename to datafilecollector/src/main/java/org/oran/datafile/ftp/SftpClient.java index 0c6db35..a7a74a0 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/ftp/SftpClient.java +++ b/datafilecollector/src/main/java/org/oran/datafile/ftp/SftpClient.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2018-2019 Nordix Foundation, 2020 Nokia. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation, 2020 Nokia. 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 @@ -14,7 +14,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.ftp; +package org.oran.datafile.ftp; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; @@ -25,17 +25,16 @@ import com.jcraft.jsch.SftpException; import java.nio.file.Path; -import org.onap.dcaegen2.collectors.datafile.commons.FileCollectClient; -import org.onap.dcaegen2.collectors.datafile.commons.FileServerData; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.exceptions.NonRetryableDatafileTaskException; +import org.oran.datafile.commons.FileCollectClient; +import org.oran.datafile.commons.FileServerData; +import org.oran.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.exceptions.NonRetryableDatafileTaskException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Gets file from xNF with SFTP protocol. * - * @author Martin Yan */ public class SftpClient implements FileCollectClient { diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/ftp/SftpClientSettings.java b/datafilecollector/src/main/java/org/oran/datafile/ftp/SftpClientSettings.java similarity index 95% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/ftp/SftpClientSettings.java rename to datafilecollector/src/main/java/org/oran/datafile/ftp/SftpClientSettings.java index 23e254b..f40167b 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/ftp/SftpClientSettings.java +++ b/datafilecollector/src/main/java/org/oran/datafile/ftp/SftpClientSettings.java @@ -14,11 +14,11 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.ftp; +package org.oran.datafile.ftp; import java.io.File; -import org.onap.dcaegen2.collectors.datafile.configuration.SftpConfig; +import org.oran.datafile.configuration.SftpConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/http/DfcHttpClient.java b/datafilecollector/src/main/java/org/oran/datafile/http/DfcHttpClient.java similarity index 93% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/http/DfcHttpClient.java rename to datafilecollector/src/main/java/org/oran/datafile/http/DfcHttpClient.java index eab0082..0b44dc9 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/http/DfcHttpClient.java +++ b/datafilecollector/src/main/java/org/oran/datafile/http/DfcHttpClient.java @@ -13,7 +13,7 @@ * the License. * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.http; +package org.oran.datafile.http; import java.io.IOException; import java.io.InputStream; @@ -23,11 +23,11 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; -import org.onap.dcaegen2.collectors.datafile.commons.FileCollectClient; -import org.onap.dcaegen2.collectors.datafile.commons.FileServerData; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.exceptions.NonRetryableDatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.service.HttpUtils; +import org.oran.datafile.commons.FileCollectClient; +import org.oran.datafile.commons.FileServerData; +import org.oran.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.exceptions.NonRetryableDatafileTaskException; +import org.oran.datafile.service.HttpUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,7 +41,6 @@ import reactor.netty.resources.ConnectionProvider; /** * Gets file from PNF with HTTP protocol. * - * @author Krzysztof Gajewski */ public class DfcHttpClient implements FileCollectClient { diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/http/DfcHttpsClient.java b/datafilecollector/src/main/java/org/oran/datafile/http/DfcHttpsClient.java similarity index 93% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/http/DfcHttpsClient.java rename to datafilecollector/src/main/java/org/oran/datafile/http/DfcHttpsClient.java index 5c652cb..fde36d2 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/http/DfcHttpsClient.java +++ b/datafilecollector/src/main/java/org/oran/datafile/http/DfcHttpsClient.java @@ -13,7 +13,7 @@ * the License. * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.http; +package org.oran.datafile.http; import java.io.IOException; import java.io.InputStream; @@ -37,18 +37,17 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.util.EntityUtils; -import org.onap.dcaegen2.collectors.datafile.commons.FileCollectClient; -import org.onap.dcaegen2.collectors.datafile.commons.FileServerData; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.exceptions.NonRetryableDatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.service.HttpUtils; +import org.oran.datafile.commons.FileCollectClient; +import org.oran.datafile.commons.FileServerData; +import org.oran.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.exceptions.NonRetryableDatafileTaskException; +import org.oran.datafile.service.HttpUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Gets file from PNF with HTTPS protocol. * - * @author Krzysztof Gajewski */ public class DfcHttpsClient implements FileCollectClient { diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/http/HttpAsyncClientBuilderWrapper.java b/datafilecollector/src/main/java/org/oran/datafile/http/HttpAsyncClientBuilderWrapper.java similarity index 95% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/http/HttpAsyncClientBuilderWrapper.java rename to datafilecollector/src/main/java/org/oran/datafile/http/HttpAsyncClientBuilderWrapper.java index b003727..92877a5 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/http/HttpAsyncClientBuilderWrapper.java +++ b/datafilecollector/src/main/java/org/oran/datafile/http/HttpAsyncClientBuilderWrapper.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2023 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.collectors.datafile.http; +package org.oran.datafile.http; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/http/HttpsClientConnectionManagerUtil.java b/datafilecollector/src/main/java/org/oran/datafile/http/HttpsClientConnectionManagerUtil.java similarity index 95% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/http/HttpsClientConnectionManagerUtil.java rename to datafilecollector/src/main/java/org/oran/datafile/http/HttpsClientConnectionManagerUtil.java index 7769e53..768e900 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/http/HttpsClientConnectionManagerUtil.java +++ b/datafilecollector/src/main/java/org/oran/datafile/http/HttpsClientConnectionManagerUtil.java @@ -13,7 +13,7 @@ * the License. * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.http; +package org.oran.datafile.http; import java.io.File; import java.io.IOException; @@ -37,8 +37,8 @@ import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.ssl.SSLContexts; -import org.onap.dcaegen2.collectors.datafile.commons.SecurityUtil; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.commons.SecurityUtil; +import org.oran.datafile.exceptions.DatafileTaskException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.FileSystemResource; @@ -46,7 +46,6 @@ import org.springframework.core.io.FileSystemResource; /** * Utility class supplying connection manager for HTTPS protocol. * - * @author Krzysztof Gajewski */ public class HttpsClientConnectionManagerUtil { diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/model/Counters.java b/datafilecollector/src/main/java/org/oran/datafile/model/Counters.java similarity index 97% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/model/Counters.java rename to datafilecollector/src/main/java/org/oran/datafile/model/Counters.java index 2323d0e..843a0e6 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/model/Counters.java +++ b/datafilecollector/src/main/java/org/oran/datafile/model/Counters.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2023 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.collectors.datafile.model; +package org.oran.datafile.model; import java.time.Instant; import java.util.concurrent.atomic.AtomicInteger; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileData.java b/datafilecollector/src/main/java/org/oran/datafile/model/FileData.java similarity index 91% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileData.java rename to datafilecollector/src/main/java/org/oran/datafile/model/FileData.java index 3de5817..c2ef76c 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileData.java +++ b/datafilecollector/src/main/java/org/oran/datafile/model/FileData.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2023 Nordix Foundation. * Copyright (C) 2021 Nokia. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,7 +19,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.collectors.datafile.model; +package org.oran.datafile.model; import java.net.URI; import java.nio.file.Path; @@ -33,10 +33,10 @@ import lombok.Builder; import org.apache.hc.core5.http.NameValuePair; import org.apache.hc.core5.net.URIBuilder; -import org.onap.dcaegen2.collectors.datafile.commons.FileServerData; -import org.onap.dcaegen2.collectors.datafile.commons.FileServerData.FileServerDataBuilder; -import org.onap.dcaegen2.collectors.datafile.commons.Scheme; -import org.onap.dcaegen2.collectors.datafile.configuration.AppConfig; +import org.oran.datafile.commons.FileServerData; +import org.oran.datafile.commons.FileServerData.FileServerDataBuilder; +import org.oran.datafile.commons.Scheme; +import org.oran.datafile.configuration.AppConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -101,7 +101,7 @@ public class FileData { * @return the path to the locally stored file. */ public Path getLocalFilePath(AppConfig config) { - return Paths.get(config.collectedFilesPath, this.messageMetaData.sourceName, fileInfo.name); + return Paths.get(config.getCollectedFilesPath(), this.messageMetaData.sourceName, fileInfo.name); } /** diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FilePublishInformation.java b/datafilecollector/src/main/java/org/oran/datafile/model/FilePublishInformation.java similarity index 92% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FilePublishInformation.java rename to datafilecollector/src/main/java/org/oran/datafile/model/FilePublishInformation.java index 52e6413..e3f3b11 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FilePublishInformation.java +++ b/datafilecollector/src/main/java/org/oran/datafile/model/FilePublishInformation.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2018 NOKIA Intellectual Property, 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018 NOKIA Intellectual Property, 2018-2023 Nordix Foundation. 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 @@ -14,7 +14,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.model; +package org.oran.datafile.model; import lombok.Builder; import lombok.EqualsAndHashCode; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileReadyMessage.java b/datafilecollector/src/main/java/org/oran/datafile/model/FileReadyMessage.java similarity index 96% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileReadyMessage.java rename to datafilecollector/src/main/java/org/oran/datafile/model/FileReadyMessage.java index 9ee461e..05e332c 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/model/FileReadyMessage.java +++ b/datafilecollector/src/main/java/org/oran/datafile/model/FileReadyMessage.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2023 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.collectors.datafile.model; +package org.oran.datafile.model; import java.util.List; diff --git a/datafilecollector/src/main/java/org/oran/datafile/oauth2/OAuthBearerTokenJwt.java b/datafilecollector/src/main/java/org/oran/datafile/oauth2/OAuthBearerTokenJwt.java new file mode 100644 index 0000000..f6da196 --- /dev/null +++ b/datafilecollector/src/main/java/org/oran/datafile/oauth2/OAuthBearerTokenJwt.java @@ -0,0 +1,101 @@ +// ============LICENSE_START=============================================== +// Copyright (C) 2023 Nordix Foundation. 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================================================= +// + +package org.oran.datafile.oauth2; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; + +import java.util.Base64; +import java.util.HashSet; +import java.util.Set; + +import lombok.ToString; + +import org.apache.kafka.common.security.oauthbearer.OAuthBearerToken; +import org.oran.datafile.exceptions.DatafileTaskException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class OAuthBearerTokenJwt implements OAuthBearerToken { + private static final Logger logger = LoggerFactory.getLogger(OAuthBearerTokenJwt.class); + private static final com.google.gson.Gson gson = new com.google.gson.GsonBuilder().disableHtmlEscaping().create(); + + private final String jwtTokenRaw; + private final JwtTokenBody tokenBody; + + @ToString + private static class JwtTokenBody { + String sub = ""; // principalName + long exp = 0; // expirationTime + long iat = 0; // startTime + String scope = ""; + } + + public static OAuthBearerTokenJwt create(String tokenRaw) + throws DatafileTaskException, JsonMappingException, JsonProcessingException { + String[] chunks = tokenRaw.split("\\."); + Base64.Decoder decoder = Base64.getUrlDecoder(); + if (chunks.length < 2) { + throw new DatafileTaskException("Could not parse JWT token: " + tokenRaw); + + } + String payloadStr = new String(decoder.decode(chunks[1])); + JwtTokenBody token = gson.fromJson(payloadStr, JwtTokenBody.class); + logger.error("Token: {}", token); + return new OAuthBearerTokenJwt(token, tokenRaw); + } + + private OAuthBearerTokenJwt(JwtTokenBody jwtTokenBody, String accessToken) { + super(); + this.jwtTokenRaw = accessToken; + this.tokenBody = jwtTokenBody; + } + + @Override + public String value() { + return jwtTokenRaw; + } + + @Override + public Set scope() { + Set res = new HashSet<>(); + if (!this.tokenBody.scope.isEmpty()) { + res.add(this.tokenBody.scope); + } + return res; + } + + @Override + public long lifetimeMs() { + if (this.tokenBody.exp == 0) { + return Long.MAX_VALUE; + } + return this.tokenBody.exp * 1000; + } + + @Override + public String principalName() { + return this.tokenBody.sub; + } + + @Override + public Long startTimeMs() { + return this.tokenBody.iat; + } + +} diff --git a/datafilecollector/src/main/java/org/oran/datafile/oauth2/OAuthKafkaAuthenticateLoginCallbackHandler.java b/datafilecollector/src/main/java/org/oran/datafile/oauth2/OAuthKafkaAuthenticateLoginCallbackHandler.java new file mode 100644 index 0000000..54911dc --- /dev/null +++ b/datafilecollector/src/main/java/org/oran/datafile/oauth2/OAuthKafkaAuthenticateLoginCallbackHandler.java @@ -0,0 +1,93 @@ +// ============LICENSE_START=============================================== +// Copyright (C) 2023 Nordix Foundation. 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================================================= +// + +package org.oran.datafile.oauth2; + +import java.io.IOException; +import java.util.*; + +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.UnsupportedCallbackException; +import javax.security.auth.login.AppConfigurationEntry; + +import org.apache.kafka.common.security.auth.AuthenticateCallbackHandler; +import org.apache.kafka.common.security.auth.SaslExtensions; +import org.apache.kafka.common.security.auth.SaslExtensionsCallback; +import org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule; +import org.apache.kafka.common.security.oauthbearer.OAuthBearerTokenCallback; +import org.oran.datafile.exceptions.DatafileTaskException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class OAuthKafkaAuthenticateLoginCallbackHandler implements AuthenticateCallbackHandler { + private final Logger logger = LoggerFactory.getLogger(OAuthKafkaAuthenticateLoginCallbackHandler.class); + + private boolean isConfigured = false; + + @Override + public void configure(Map map, String saslMechanism, List jaasConfigEntries) { + + if (!OAuthBearerLoginModule.OAUTHBEARER_MECHANISM.equals(saslMechanism)) + throw new IllegalArgumentException(String.format("Unexpected SASL mechanism: %s", saslMechanism)); + if (Objects.requireNonNull(jaasConfigEntries).size() != 1 || jaasConfigEntries.get(0) == null) + throw new IllegalArgumentException(String.format( + "Must supply exactly 1 non-null JAAS mechanism configuration (size was %d)", jaasConfigEntries.size())); + isConfigured = true; + } + + @Override + public void close() { + } + + @Override + public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { + + if (!this.isConfigured) + throw new IllegalStateException("Callback handler not configured"); + for (Callback callback : callbacks) { + logger.debug("callback " + callback.toString()); + if (callback instanceof OAuthBearerTokenCallback) { + handleCallback((OAuthBearerTokenCallback) callback); + } else if (callback instanceof SaslExtensionsCallback) { + handleCallback((SaslExtensionsCallback) callback); + } else { + logger.error("Unsupported callback: {}", callback); + throw new UnsupportedCallbackException(callback); + } + } + } + + private void handleCallback(SaslExtensionsCallback callback) { + callback.extensions(SaslExtensions.empty()); + } + + private void handleCallback(OAuthBearerTokenCallback callback) { + try { + if (callback.token() != null) { + throw new DatafileTaskException("Callback had a token already"); + } + + String accessToken = SecurityContext.getInstance().getBearerAuthToken(); + OAuthBearerTokenJwt token = OAuthBearerTokenJwt.create(accessToken); + + callback.token(token); + } catch (Exception e) { + logger.error("Could not handle login callback: {}", e.getMessage()); + } + } + +} diff --git a/datafilecollector/src/main/java/org/oran/datafile/oauth2/SecurityContext.java b/datafilecollector/src/main/java/org/oran/datafile/oauth2/SecurityContext.java new file mode 100644 index 0000000..578c111 --- /dev/null +++ b/datafilecollector/src/main/java/org/oran/datafile/oauth2/SecurityContext.java @@ -0,0 +1,83 @@ +/*- + * ========================LICENSE_START================================= + * O-RAN-SC + * %% + * Copyright (C) 2023 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. + * ========================LICENSE_END=================================== + */ + +package org.oran.datafile.oauth2; + +import java.lang.invoke.MethodHandles; +import java.nio.file.Files; +import java.nio.file.Path; + +import lombok.Getter; +import lombok.Setter; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.stereotype.Component; + +@EnableConfigurationProperties +@ConfigurationProperties() +@Component +public class SecurityContext { + + private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + + private long tokenTimestamp = 0; + + private String authToken = ""; + + @Getter + private static SecurityContext instance; + + @Setter + private Path authTokenFilePath; + + public SecurityContext(@Value("${app.auth-token-file:}") String authTokenFilename) { + instance = this; + if (!authTokenFilename.isEmpty()) { + this.authTokenFilePath = Path.of(authTokenFilename); + } + } + + public boolean isConfigured() { + return authTokenFilePath != null; + } + + public synchronized String getBearerAuthToken() { + if (!isConfigured()) { + logger.warn("No configuration for auth token"); + return ""; + } + try { + long lastModified = authTokenFilePath.toFile().lastModified(); + if (tokenTimestamp == 0 || lastModified != this.tokenTimestamp) { + this.authToken = Files.readString(authTokenFilePath); + this.authToken = this.authToken.trim(); + this.tokenTimestamp = lastModified; + } + } catch (Exception e) { + logger.warn("Could not read auth token file: {}, reason: {}", authTokenFilePath, e.getMessage()); + } + return this.authToken; + } + +} diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/service/HttpUtils.java b/datafilecollector/src/main/java/org/oran/datafile/service/HttpUtils.java similarity index 97% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/service/HttpUtils.java rename to datafilecollector/src/main/java/org/oran/datafile/service/HttpUtils.java index 208691f..83dc02d 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/service/HttpUtils.java +++ b/datafilecollector/src/main/java/org/oran/datafile/service/HttpUtils.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. * Modifications Copyright (C) 2020-2021 Nokia. All rights reserved * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,14 +17,14 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.service; +package org.oran.datafile.service; import java.util.Base64; import java.util.List; import org.apache.hc.core5.http.NameValuePair; import org.apache.http.HttpStatus; -import org.onap.dcaegen2.collectors.datafile.commons.FileServerData; +import org.oran.datafile.commons.FileServerData; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/CollectAndReportFiles.java b/datafilecollector/src/main/java/org/oran/datafile/tasks/CollectAndReportFiles.java similarity index 90% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/CollectAndReportFiles.java rename to datafilecollector/src/main/java/org/oran/datafile/tasks/CollectAndReportFiles.java index 46e71cc..22ddf6f 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/CollectAndReportFiles.java +++ b/datafilecollector/src/main/java/org/oran/datafile/tasks/CollectAndReportFiles.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2018, 2020 NOKIA Intellectual Property, 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018, 2020 NOKIA Intellectual Property, 2018-2023 Nordix Foundation. 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 @@ -14,7 +14,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.tasks; +package org.oran.datafile.tasks; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -32,17 +32,17 @@ import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.common.header.Header; import org.apache.kafka.common.header.internals.RecordHeader; import org.apache.kafka.common.serialization.StringSerializer; -import org.onap.dcaegen2.collectors.datafile.commons.Scheme; -import org.onap.dcaegen2.collectors.datafile.configuration.AppConfig; -import org.onap.dcaegen2.collectors.datafile.configuration.CertificateConfig; -import org.onap.dcaegen2.collectors.datafile.datastore.DataStore; -import org.onap.dcaegen2.collectors.datafile.datastore.DataStore.Bucket; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.http.HttpsClientConnectionManagerUtil; -import org.onap.dcaegen2.collectors.datafile.model.Counters; -import org.onap.dcaegen2.collectors.datafile.model.FileData; -import org.onap.dcaegen2.collectors.datafile.model.FilePublishInformation; -import org.onap.dcaegen2.collectors.datafile.model.FileReadyMessage; +import org.oran.datafile.commons.Scheme; +import org.oran.datafile.configuration.AppConfig; +import org.oran.datafile.configuration.CertificateConfig; +import org.oran.datafile.datastore.DataStore; +import org.oran.datafile.datastore.DataStore.Bucket; +import org.oran.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.http.HttpsClientConnectionManagerUtil; +import org.oran.datafile.model.Counters; +import org.oran.datafile.model.FileData; +import org.oran.datafile.model.FilePublishInformation; +import org.oran.datafile.model.FileReadyMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -142,7 +142,7 @@ public class CollectAndReportFiles { .flatMap(fileReadyMessage -> Flux.fromIterable(FileData.createFileData(fileReadyMessage)), true, 1) // .flatMap(this::filterNotFetched, false, 1, 1) // .flatMap(this::fetchFile, false, 1, 1) // - .flatMap(data -> reportFetchedFile(data, this.appConfig.collectedFileTopic), false, 1) // + .flatMap(data -> reportFetchedFile(data, appConfig.getCollectedFileTopic()), false, 1) // .sequential() // .doOnError(t -> logger.error("Received error: {}", t.toString())); // } @@ -181,7 +181,7 @@ public class CollectAndReportFiles { } private Path locaFilePath(FilePublishInformation info) { - return Paths.get(this.appConfig.collectedFilesPath, info.getName()); + return Paths.get(appConfig.getCollectedFilesPath(), info.getName()); } private void deleteLocalFile(FilePublishInformation info) { @@ -231,6 +231,7 @@ public class CollectAndReportFiles { props.put(ProducerConfig.ACKS_CONFIG, "all"); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + this.appConfig.addKafkaSecurityProps(props); return SenderOptions.create(props); } @@ -270,8 +271,7 @@ public class CollectAndReportFiles { * polling/blocking fashion. */ private Flux fetchFromKafka() { - KafkaTopicListener listener = new KafkaTopicListener(this.appConfig.getKafkaBootStrapServers(), - this.appConfig.kafkaClientId, this.appConfig.fileReadyEventTopic); + KafkaTopicListener listener = new KafkaTopicListener(this.appConfig); return listener.getFlux() // .flatMap(this::parseReceivedFileReadyMessage, 1); diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/FileCollector.java b/datafilecollector/src/main/java/org/oran/datafile/tasks/FileCollector.java similarity index 84% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/FileCollector.java rename to datafilecollector/src/main/java/org/oran/datafile/tasks/FileCollector.java index 2b3ce53..812e5b0 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/FileCollector.java +++ b/datafilecollector/src/main/java/org/oran/datafile/tasks/FileCollector.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. * Copyright (C) 2020-2022 Nokia. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except @@ -15,7 +15,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.tasks; +package org.oran.datafile.tasks; import java.nio.file.Files; import java.nio.file.Path; @@ -23,22 +23,22 @@ import java.nio.file.Paths; import java.time.Duration; import java.util.Optional; -import org.onap.dcaegen2.collectors.datafile.commons.FileCollectClient; -import org.onap.dcaegen2.collectors.datafile.commons.Scheme; -import org.onap.dcaegen2.collectors.datafile.configuration.AppConfig; -import org.onap.dcaegen2.collectors.datafile.configuration.CertificateConfig; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.exceptions.NonRetryableDatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.ftp.FtpesClient; -import org.onap.dcaegen2.collectors.datafile.ftp.SftpClient; -import org.onap.dcaegen2.collectors.datafile.ftp.SftpClientSettings; -import org.onap.dcaegen2.collectors.datafile.http.DfcHttpClient; -import org.onap.dcaegen2.collectors.datafile.http.DfcHttpsClient; -import org.onap.dcaegen2.collectors.datafile.http.HttpsClientConnectionManagerUtil; -import org.onap.dcaegen2.collectors.datafile.model.Counters; -import org.onap.dcaegen2.collectors.datafile.model.FileData; -import org.onap.dcaegen2.collectors.datafile.model.FilePublishInformation; -import org.onap.dcaegen2.collectors.datafile.model.FileReadyMessage; +import org.oran.datafile.commons.FileCollectClient; +import org.oran.datafile.commons.Scheme; +import org.oran.datafile.configuration.AppConfig; +import org.oran.datafile.configuration.CertificateConfig; +import org.oran.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.exceptions.NonRetryableDatafileTaskException; +import org.oran.datafile.ftp.FtpesClient; +import org.oran.datafile.ftp.SftpClient; +import org.oran.datafile.ftp.SftpClientSettings; +import org.oran.datafile.http.DfcHttpClient; +import org.oran.datafile.http.DfcHttpsClient; +import org.oran.datafile.http.HttpsClientConnectionManagerUtil; +import org.oran.datafile.model.Counters; +import org.oran.datafile.model.FileData; +import org.oran.datafile.model.FilePublishInformation; +import org.oran.datafile.model.FileReadyMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,8 +47,6 @@ import reactor.util.retry.Retry; /** * Collects a file from a PNF. - * - * @author Henrik Andersson */ public class FileCollector { diff --git a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/KafkaTopicListener.java b/datafilecollector/src/main/java/org/oran/datafile/tasks/KafkaTopicListener.java similarity index 80% rename from datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/KafkaTopicListener.java rename to datafilecollector/src/main/java/org/oran/datafile/tasks/KafkaTopicListener.java index 969e5fa..b67eb04 100644 --- a/datafilecollector/src/main/java/org/onap/dcaegen2/collectors/datafile/tasks/KafkaTopicListener.java +++ b/datafilecollector/src/main/java/org/oran/datafile/tasks/KafkaTopicListener.java @@ -18,7 +18,7 @@ * ========================LICENSE_END=================================== */ -package org.onap.dcaegen2.collectors.datafile.tasks; +package org.oran.datafile.tasks; import java.util.Collections; import java.util.HashMap; @@ -28,6 +28,7 @@ import lombok.ToString; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.common.serialization.StringDeserializer; +import org.oran.datafile.configuration.AppConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,15 +56,11 @@ public class KafkaTopicListener { private static final Logger logger = LoggerFactory.getLogger(KafkaTopicListener.class); - private final String inputTopic; - private final String kafkaBoostrapServers; - private final String kafkaClientId; private Flux dataFromTopic; + private final AppConfig appConfig; - public KafkaTopicListener(String kafkaBoostrapServers, String clientId, String topic) { - this.kafkaClientId = clientId; - this.kafkaBoostrapServers = kafkaBoostrapServers; - this.inputTopic = topic; + public KafkaTopicListener(AppConfig applConfig) { + this.appConfig = applConfig; } public Flux getFlux() { @@ -74,10 +71,12 @@ public class KafkaTopicListener { } private Flux startReceiveFromTopic() { - logger.debug("Listening to kafka topic: {}, client id: {}", this.inputTopic, this.kafkaClientId); + logger.debug("Listening to kafka topic: {}, client id: {}", appConfig.getInputTopic(), + appConfig.getKafkaClientId()); return KafkaReceiver.create(kafkaInputProperties()) // .receive() // - .doOnNext(input -> logger.debug("Received from kafka topic: {} :{}", this.inputTopic, input.value())) // + .doOnNext( + input -> logger.debug("Received from kafka topic: {} :{}", appConfig.getInputTopic(), input.value())) // .doOnError(t -> logger.error("KafkaTopicReceiver error: {}", t.getMessage())) // .doFinally(sig -> logger.error("KafkaTopicReceiver stopped, reason: {}", sig)) // .doFinally(sig -> this.dataFromTopic = null) // @@ -89,18 +88,19 @@ public class KafkaTopicListener { private ReceiverOptions kafkaInputProperties() { Map consumerProps = new HashMap<>(); - if (this.kafkaBoostrapServers.isEmpty()) { + if (appConfig.getKafkaBootStrapServers().isEmpty()) { logger.error("No kafka boostrap server is setup"); } - consumerProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, this.kafkaBoostrapServers); - consumerProps.put(ConsumerConfig.GROUP_ID_CONFIG, "osc-dmaap-adapter-" + inputTopic); + consumerProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, appConfig.getKafkaBootStrapServers()); + consumerProps.put(ConsumerConfig.GROUP_ID_CONFIG, "osc-dmaap-adapter-" + appConfig.getInputTopic()); consumerProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); consumerProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); consumerProps.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, true); - consumerProps.put(ConsumerConfig.CLIENT_ID_CONFIG, this.kafkaClientId); + consumerProps.put(ConsumerConfig.CLIENT_ID_CONFIG, appConfig.getKafkaClientId()); + this.appConfig.addKafkaSecurityProps(consumerProps); return ReceiverOptions.create(consumerProps) - .subscription(Collections.singleton(this.inputTopic)); + .subscription(Collections.singleton(appConfig.getInputTopic())); } } diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/MockDatafile.java b/datafilecollector/src/test/java/org/oran/datafile/MockDatafile.java similarity index 86% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/MockDatafile.java rename to datafilecollector/src/test/java/org/oran/datafile/MockDatafile.java index 30a7975..b565704 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/MockDatafile.java +++ b/datafilecollector/src/test/java/org/oran/datafile/MockDatafile.java @@ -2,7 +2,7 @@ * ========================LICENSE_START================================= * O-RAN-SC * %% - * Copyright (C) 2020 Nordix Foundation + * Copyright (C) 2020-2023 NordixFoundation * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,10 +18,12 @@ * ========================LICENSE_END=================================== */ -package org.onap.dcaegen2.collectors.datafile; +package org.oran.datafile; import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -38,18 +40,18 @@ import java.util.List; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.onap.dcaegen2.collectors.datafile.configuration.AppConfig; -import org.onap.dcaegen2.collectors.datafile.datastore.DataStore; -import org.onap.dcaegen2.collectors.datafile.datastore.DataStore.Bucket; -import org.onap.dcaegen2.collectors.datafile.model.Counters; -import org.onap.dcaegen2.collectors.datafile.model.FileData; -import org.onap.dcaegen2.collectors.datafile.model.FilePublishInformation; -import org.onap.dcaegen2.collectors.datafile.model.FileReadyMessage; -import org.onap.dcaegen2.collectors.datafile.model.FileReadyMessage.MessageMetaData; -import org.onap.dcaegen2.collectors.datafile.tasks.CollectAndReportFiles; -import org.onap.dcaegen2.collectors.datafile.tasks.FileCollector; -import org.onap.dcaegen2.collectors.datafile.tasks.KafkaTopicListener; -import org.onap.dcaegen2.collectors.datafile.tasks.KafkaTopicListener.DataFromTopic; +import org.oran.datafile.configuration.AppConfig; +import org.oran.datafile.datastore.DataStore; +import org.oran.datafile.datastore.DataStore.Bucket; +import org.oran.datafile.model.Counters; +import org.oran.datafile.model.FileData; +import org.oran.datafile.model.FilePublishInformation; +import org.oran.datafile.model.FileReadyMessage; +import org.oran.datafile.model.FileReadyMessage.MessageMetaData; +import org.oran.datafile.tasks.CollectAndReportFiles; +import org.oran.datafile.tasks.FileCollector; +import org.oran.datafile.tasks.KafkaTopicListener; +import org.oran.datafile.tasks.KafkaTopicListener.DataFromTopic; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -78,7 +80,9 @@ import reactor.core.publisher.Mono; "app.s3.accessKeyId=minio", // "app.s3.secretAccessKey=miniostorage", // "app.s3.bucket=ropfiles", // - "app.s3.locksBucket=locks"}) + "app.s3.locksBucket=locks", // + "app.auth-token-file=src/test/resources/jwtToken.b64", // + "app.kafka.use-oath-token=false"}) @SuppressWarnings("squid:S3577") // Not containing any tests since it is a mock. class MockDatafile { @@ -127,9 +131,10 @@ class MockDatafile { // Create a listener to the output topic. The KafkaTopicListener happens to be // suitable for that, - - KafkaTopicListener topicListener = - new KafkaTopicListener(applicationConfig.getKafkaBootStrapServers(), "MockDatafile", outputTopic); + AppConfig config = spy(applicationConfig); + when(config.getKafkaClientId()).thenReturn("MockDatafile"); + when(config.getInputTopic()).thenReturn(outputTopic); + KafkaTopicListener topicListener = new KafkaTopicListener(config); topicListener.getFlux() // .doOnNext(this::set) // @@ -172,7 +177,7 @@ class MockDatafile { try { Path from = Path.of("config/application.yaml"); - Path to = Path.of(this.appConfig.collectedFilesPath, fileData.name()); + Path to = Path.of(appConfig.getCollectedFilesPath(), fileData.name()); Files.createDirectories(to.getParent()); Files.copy(from, to, StandardCopyOption.REPLACE_EXISTING); } catch (Exception e) { @@ -208,7 +213,7 @@ class MockDatafile { @BeforeEach void init() { if (kafkaReceiver == null) { - kafkaReceiver = new KafkaReceiver(this.appConfig, this.appConfig.collectedFileTopic); + kafkaReceiver = new KafkaReceiver(appConfig, appConfig.getCollectedFileTopic()); } kafkaReceiver.reset(); deleteAllFiles(); @@ -225,7 +230,7 @@ class MockDatafile { private void deleteAllFiles() { try { - FileSystemUtils.deleteRecursively(Path.of(this.appConfig.collectedFilesPath)); + FileSystemUtils.deleteRecursively(Path.of(appConfig.getCollectedFilesPath())); } catch (IOException e) { } } @@ -239,10 +244,10 @@ class MockDatafile { void testKafka() throws InterruptedException { waitForKafkaListener(); - this.scheduledTask.sendDataToStream(this.appConfig.fileReadyEventTopic, "key", "junk").blockLast(); + this.scheduledTask.sendDataToStream(appConfig.getInputTopic(), "key", "junk").blockLast(); String fileReadyMessage = gson.toJson(fileReadyMessage()); - this.scheduledTask.sendDataToStream(this.appConfig.fileReadyEventTopic, "key", fileReadyMessage).blockLast(); + this.scheduledTask.sendDataToStream(appConfig.getInputTopic(), "key", fileReadyMessage).blockLast(); await().untilAsserted(() -> assertThat(kafkaReceiver.count).isEqualTo(1)); String rec = kafkaReceiver.lastValue(); @@ -264,8 +269,8 @@ class MockDatafile { Flux.range(1, NO_OF_OBJECTS) // .map(i -> gson.toJson(fileReadyMessage("testS3Concurrency_" + i))) // - .flatMap(fileReadyMessage -> scheduledTask.sendDataToStream(appConfig.fileReadyEventTopic, "key", - fileReadyMessage)) // + .flatMap( + fileReadyMessage -> scheduledTask.sendDataToStream(appConfig.getInputTopic(), "key", fileReadyMessage)) // .blockLast(); // while (kafkaReceiver.count < NO_OF_OBJECTS) { diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/controllers/StatusControllerTest.java b/datafilecollector/src/test/java/org/oran/datafile/controllers/StatusControllerTest.java similarity index 90% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/controllers/StatusControllerTest.java rename to datafilecollector/src/test/java/org/oran/datafile/controllers/StatusControllerTest.java index 8bc6330..1826096 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/controllers/StatusControllerTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/controllers/StatusControllerTest.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2023 Nordix Foundation. * Copyright (C) 2020 Nokia. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,7 +19,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.collectors.datafile.controllers; +package org.oran.datafile.controllers; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.doReturn; @@ -29,8 +29,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.onap.dcaegen2.collectors.datafile.model.Counters; -import org.onap.dcaegen2.collectors.datafile.tasks.CollectAndReportFiles; +import org.oran.datafile.model.Counters; +import org.oran.datafile.tasks.CollectAndReportFiles; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; import reactor.core.publisher.Mono; diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/ftp/FtpesClientTest.java b/datafilecollector/src/test/java/org/oran/datafile/ftp/FtpesClientTest.java similarity index 98% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/ftp/FtpesClientTest.java rename to datafilecollector/src/test/java/org/oran/datafile/ftp/FtpesClientTest.java index 3423826..21f9c71 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/ftp/FtpesClientTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/ftp/FtpesClientTest.java @@ -1,6 +1,6 @@ /* * ============LICENSE_START====================================================================== - * Copyright (C) 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. * Copyright (C) 2020 Nokia. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except @@ -15,7 +15,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.ftp; +package org.oran.datafile.ftp; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; @@ -42,7 +42,7 @@ import org.apache.commons.net.ftp.FTPSClient; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentMatchers; -import org.onap.dcaegen2.collectors.datafile.commons.FileServerData; +import org.oran.datafile.commons.FileServerData; import org.springframework.http.HttpStatus; public class FtpesClientTest { diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/ftp/SftpClientSettingsTest.java b/datafilecollector/src/test/java/org/oran/datafile/ftp/SftpClientSettingsTest.java similarity index 93% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/ftp/SftpClientSettingsTest.java rename to datafilecollector/src/test/java/org/oran/datafile/ftp/SftpClientSettingsTest.java index 5ee379b..bbce5ef 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/ftp/SftpClientSettingsTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/ftp/SftpClientSettingsTest.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. * Copyright (C) 2020 Nokia. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file @@ -15,7 +15,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.ftp; +package org.oran.datafile.ftp; import static org.assertj.core.api.Assertions.assertThat; @@ -24,7 +24,7 @@ import java.nio.file.Path; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import org.onap.dcaegen2.collectors.datafile.configuration.SftpConfig; +import org.oran.datafile.configuration.SftpConfig; public class SftpClientSettingsTest { diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/ftp/SftpClientTest.java b/datafilecollector/src/test/java/org/oran/datafile/ftp/SftpClientTest.java similarity index 96% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/ftp/SftpClientTest.java rename to datafilecollector/src/test/java/org/oran/datafile/ftp/SftpClientTest.java index 596bec8..87ff172 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/ftp/SftpClientTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/ftp/SftpClientTest.java @@ -1,5 +1,6 @@ /*- * ============LICENSE_START====================================================================== + * Copyright (C) 2023 Nordix Foundation. All rights reserved. * Copyright (C) 2020 Nokia. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file @@ -14,7 +15,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.ftp; +package org.oran.datafile.ftp; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -40,10 +41,10 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.onap.dcaegen2.collectors.datafile.commons.FileServerData; -import org.onap.dcaegen2.collectors.datafile.configuration.SftpConfig; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.exceptions.NonRetryableDatafileTaskException; +import org.oran.datafile.commons.FileServerData; +import org.oran.datafile.configuration.SftpConfig; +import org.oran.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.exceptions.NonRetryableDatafileTaskException; @ExtendWith(MockitoExtension.class) public class SftpClientTest { diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/http/DfcHttpClientTest.java b/datafilecollector/src/test/java/org/oran/datafile/http/DfcHttpClientTest.java similarity index 96% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/http/DfcHttpClientTest.java rename to datafilecollector/src/test/java/org/oran/datafile/http/DfcHttpClientTest.java index 8550644..5b349a1 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/http/DfcHttpClientTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/http/DfcHttpClientTest.java @@ -1,5 +1,6 @@ /*- * ============LICENSE_START====================================================================== + * Copyright (C) 2020-2023 Nordix Foundation. All rights reserved. * Copyright (C) 2020-2021 Nokia. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except @@ -13,7 +14,7 @@ * the License. * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.http; +package org.oran.datafile.http; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -38,9 +39,9 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentMatchers; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.onap.dcaegen2.collectors.datafile.commons.FileServerData; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.service.HttpUtils; +import org.oran.datafile.commons.FileServerData; +import org.oran.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.service.HttpUtils; import reactor.core.publisher.Flux; import reactor.netty.http.client.HttpClientConfig; diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/http/DfcHttpsClientTest.java b/datafilecollector/src/test/java/org/oran/datafile/http/DfcHttpsClientTest.java similarity index 96% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/http/DfcHttpsClientTest.java rename to datafilecollector/src/test/java/org/oran/datafile/http/DfcHttpsClientTest.java index 4295fe8..468b8fe 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/http/DfcHttpsClientTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/http/DfcHttpsClientTest.java @@ -1,5 +1,6 @@ /*- * ============LICENSE_START====================================================================== + * Copyright (C) 2023 Nordix Foundation. All rights reserved. * Copyright (C) 2021 Nokia. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except @@ -13,7 +14,7 @@ * the License. * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.http; +package org.oran.datafile.http; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -41,9 +42,9 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.onap.dcaegen2.collectors.datafile.commons.FileServerData; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.exceptions.NonRetryableDatafileTaskException; +import org.oran.datafile.commons.FileServerData; +import org.oran.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.exceptions.NonRetryableDatafileTaskException; @ExtendWith(MockitoExtension.class) class DfcHttpsClientTest { diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/http/HttpClientResponseHelper.java b/datafilecollector/src/test/java/org/oran/datafile/http/HttpClientResponseHelper.java similarity index 99% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/http/HttpClientResponseHelper.java rename to datafilecollector/src/test/java/org/oran/datafile/http/HttpClientResponseHelper.java index 73c377a..99c7605 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/http/HttpClientResponseHelper.java +++ b/datafilecollector/src/test/java/org/oran/datafile/http/HttpClientResponseHelper.java @@ -1,5 +1,6 @@ /*- * ============LICENSE_START====================================================================== + * Copyright (C) 2023 Nordix Foundation. All rights reserved. * Copyright (C) 2020-2021 Nokia. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except @@ -13,7 +14,7 @@ * the License. * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.http; +package org.oran.datafile.http; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpMethod; diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/http/HttpsClientConnectionManagerUtilTest.java b/datafilecollector/src/test/java/org/oran/datafile/http/HttpsClientConnectionManagerUtilTest.java similarity index 94% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/http/HttpsClientConnectionManagerUtilTest.java rename to datafilecollector/src/test/java/org/oran/datafile/http/HttpsClientConnectionManagerUtilTest.java index be3e8be..af77349 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/http/HttpsClientConnectionManagerUtilTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/http/HttpsClientConnectionManagerUtilTest.java @@ -1,5 +1,6 @@ /*- * ============LICENSE_START====================================================================== + * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. * Copyright (C) 2021 Nokia. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except @@ -13,7 +14,7 @@ * the License. * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.http; +package org.oran.datafile.http; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -21,7 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.exceptions.DatafileTaskException; @ExtendWith(MockitoExtension.class) public class HttpsClientConnectionManagerUtilTest { diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/scheme/SchemeTest.java b/datafilecollector/src/test/java/org/oran/datafile/scheme/SchemeTest.java similarity index 87% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/scheme/SchemeTest.java rename to datafilecollector/src/test/java/org/oran/datafile/scheme/SchemeTest.java index 413cd13..b1e5eeb 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/scheme/SchemeTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/scheme/SchemeTest.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2019-2023 Nordix Foundation. All rights reserved. * Copyright (C) 2020 Nokia. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,14 +17,14 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.collectors.datafile.scheme; +package org.oran.datafile.scheme; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; -import org.onap.dcaegen2.collectors.datafile.commons.Scheme; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.commons.Scheme; +import org.oran.datafile.exceptions.DatafileTaskException; public class SchemeTest { diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/service/HttpUtilsTest.java b/datafilecollector/src/test/java/org/oran/datafile/service/HttpUtilsTest.java similarity index 97% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/service/HttpUtilsTest.java rename to datafilecollector/src/test/java/org/oran/datafile/service/HttpUtilsTest.java index 0ee9f72..a0448c4 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/service/HttpUtilsTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/service/HttpUtilsTest.java @@ -1,6 +1,6 @@ /* * ============LICENSE_START====================================================================== - * Copyright (C) 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. * Modifications Copyright (C) 2021 Nokia. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except @@ -15,7 +15,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.service; +package org.oran.datafile.service; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -27,7 +27,7 @@ import java.util.List; import org.apache.hc.core5.http.NameValuePair; import org.apache.hc.core5.net.URIBuilder; import org.junit.jupiter.api.Test; -import org.onap.dcaegen2.collectors.datafile.commons.FileServerData; +import org.oran.datafile.commons.FileServerData; class HttpUtilsTest { diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/FileCollectorTest.java b/datafilecollector/src/test/java/org/oran/datafile/tasks/FileCollectorTest.java similarity index 94% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/FileCollectorTest.java rename to datafilecollector/src/test/java/org/oran/datafile/tasks/FileCollectorTest.java index 6d437ae..fa5d799 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/tasks/FileCollectorTest.java +++ b/datafilecollector/src/test/java/org/oran/datafile/tasks/FileCollectorTest.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. All rights reserved. * Copyright (C) 2020-2022 Nokia. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except @@ -15,7 +15,7 @@ * ============LICENSE_END======================================================================== */ -package org.onap.dcaegen2.collectors.datafile.tasks; +package org.oran.datafile.tasks; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; @@ -37,18 +37,18 @@ import java.util.List; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.onap.dcaegen2.collectors.datafile.configuration.AppConfig; -import org.onap.dcaegen2.collectors.datafile.configuration.CertificateConfig; -import org.onap.dcaegen2.collectors.datafile.exceptions.DatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.exceptions.NonRetryableDatafileTaskException; -import org.onap.dcaegen2.collectors.datafile.ftp.FtpesClient; -import org.onap.dcaegen2.collectors.datafile.ftp.SftpClient; -import org.onap.dcaegen2.collectors.datafile.http.DfcHttpClient; -import org.onap.dcaegen2.collectors.datafile.http.DfcHttpsClient; -import org.onap.dcaegen2.collectors.datafile.model.Counters; -import org.onap.dcaegen2.collectors.datafile.model.FileData; -import org.onap.dcaegen2.collectors.datafile.model.FilePublishInformation; -import org.onap.dcaegen2.collectors.datafile.model.FileReadyMessage; +import org.oran.datafile.configuration.AppConfig; +import org.oran.datafile.configuration.CertificateConfig; +import org.oran.datafile.exceptions.DatafileTaskException; +import org.oran.datafile.exceptions.NonRetryableDatafileTaskException; +import org.oran.datafile.ftp.FtpesClient; +import org.oran.datafile.ftp.SftpClient; +import org.oran.datafile.http.DfcHttpClient; +import org.oran.datafile.http.DfcHttpsClient; +import org.oran.datafile.model.Counters; +import org.oran.datafile.model.FileData; +import org.oran.datafile.model.FilePublishInformation; +import org.oran.datafile.model.FileReadyMessage; import reactor.test.StepVerifier; public class FileCollectorTest { @@ -175,7 +175,7 @@ public class FileCollectorTest { @BeforeAll static void setUpConfiguration() { when(appConfigMock.getCertificateConfiguration()).thenReturn(certificateConfigMock); - appConfigMock.collectedFilesPath = DATAFILE_TMPDIR; + when(appConfigMock.getCollectedFilesPath()).thenReturn(DATAFILE_TMPDIR); certificateConfigMock.keyPasswordPath = CERTIFICATE_KEY_PASSWORD_PATH; certificateConfigMock.trustedCa = TRUSTED_CA_PATH; certificateConfigMock.trustedCaPasswordPath = TRUSTED_CA_PASSWORD_PATH; diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/utils/JsonMessage.java b/datafilecollector/src/test/java/org/oran/datafile/utils/JsonMessage.java similarity index 97% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/utils/JsonMessage.java rename to datafilecollector/src/test/java/org/oran/datafile/utils/JsonMessage.java index 7c2706d..6fe4362 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/utils/JsonMessage.java +++ b/datafilecollector/src/test/java/org/oran/datafile/utils/JsonMessage.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * 2018-2019 Nordix Foundation. All rights reserved. + * Copyright (C) 2018-2023 Nordix Foundation. 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. @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.collectors.datafile.utils; +package org.oran.datafile.utils; import java.util.ArrayList; import java.util.Iterator; @@ -26,9 +26,6 @@ import java.util.List; /** * Utility class to produce correctly formatted fileReady event Json messages. - * - * @author Henrik Andersson on 7/25/18 - * */ public class JsonMessage { private String eventName; @@ -229,7 +226,8 @@ public class JsonMessage { } /** - * Can be used to produce a correct test Json message. Tip! Check the formatting with + * Can be used to produce a correct test Json message. Tip! Check the formatting + * with * Json formatter * * @param args Not used diff --git a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/utils/LoggingUtils.java b/datafilecollector/src/test/java/org/oran/datafile/utils/LoggingUtils.java similarity index 90% rename from datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/utils/LoggingUtils.java rename to datafilecollector/src/test/java/org/oran/datafile/utils/LoggingUtils.java index cfcb7bf..c289b50 100644 --- a/datafilecollector/src/test/java/org/onap/dcaegen2/collectors/datafile/utils/LoggingUtils.java +++ b/datafilecollector/src/test/java/org/oran/datafile/utils/LoggingUtils.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2023 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.dcaegen2.collectors.datafile.utils; +package org.oran.datafile.utils; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; @@ -30,14 +30,16 @@ import org.slf4j.LoggerFactory; public class LoggingUtils { /** - * Returns a ListAppender that contains all logging events. Call this method at the very beginning of the test + * Returns a ListAppender that contains all logging events. Call this method at + * the very beginning of the test */ public static ListAppender getLogListAppender(Class logClass) { return getLogListAppender(logClass, false); } /** - * Returns a ListAppender that contains all logging events. Call this method at the very beginning of the test + * Returns a ListAppender that contains all logging events. Call this method at + * the very beginning of the test * * @param logClass class whose appender is wanted. * @param allLevels true if all log levels should be activated. diff --git a/datafilecollector/src/test/resources/jwtToken.b64 b/datafilecollector/src/test/resources/jwtToken.b64 new file mode 100644 index 0000000..b19a883 --- /dev/null +++ b/datafilecollector/src/test/resources/jwtToken.b64 @@ -0,0 +1 @@ +eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c -- 2.16.6