aboutsummaryrefslogtreecommitdiff
path: root/src/zenhttp/httpclient.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2026-03-18 22:41:38 +0100
committerGitHub Enterprise <[email protected]>2026-03-18 22:41:38 +0100
commitd48a83be4e75d5726cbd37274705b1c5ce7e625d (patch)
tree208811d25ecabff8a8695544bc93ffd1d0a12fbf /src/zenhttp/httpclient.cpp
parentRemove IgnoreChildSignals() from zenserver main (diff)
parentimprove auth token refresh (#863) (diff)
downloadzen-sb/pipes.tar.xz
zen-sb/pipes.zip
Merge branch 'main' into sb/pipessb/pipes
Diffstat (limited to 'src/zenhttp/httpclient.cpp')
-rw-r--r--src/zenhttp/httpclient.cpp37
1 files changed, 24 insertions, 13 deletions
diff --git a/src/zenhttp/httpclient.cpp b/src/zenhttp/httpclient.cpp
index 9f49802a0..3e81d4a8a 100644
--- a/src/zenhttp/httpclient.cpp
+++ b/src/zenhttp/httpclient.cpp
@@ -104,15 +104,10 @@ bool
HttpClientBase::Authenticate()
{
ZEN_TRACE_CPU("HttpClientBase::Authenticate");
- std::optional<HttpClientAccessToken> Token = GetAccessToken();
- if (!Token)
- {
- return false;
- }
- return Token->IsValid();
+ return GetAccessToken().has_value();
}
-const std::optional<HttpClientAccessToken>
+std::optional<std::string>
HttpClientBase::GetAccessToken()
{
ZEN_TRACE_CPU("HttpClientBase::GetAccessToken");
@@ -122,18 +117,34 @@ HttpClientBase::GetAccessToken()
}
{
RwLock::SharedLockScope _(m_AccessTokenLock);
- if (m_CachedAccessToken.IsValid())
+ if (!m_CachedAccessToken.NeedsRefresh())
{
- return m_CachedAccessToken;
+ return m_CachedAccessToken.GetValue();
}
}
RwLock::ExclusiveLockScope _(m_AccessTokenLock);
- if (m_CachedAccessToken.IsValid())
+ if (!m_CachedAccessToken.NeedsRefresh())
+ {
+ return m_CachedAccessToken.GetValue();
+ }
+ HttpClientAccessToken NewAccessToken = m_ConnectionSettings.AccessTokenProvider.value()();
+ if (NewAccessToken.IsValid())
+ {
+ m_CachedAccessToken = NewAccessToken;
+ }
+ else
{
- return m_CachedAccessToken;
+ if (m_CachedAccessToken.HasExpired())
+ {
+ ZEN_WARN("HttpClient refreshed access token is not valid, clearing the cached token as it has expired");
+ m_CachedAccessToken = {};
+ }
+ else
+ {
+ ZEN_WARN("HttpClient refreshed access token is not valid, keeping existing token, it will expire soon");
+ }
}
- m_CachedAccessToken = m_ConnectionSettings.AccessTokenProvider.value()();
- return m_CachedAccessToken;
+ return m_CachedAccessToken.GetValue();
}
//////////////////////////////////////////////////////////////////////////