blob: ccb0d90f2f0966efd8c840823da805d094a1feb9 [file]
/**
* 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 <mutex>
#include "minifi-cpp/controllers/ProxyConfigurationServiceInterface.h"
#include "controllers/ProxyConfiguration.h"
#include "core/controller/ControllerServiceBase.h"
#include "core/PropertyDefinitionBuilder.h"
#include "minifi-cpp/core/PropertyValidator.h"
namespace org::apache::nifi::minifi::controllers {
class ProxyConfigurationService : public core::controller::ControllerServiceBase, public ProxyConfigurationServiceInterface {
public:
using ControllerServiceBase::ControllerServiceBase;
MINIFIAPI static constexpr const char* Description = "Provides a set of configurations for various MiNiFi C++ components to use a proxy server. Currently these properties can only be used for "
"HTTP proxy configuration, no other protocols are supported at this time.";
MINIFIAPI static constexpr auto ProxyServerHost = core::PropertyDefinitionBuilder<>::createProperty("Proxy Server Host")
.withDescription("Proxy server hostname or ip-address.")
.isRequired(true)
.withValidator(core::StandardPropertyValidators::NON_BLANK_VALIDATOR)
.build();
MINIFIAPI static constexpr auto ProxyServerPort = core::PropertyDefinitionBuilder<>::createProperty("Proxy Server Port")
.withDescription("Proxy server port number.")
.withValidator(core::StandardPropertyValidators::PORT_VALIDATOR)
.build();
MINIFIAPI static constexpr auto ProxyUserName = core::PropertyDefinitionBuilder<>::createProperty("Proxy User Name")
.withDescription("The name of the proxy client for user authentication.")
.build();
MINIFIAPI static constexpr auto ProxyUserPassword = core::PropertyDefinitionBuilder<>::createProperty("Proxy User Password")
.withDescription("The password of the proxy client for user authentication.")
.isSensitive(true)
.build();
MINIFIAPI static constexpr auto ProxyTypeProperty = core::PropertyDefinitionBuilder<magic_enum::enum_count<ProxyType>()>::createProperty("Proxy Type")
.withDescription("Proxy type. If set to DIRECT, the proxy server is not used.")
.withDefaultValue(magic_enum::enum_name(ProxyType::HTTP))
.withAllowedValues(magic_enum::enum_names<ProxyType>())
.build();
MINIFIAPI static constexpr auto Properties = std::to_array<core::PropertyReference>({
ProxyServerHost,
ProxyServerPort,
ProxyUserName,
ProxyUserPassword,
ProxyTypeProperty
});
MINIFIAPI static constexpr bool SupportsDynamicProperties = false;
MINIFIAPI static constexpr auto ImplementsApis = std::array{ ProxyConfigurationServiceInterface::ProvidesApi };
ADD_COMMON_VIRTUAL_FUNCTIONS_FOR_CONTROLLER_SERVICES
void initialize() override;
void onEnable() override;
[[nodiscard]] ControllerServiceHandle* getControllerServiceHandle() override {return this;}
ProxyType getProxyType() const override {
std::lock_guard lock(configuration_mutex_);
return proxy_configuration_.proxy_type;
}
std::string getHost() const override {
std::lock_guard lock(configuration_mutex_);
return proxy_configuration_.proxy_host;
}
uint16_t getPort() const override {
std::lock_guard lock(configuration_mutex_);
return proxy_configuration_.proxy_port;
}
std::optional<BasicAuthCredentials> getProxyCredentials() const override {
std::lock_guard lock(configuration_mutex_);
return proxy_configuration_.proxy_credentials;
}
private:
mutable std::mutex configuration_mutex_;
ProxyConfiguration proxy_configuration_;
std::shared_ptr<core::logging::Logger> logger_ = core::logging::LoggerFactory<ProxyConfigurationService>::getLogger(uuid_);
};
} // namespace org::apache::nifi::minifi::controllers