diff options
| author | Per Larsson <[email protected]> | 2022-01-25 18:36:41 +0100 |
|---|---|---|
| committer | Per Larsson <[email protected]> | 2022-01-25 18:36:41 +0100 |
| commit | 060c3ed4b49c6341d1a917ec728d26bda7e41494 (patch) | |
| tree | 054b147827833efd715a08f08f85d7d2e25c609c /zenserver/auth/authmgr.cpp | |
| parent | Fixed missing object in project oplog response. (diff) | |
| download | zen-060c3ed4b49c6341d1a917ec728d26bda7e41494.tar.xz zen-060c3ed4b49c6341d1a917ec728d26bda7e41494.zip | |
Added auth manager with support for OIDC providers.
Diffstat (limited to 'zenserver/auth/authmgr.cpp')
| -rw-r--r-- | zenserver/auth/authmgr.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/zenserver/auth/authmgr.cpp b/zenserver/auth/authmgr.cpp new file mode 100644 index 000000000..af579d950 --- /dev/null +++ b/zenserver/auth/authmgr.cpp @@ -0,0 +1,72 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include <auth/authmgr.h> +#include <zencore/logging.h> + +#include <chrono> +#include <condition_variable> +#include <shared_mutex> +#include <thread> +#include <unordered_map> + +namespace zen { + +class AuthMgrImpl final : public AuthMgr +{ +public: + AuthMgrImpl(const AuthConfig& Config) : m_Log(logging::Get("auth")) + { + ZEN_UNUSED(Config); + } + + virtual ~AuthMgrImpl() {} + + virtual void AddOpenIdProvider(const AddOpenIdProviderParams& Params) final + { + std::string NewProviderName = std::string(Params.Name); + + OpenIdProvider* NewProvider = nullptr; + + { + std::unique_lock _(m_ProviderMutex); + + if (m_OpenIdProviders.contains(NewProviderName)) + { + return; + } + + auto InsertResult = m_OpenIdProviders.emplace(NewProviderName, std::make_unique<OpenIdProvider>()); + NewProvider = InsertResult.first->second.get(); + } + + NewProvider->Name = std::string(Params.Name); + NewProvider->Url = std::string(Params.Url); + NewProvider->ClientId = std::string(Params.ClientId); + + ZEN_INFO("added OpenID provider '{} - {}'", Params.Name, Params.Url); + } + +private: + struct OpenIdProvider + { + std::string Name; + std::string Url; + std::string ClientId; + }; + + using OpenIdProviderMap = std::unordered_map<std::string, std::unique_ptr<OpenIdProvider>>; + + spdlog::logger& Log() { return m_Log; } + + spdlog::logger& m_Log; + std::mutex m_ProviderMutex; + OpenIdProviderMap m_OpenIdProviders; +}; + +std::unique_ptr<AuthMgr> +MakeAuthMgr(const AuthConfig& Config) +{ + return std::make_unique<AuthMgrImpl>(Config); +} + +} // namespace zen |