aboutsummaryrefslogtreecommitdiff
path: root/zenserver/upstream/jupiter.h
diff options
context:
space:
mode:
authorPer Larsson <[email protected]>2022-02-01 10:47:12 +0100
committerPer Larsson <[email protected]>2022-02-01 10:47:12 +0100
commitee00d9db3e0b65667d9b2a792cf0567aff2844fb (patch)
treecda98c52a90ecb1edbafa5651ca31e016037fc05 /zenserver/upstream/jupiter.h
parentMerged main. (diff)
downloadzen-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.h86
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;