You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by fg...@apache.org on 2022/04/28 14:20:46 UTC
[nifi-minifi-cpp] 02/03: MINIFICPP-1796 Fix getting raw value of log properties
This is an automated email from the ASF dual-hosted git repository.
fgerlits pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit c59807878d9049915e5c32f196ad57eb32f821e1
Author: Gabor Gyimesi <ga...@gmail.com>
AuthorDate: Wed Apr 13 13:57:01 2022 +0200
MINIFICPP-1796 Fix getting raw value of log properties
Signed-off-by: Ferenc Gerlits <fg...@gmail.com>
This closes #1301
---
.../http-curl/tests/C2DescribeManifestTest.cpp | 5 ++++
.../http-curl/tests/C2PropertiesUpdateTests.cpp | 7 +-----
extensions/http-curl/tests/ConfigTestAccessor.h | 29 ++++++++++++++++++++++
extensions/http-curl/tests/HTTPHandlers.h | 2 +-
libminifi/include/properties/Configure.h | 1 +
libminifi/src/Configure.cpp | 29 ++++++++++++++--------
libminifi/src/FlowController.cpp | 2 +-
libminifi/src/c2/C2Client.cpp | 2 +-
8 files changed, 57 insertions(+), 20 deletions(-)
diff --git a/extensions/http-curl/tests/C2DescribeManifestTest.cpp b/extensions/http-curl/tests/C2DescribeManifestTest.cpp
index 242800ee4..42e7d1aac 100644
--- a/extensions/http-curl/tests/C2DescribeManifestTest.cpp
+++ b/extensions/http-curl/tests/C2DescribeManifestTest.cpp
@@ -23,6 +23,7 @@
#include "HTTPIntegrationBase.h"
#include "HTTPHandlers.h"
#include "properties/Configuration.h"
+#include "ConfigTestAccessor.h"
class DescribeManifestHandler: public HeartbeatHandler {
public:
@@ -56,12 +57,16 @@ int main(int argc, char **argv) {
harness.setKeyDir(args.key_dir);
DescribeManifestHandler responder(harness.getConfiguration(), verified);
+ auto logger_properties = std::make_shared<core::logging::LoggerProperties>();
+ ConfigTestAccessor::call_setLoggerProperties(harness.getConfiguration(), logger_properties);
+
harness.getConfiguration()->set(minifi::Configuration::nifi_rest_api_password, encrypted_value);
harness.getConfiguration()->set(std::string(minifi::Configuration::nifi_rest_api_password) + ".protected", utils::crypto::EncryptionType::name());
harness.getConfiguration()->set(minifi::Configuration::nifi_server_name, "server_name");
harness.getConfiguration()->set(minifi::Configuration::nifi_framework_dir, "framework_path");
harness.getConfiguration()->set(minifi::Configuration::nifi_sensitive_props_additional_keys,
std::string(minifi::Configuration::nifi_framework_dir) + ", " + std::string(minifi::Configuration::nifi_server_name));
+ harness.getConfiguration()->set(minifi::Configuration::nifi_log_appender_rolling_directory, "/var/log/minifi");
harness.setUrl(args.url, &responder);
harness.run(args.test_file);
diff --git a/extensions/http-curl/tests/C2PropertiesUpdateTests.cpp b/extensions/http-curl/tests/C2PropertiesUpdateTests.cpp
index d92497c0b..27773ddd6 100644
--- a/extensions/http-curl/tests/C2PropertiesUpdateTests.cpp
+++ b/extensions/http-curl/tests/C2PropertiesUpdateTests.cpp
@@ -28,6 +28,7 @@
#include "spdlog/sinks/dist_sink.h"
#include "LogUtils.h"
#include "properties/PropertiesFile.h"
+#include "ConfigTestAccessor.h"
struct PropertyChange {
std::string name;
@@ -116,12 +117,6 @@ namespace test {
struct DummyClass3 {};
} // namespace test
-struct ConfigTestAccessor {
- static void call_setLoggerProperties(const std::shared_ptr<minifi::Configure>& config, std::shared_ptr<core::logging::LoggerProperties> props) {
- config->setLoggerProperties(props);
- }
-};
-
int main() {
TempDirectory tmp_dir;
diff --git a/extensions/http-curl/tests/ConfigTestAccessor.h b/extensions/http-curl/tests/ConfigTestAccessor.h
new file mode 100644
index 000000000..e1dac61a0
--- /dev/null
+++ b/extensions/http-curl/tests/ConfigTestAccessor.h
@@ -0,0 +1,29 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+#pragma once
+
+#include <memory>
+
+#include "properties/Configure.h"
+#include "core/logging/LoggerProperties.h"
+
+struct ConfigTestAccessor {
+ static void call_setLoggerProperties(const std::shared_ptr<minifi::Configure>& config, std::shared_ptr<core::logging::LoggerProperties> props) {
+ config->setLoggerProperties(props);
+ }
+};
diff --git a/extensions/http-curl/tests/HTTPHandlers.h b/extensions/http-curl/tests/HTTPHandlers.h
index 7bae42aed..cdba06fbe 100644
--- a/extensions/http-curl/tests/HTTPHandlers.h
+++ b/extensions/http-curl/tests/HTTPHandlers.h
@@ -562,7 +562,7 @@ class HeartbeatHandler : public ServerAwareHandler {
std::unordered_map<std::string, std::string> config_property;
if (ranges::find(disallowed_properties, property.name) == ranges::end(disallowed_properties)) {
config_property.emplace("propertyName", property.name);
- if (auto value = configuration_->getString(std::string(property.name))) {
+ if (auto value = configuration_->getRawValue(std::string(property.name))) {
config_property.emplace("propertyValue", *value);
}
config_property.emplace("validator", property.validator->getName());
diff --git a/libminifi/include/properties/Configure.h b/libminifi/include/properties/Configure.h
index 88b68787d..76d8b8fc2 100644
--- a/libminifi/include/properties/Configure.h
+++ b/libminifi/include/properties/Configure.h
@@ -42,6 +42,7 @@ class Configure : public Configuration, public core::AgentIdentificationProvider
bool get(const std::string& key, std::string& value) const;
bool get(const std::string& key, const std::string& alternate_key, std::string& value) const;
std::optional<std::string> get(const std::string& key) const;
+ std::optional<std::string> getRawValue(const std::string& key) const;
std::optional<std::string> getAgentClass() const override;
std::string getAgentIdentifier() const override;
diff --git a/libminifi/src/Configure.cpp b/libminifi/src/Configure.cpp
index 2aa42e0b5..7067c2684 100644
--- a/libminifi/src/Configure.cpp
+++ b/libminifi/src/Configure.cpp
@@ -30,19 +30,14 @@ namespace nifi {
namespace minifi {
bool Configure::get(const std::string& key, std::string& value) const {
- static constexpr std::string_view log_prefix = "nifi.log.";
- if (utils::StringUtils::startsWith(key, log_prefix)) {
- if (logger_properties_) {
- return logger_properties_->getString(key.substr(log_prefix.length()), value);
+ if (auto opt_value = getRawValue(key)) {
+ value = *opt_value;
+ if (decryptor_ && isEncrypted(key)) {
+ value = decryptor_->decrypt(value);
}
- return false;
- }
-
- bool found = getString(key, value);
- if (decryptor_ && found && isEncrypted(key)) {
- value = decryptor_->decrypt(value);
+ return true;
}
- return found;
+ return false;
}
bool Configure::get(const std::string& key, const std::string& alternate_key, std::string& value) const {
@@ -69,6 +64,18 @@ std::optional<std::string> Configure::get(const std::string& key) const {
return std::nullopt;
}
+std::optional<std::string> Configure::getRawValue(const std::string& key) const {
+ static constexpr std::string_view log_prefix = "nifi.log.";
+ if (utils::StringUtils::startsWith(key, log_prefix)) {
+ if (logger_properties_) {
+ return logger_properties_->getString(key.substr(log_prefix.length()));
+ }
+ return std::nullopt;
+ }
+
+ return getString(key);
+}
+
bool Configure::isEncrypted(const std::string& key) const {
gsl_Expects(decryptor_);
const auto encryption_marker = getString(key + ".protected");
diff --git a/libminifi/src/FlowController.cpp b/libminifi/src/FlowController.cpp
index ef76b9f8c..25a1a4eb5 100644
--- a/libminifi/src/FlowController.cpp
+++ b/libminifi/src/FlowController.cpp
@@ -430,7 +430,7 @@ std::shared_ptr<state::response::ResponseNode> FlowController::getAgentManifest(
agentInfo->setUpdatePolicyController(std::static_pointer_cast<controllers::UpdatePolicyControllerService>(getControllerService(c2::C2Agent::UPDATE_NAME)).get());
agentInfo->setAgentIdentificationProvider(configuration_);
agentInfo->setConfigurationReader([this](const std::string& key){
- return configuration_->getString(key);
+ return configuration_->getRawValue(key);
});
agentInfo->setStateMonitor(this);
agentInfo->includeAgentStatus(false);
diff --git a/libminifi/src/c2/C2Client.cpp b/libminifi/src/c2/C2Client.cpp
index a4f7dd887..5eff01af9 100644
--- a/libminifi/src/c2/C2Client.cpp
+++ b/libminifi/src/c2/C2Client.cpp
@@ -117,7 +117,7 @@ void C2Client::initialize(core::controller::ControllerServiceProvider *controlle
}
if (agent_node != nullptr) {
agent_node->setConfigurationReader([this](const std::string& key){
- return configuration_->getString(key);
+ return configuration_->getRawValue(key);
});
}
auto configuration_checksums = dynamic_cast<state::response::ConfigurationChecksums*>(response_node.get());