From 99952991919076bfe247d5e1a7677e414755cd56 Mon Sep 17 00:00:00 2001 From: vnugent Date: Sat, 28 Jan 2023 13:41:09 -0500 Subject: Fix FBMMessageHeader default and session connection status --- libs/VNLib.Plugins.Sessions.Cache.Client/src/GlobalCacheStore.cs | 3 +++ libs/VNLib.Plugins.Sessions.Cache.Client/src/IRemoteCacheStore.cs | 5 +++++ libs/VNLib.Plugins.Sessions.Cache.Client/src/SessionCacheClient.cs | 6 ++++++ libs/VNLib.Plugins.Sessions.OAuth/src/O2SessionProviderEntry.cs | 2 +- libs/VNLib.Plugins.Sessions.OAuth/src/OAuth2SessionProvider.cs | 5 +++-- libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs | 4 ++-- libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProviderEntry.cs | 2 +- 7 files changed, 21 insertions(+), 6 deletions(-) diff --git a/libs/VNLib.Plugins.Sessions.Cache.Client/src/GlobalCacheStore.cs b/libs/VNLib.Plugins.Sessions.Cache.Client/src/GlobalCacheStore.cs index df3c564..55f5016 100644 --- a/libs/VNLib.Plugins.Sessions.Cache.Client/src/GlobalCacheStore.cs +++ b/libs/VNLib.Plugins.Sessions.Cache.Client/src/GlobalCacheStore.cs @@ -43,6 +43,9 @@ namespace VNLib.Plugins.Sessions.Cache.Client _cache = globalCache ?? throw new ArgumentNullException(nameof(globalCache)); } + /// + public bool IsConnected => _cache.IsConnected; + /// public Task AddOrUpdateObjectAsync(string objectId, string? newId, T obj, CancellationToken cancellationToken = default) { diff --git a/libs/VNLib.Plugins.Sessions.Cache.Client/src/IRemoteCacheStore.cs b/libs/VNLib.Plugins.Sessions.Cache.Client/src/IRemoteCacheStore.cs index 2a8bd49..ce95a6b 100644 --- a/libs/VNLib.Plugins.Sessions.Cache.Client/src/IRemoteCacheStore.cs +++ b/libs/VNLib.Plugins.Sessions.Cache.Client/src/IRemoteCacheStore.cs @@ -44,5 +44,10 @@ namespace VNLib.Plugins.Sessions.Cache.Client Task AddOrUpdateObjectAsync(string objectId, string? newId, T obj, CancellationToken cancellationToken = default); Task DeleteObjectAsync(string objectId, CancellationToken cancellationToken = default); + + /// + /// Gets a value that determines if the remote cache store is available + /// + bool IsConnected { get; } } } diff --git a/libs/VNLib.Plugins.Sessions.Cache.Client/src/SessionCacheClient.cs b/libs/VNLib.Plugins.Sessions.Cache.Client/src/SessionCacheClient.cs index b729803..20ea947 100644 --- a/libs/VNLib.Plugins.Sessions.Cache.Client/src/SessionCacheClient.cs +++ b/libs/VNLib.Plugins.Sessions.Cache.Client/src/SessionCacheClient.cs @@ -101,6 +101,12 @@ namespace VNLib.Plugins.Sessions.Cache.Client /// protected IRemoteCacheStore Store { get; } + /// + /// Gets a value that determines if the backing is connected + /// to a server + /// + public bool IsConnected => Store.IsConnected; + /// /// Initializes a new /// diff --git a/libs/VNLib.Plugins.Sessions.OAuth/src/O2SessionProviderEntry.cs b/libs/VNLib.Plugins.Sessions.OAuth/src/O2SessionProviderEntry.cs index 68a715e..92ea020 100644 --- a/libs/VNLib.Plugins.Sessions.OAuth/src/O2SessionProviderEntry.cs +++ b/libs/VNLib.Plugins.Sessions.OAuth/src/O2SessionProviderEntry.cs @@ -57,7 +57,7 @@ namespace VNLib.Plugins.Sessions.OAuth public bool CanProcess(IHttpEvent entity) { //If authorization header is set try to process as oauth2 session - return _sessions != null && entity.Server.Headers.HeaderSet(System.Net.HttpRequestHeader.Authorization); + return _sessions != null && _sessions.IsConnected && entity.Server.Headers.HeaderSet(System.Net.HttpRequestHeader.Authorization); } ValueTask ISessionProvider.GetSessionAsync(IHttpEvent entity, CancellationToken cancellationToken) diff --git a/libs/VNLib.Plugins.Sessions.OAuth/src/OAuth2SessionProvider.cs b/libs/VNLib.Plugins.Sessions.OAuth/src/OAuth2SessionProvider.cs index 2e41a5f..7047e6e 100644 --- a/libs/VNLib.Plugins.Sessions.OAuth/src/OAuth2SessionProvider.cs +++ b/libs/VNLib.Plugins.Sessions.OAuth/src/OAuth2SessionProvider.cs @@ -40,8 +40,8 @@ using VNLib.Plugins.Essentials.Oauth; using VNLib.Plugins.Essentials.Sessions; using VNLib.Plugins.Essentials.Oauth.Tokens; using VNLib.Plugins.Essentials.Oauth.Applications; -using VNLib.Plugins.Extensions.Loading.Events; using VNLib.Plugins.Extensions.Loading; +using VNLib.Plugins.Extensions.Loading.Events; namespace VNLib.Plugins.Sessions.OAuth { @@ -80,6 +80,7 @@ namespace VNLib.Plugins.Sessions.OAuth _ = CacheTable.Remove(session.SessionID); } } + /// public async ValueTask GetSessionAsync(IHttpEvent entity, CancellationToken cancellationToken) @@ -99,7 +100,7 @@ namespace VNLib.Plugins.Sessions.OAuth } //Limit max number of waiting clients - if (WaitingConnections > MaxConnections) + if (!IsConnected || WaitingConnections > MaxConnections) { //Set 503 for temporary unavail entity.CloseResponse(HttpStatusCode.ServiceUnavailable); diff --git a/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs b/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs index 705661c..0fd981b 100644 --- a/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs +++ b/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProvider.cs @@ -94,8 +94,8 @@ namespace VNLib.Plugins.Sessions.VNCache return SessionHandle.Empty; } - //Limit max number of waiting clients - if (WaitingConnections > MaxConnections) + //Limit max number of waiting clients and make sure were connected + if (!IsConnected || WaitingConnections > MaxConnections) { //Set 503 for temporary unavail entity.CloseResponse(System.Net.HttpStatusCode.ServiceUnavailable); diff --git a/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProviderEntry.cs b/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProviderEntry.cs index 1aa92a7..f0a7caa 100644 --- a/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProviderEntry.cs +++ b/libs/VNLib.Plugins.Sessions.VNCache/src/WebSessionProviderEntry.cs @@ -46,7 +46,7 @@ namespace VNLib.Plugins.Sessions.VNCache private WebSessionProvider? _sessions; //Web sessions can always be provided so long as cache is loaded - public bool CanProcess(IHttpEvent entity) => _sessions != null; + public bool CanProcess(IHttpEvent entity) => _sessions != null && _sessions.IsConnected; ValueTask ISessionProvider.GetSessionAsync(IHttpEvent entity, CancellationToken cancellationToken) { -- cgit