aboutsummaryrefslogtreecommitdiff
path: root/zenserver/auth/authmgr.cpp
diff options
context:
space:
mode:
authorPer Larsson <[email protected]>2022-01-26 14:23:47 +0100
committerPer Larsson <[email protected]>2022-01-26 14:23:47 +0100
commit0c52413f99819ac048ea72414148d289c3f43ab0 (patch)
tree6edf7418c60cdd1c6c1e503074935005a653c698 /zenserver/auth/authmgr.cpp
parentAdded auth manager with support for OIDC providers. (diff)
downloadzen-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.cpp57
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>