diff options
| author | Per Larsson <[email protected]> | 2022-02-01 10:47:12 +0100 |
|---|---|---|
| committer | Per Larsson <[email protected]> | 2022-02-01 10:47:12 +0100 |
| commit | ee00d9db3e0b65667d9b2a792cf0567aff2844fb (patch) | |
| tree | cda98c52a90ecb1edbafa5651ca31e016037fc05 /zenserver/upstream/jupiter.h | |
| parent | Merged main. (diff) | |
| download | zen-ee00d9db3e0b65667d9b2a792cf0567aff2844fb.tar.xz zen-ee00d9db3e0b65667d9b2a792cf0567aff2844fb.zip | |
Parital completed cloud cache token provider interface.
Diffstat (limited to 'zenserver/upstream/jupiter.h')
| -rw-r--r-- | zenserver/upstream/jupiter.h | 86 |
1 files changed, 54 insertions, 32 deletions
diff --git a/zenserver/upstream/jupiter.h b/zenserver/upstream/jupiter.h index bb1797393..057488bcc 100644 --- a/zenserver/upstream/jupiter.h +++ b/zenserver/upstream/jupiter.h @@ -17,6 +17,10 @@ struct ZenCacheValue; +namespace cpr { +class Session; +} + namespace zen { namespace detail { struct CloudCacheSessionState; @@ -32,16 +36,18 @@ class CbObjectView; */ struct CloudCacheAccessToken { + using Clock = std::chrono::system_clock; + using TimePoint = Clock::time_point; + static constexpr int64_t ExpireMarginInSeconds = 30; - std::string Value; - std::chrono::steady_clock::time_point ExpireTime; + std::string Value; + TimePoint ExpireTime; bool IsValid() const { - return !Value.empty() && - ExpireMarginInSeconds < - std::chrono::duration_cast<std::chrono::seconds>(ExpireTime - std::chrono::steady_clock::now()).count(); + return Value.empty() == false && + ExpireMarginInSeconds < std::chrono::duration_cast<std::chrono::seconds>(ExpireTime - Clock::now()).count(); } }; @@ -117,9 +123,10 @@ public: std::vector<IoHash> Filter(std::string_view BucketId, const std::vector<IoHash>& ChunkHashes); private: - inline spdlog::logger& Log() { return m_Log; } - const CloudCacheAccessToken& GetAccessToken(); - bool VerifyAccessToken(long StatusCode); + inline spdlog::logger& Log() { return m_Log; } + cpr::Session& GetSession(); + CloudCacheAccessToken GetAccessToken(); + bool VerifyAccessToken(long StatusCode); CloudCacheResult CacheTypeExists(std::string_view TypeId, const IoHash& Key); @@ -130,19 +137,38 @@ private: detail::CloudCacheSessionState* m_SessionState; }; +/** + * Access token provider interface + */ +class CloudCacheTokenProvider +{ +public: + virtual ~CloudCacheTokenProvider() = default; + + virtual CloudCacheAccessToken GetAccessToken() = 0; + + static std::unique_ptr<CloudCacheTokenProvider> MakeFromStaticToken(CloudCacheAccessToken Token); + + struct OAuthClientCredentialsParams + { + std::string_view Url; + std::string_view ClientId; + std::string_view ClientSecret; + }; + + static std::unique_ptr<CloudCacheTokenProvider> MakeFromOAuthClientCredentials(const OAuthClientCredentialsParams& Params); +}; + struct CloudCacheClientOptions { - std::string_view Name; - std::string_view ServiceUrl; - std::string_view DdcNamespace; - std::string_view BlobStoreNamespace; - std::string_view OAuthProvider; - std::string_view OAuthClientId; - std::string_view OAuthSecret; - std::string_view AccessToken; - std::chrono::milliseconds ConnectTimeout{5000}; - std::chrono::milliseconds Timeout{}; - bool UseLegacyDdc = false; + std::string_view Name; + std::string_view ServiceUrl; + std::string_view DdcNamespace; + std::string_view BlobStoreNamespace; + std::chrono::milliseconds ConnectTimeout{5000}; + std::chrono::milliseconds Timeout{}; + std::unique_ptr<CloudCacheTokenProvider> TokenProvider; + bool UseLegacyDdc = false; }; /** @@ -159,23 +185,19 @@ public: std::string_view BlobStoreNamespace() const { return m_BlobStoreNamespace; } std::string_view ServiceUrl() const { return m_ServiceUrl; } bool IsValid() const { return m_IsValid; } + void SetAccessToken(CloudCacheAccessToken Token); spdlog::logger& Logger() { return m_Log; } private: - spdlog::logger& m_Log; - std::string m_ServiceUrl; - std::string m_OAuthDomain; - std::string m_OAuthUriPath; - std::string m_OAuthFullUri; - std::string m_DdcNamespace; - std::string m_BlobStoreNamespace; - std::string m_OAuthClientId; - std::string m_OAuthSecret; - std::string m_AccessToken; - std::chrono::milliseconds m_ConnectTimeout{}; - std::chrono::milliseconds m_Timeout{}; - bool m_IsValid = false; + spdlog::logger& m_Log; + std::unique_ptr<CloudCacheTokenProvider> m_TokenProvider; + std::string m_ServiceUrl; + std::string m_DdcNamespace; + std::string m_BlobStoreNamespace; + std::chrono::milliseconds m_ConnectTimeout{}; + std::chrono::milliseconds m_Timeout{}; + bool m_IsValid = false; RwLock m_SessionStateLock; std::list<detail::CloudCacheSessionState*> m_SessionStateCache; |