#ifndef _IAMFACTORY_H_ #define _IAMFACTORY_H_ #include "IAMConfiguration.h" #include "IAMPluginFactory.h" #include "IAMProfileCredentialsProvider.h" #include "RsLogger.h" #include #include "../rs_iam_support.h" namespace Redshift { namespace IamSupport { /// @brief Factory for creating AWSCredentialsProvider class IAMFactory { public: /// @brief Creates the correct type of AWSCredentialsProvider according to the specified /// settings. /// /// @param in_settings The settings. /// @param in_log The logger. static std::shared_ptr CreateCredentialsProvider( const IamSettings& in_settings, RsLogger& in_log); /// @brief Creates a static AWSCredentialsProvider. /// /// @param in_config IAMConfigurations /// /// @return A shared pointer to a static AWSCredentialsProvider static std::shared_ptr CreateStaticCredentialsProvider( const IAMConfiguration& in_config = IAMConfiguration()); /// @brief Creates a default AWSCredentialsProvider. /// /// @return A shared pointer to a default AWSCredentialsProvider static std::shared_ptr CreateDefaultCredentialsProvider(); /// @brief Creates an Instance Profile AWSCredentialsProvider. /// /// @return A shared pointer to an Instance Profile AWSCredentialsProvider static std::shared_ptr CreateInstanceProfileCredentialsProvider(); /// @brief Creates a profile AWSCredentialsProvider. /// /// @param in_log The connection or driver log /// @param in_config IAMConfigurations /// /// @return A shared pointer to a profile AWSCredentialsProvider static std::shared_ptr CreateProfileCredentialsProvider( RsLogger* in_log, const IAMConfiguration& in_config = IAMConfiguration()); /// @brief Creates a plugin AWSCredentialsProvider according to /// the pluginName set in the IAMConfiguration parameter. /// /// @param in_log The connection or driver log /// @param in_config IAMConfigurations /// /// @return A shared pointer to a plugin AWSCredentialsProvider static std::shared_ptr CreatePluginCredentialsProvider( RsLogger* in_log, const IAMConfiguration& in_config = IAMConfiguration()); /// @brief Creates a ADFS plugin AWSCredentialsProvider. /// /// @param in_log The connection or driver log /// @param in_config IAMConfigurations /// /// @return A shared pointer to a ADFS plugin AWSCredentialsProvider static std::shared_ptr CreateAdfsCredentialsProvider( RsLogger* in_log, const IAMConfiguration& in_config = IAMConfiguration()); /// @brief Creates a Azure plugin AWSCredentialsProvider. /// /// @param in_log The connection or driver log /// @param in_config IAMConfigurations /// /// @return A shared pointer to a Azure plugin AWSCredentialsProvider static std::shared_ptr CreateAzureCredentialsProvider( RsLogger* in_log, const IAMConfiguration& in_config = IAMConfiguration()); /// @brief Creates a Browser Azure plugin AWSCredentialsProvider. /// /// @param in_log The connection or driver log /// @param in_config IAMConfigurations /// /// @return A shared pointer to a Browser Azure plugin AWSCredentialsProvider static std::shared_ptr CreateBrowserAzureCredentialsProvider( RsLogger* in_log, const IAMConfiguration& in_config = IAMConfiguration()); /// @brief Creates a Browser SAML plugin AWSCredentialsProvider. /// /// @param in_log The connection or driver log /// @param in_config IAMConfigurations /// /// @return A shared pointer to a Browser SAML plugin AWSCredentialsProvider static std::shared_ptr CreateBrowserSamlCredentialsProvider( RsLogger* in_log, const IAMConfiguration& in_config = IAMConfiguration()); /// @brief Creates a Okta plugin AWSCredentialsProvider. /// /// @param in_log The connection or driver log /// @param in_config IAMConfigurations /// /// @return A shared pointer to a Okta plugin AWSCredentialsProvider static std::shared_ptr CreateOktaCredentialsProvider( RsLogger* in_log, const IAMConfiguration& in_config = IAMConfiguration()); /// @brief Creates a JWT plugin AWSCredentialsProvider. /// /// @param in_log The connection or driver log /// @param in_config IAMConfigurations /// /// @return A shared pointer to a JWT plugin AWSCredentialsProvider static std::shared_ptr CreateJwtCredentialsProvider( RsLogger* in_log, const IAMConfiguration& in_config = IAMConfiguration()); /// @brief Creates a Ping plugin AWSCredentialsProvider. /// /// @param in_log The connection or driver log /// @param in_config IAMConfigurations /// /// @return A shared pointer to a Ping plugin AWSCredentialsProvider static std::shared_ptr CreatePingCredentialsProvider( RsLogger* in_log, const IAMConfiguration& in_config = IAMConfiguration()); /// @brief Creates an External plugin AWSCredentialsProvider. /// /// @param in_log The connection or driver log (NOT OWN) /// @param in_config IAMConfigurations /// /// @return A shared pointer to a Ping plugin AWSCredentialsProvider static std::shared_ptr CreateExternalCredentialsProvider( RsLogger* in_log, const IAMConfiguration& in_config = IAMConfiguration()); /// @brief Destructor. ~IAMFactory(); private: /// @brief Constructor. IAMFactory(); }; } } #endif