aboutsummaryrefslogtreecommitdiff
path: root/zenserver/auth/authmgr.cpp
diff options
context:
space:
mode:
authorPer Larsson <[email protected]>2022-01-25 18:36:41 +0100
committerPer Larsson <[email protected]>2022-01-25 18:36:41 +0100
commit060c3ed4b49c6341d1a917ec728d26bda7e41494 (patch)
tree054b147827833efd715a08f08f85d7d2e25c609c /zenserver/auth/authmgr.cpp
parentFixed missing object in project oplog response. (diff)
downloadzen-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.cpp72
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