diff options
| author | Per Larsson <[email protected]> | 2022-01-26 14:23:47 +0100 |
|---|---|---|
| committer | Per Larsson <[email protected]> | 2022-01-26 14:23:47 +0100 |
| commit | 0c52413f99819ac048ea72414148d289c3f43ab0 (patch) | |
| tree | 6edf7418c60cdd1c6c1e503074935005a653c698 /zenserver/auth/authmgr.cpp | |
| parent | Added auth manager with support for OIDC providers. (diff) | |
| download | zen-0c52413f99819ac048ea72414148d289c3f43ab0.tar.xz zen-0c52413f99819ac048ea72414148d289c3f43ab0.zip | |
Add OpenID auth to auth mgr.
Diffstat (limited to 'zenserver/auth/authmgr.cpp')
| -rw-r--r-- | zenserver/auth/authmgr.cpp | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/zenserver/auth/authmgr.cpp b/zenserver/auth/authmgr.cpp index af579d950..4c97693f9 100644 --- a/zenserver/auth/authmgr.cpp +++ b/zenserver/auth/authmgr.cpp @@ -14,10 +14,7 @@ namespace zen { class AuthMgrImpl final : public AuthMgr { public: - AuthMgrImpl(const AuthConfig& Config) : m_Log(logging::Get("auth")) - { - ZEN_UNUSED(Config); - } + AuthMgrImpl(const AuthConfig& Config) : m_Log(logging::Get("auth")) { ZEN_UNUSED(Config); } virtual ~AuthMgrImpl() {} @@ -46,6 +43,45 @@ public: ZEN_INFO("added OpenID provider '{} - {}'", Params.Name, Params.Url); } + virtual bool AddOpenIdToken(const AddOpenIdTokenParams& Params) final + { + if (Params.ProviderName.empty()) + { + ZEN_WARN("trying add OpenID token with invalid provider name"); + return false; + } + + if (Params.IdentityToken.empty() || Params.RefreshToken.empty() || Params.AccessToken.empty()) + { + ZEN_WARN("trying add invalid OpenID token"); + return false; + } + + bool IsNew = false; + + { + std::unique_lock _(m_TokenMutex); + + const auto InsertResult = m_OpenIdTokens.try_emplace(std::string(Params.ProviderName), + OpenIdToken{.IdentityToken = std::string(Params.IdentityToken), + .RefreshToken = Params.RefreshToken, + .AccessToken = Params.AccessToken}); + + IsNew = InsertResult.second; + } + + if (IsNew) + { + ZEN_INFO("added new OpenID token for provider '{}'", Params.ProviderName); + } + else + { + ZEN_INFO("updating OpenID token for provider '{}'", Params.ProviderName); + } + + return true; + } + private: struct OpenIdProvider { @@ -54,13 +90,24 @@ private: std::string ClientId; }; + struct OpenIdToken + { + std::string_view IdentityToken; + std::string_view RefreshToken; + std::string_view AccessToken; + double ExpireTime{}; + }; + using OpenIdProviderMap = std::unordered_map<std::string, std::unique_ptr<OpenIdProvider>>; + using OpenIdTokenMap = std::unordered_map<std::string, OpenIdToken>; spdlog::logger& Log() { return m_Log; } spdlog::logger& m_Log; - std::mutex m_ProviderMutex; OpenIdProviderMap m_OpenIdProviders; + OpenIdTokenMap m_OpenIdTokens; + std::mutex m_ProviderMutex; + std::shared_mutex m_TokenMutex; }; std::unique_ptr<AuthMgr> |