aboutsummaryrefslogtreecommitdiff
path: root/plugins/providers
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/providers')
-rw-r--r--plugins/providers/VNLib.Plugins.Essentials.Auth.Auth0/src/Auth0Portal.cs16
-rw-r--r--plugins/providers/VNLib.Plugins.Essentials.Auth.Auth0/src/Endpoints/LogoutEndpoint.cs40
-rw-r--r--plugins/providers/VNLib.Plugins.Essentials.Auth.Discord/src/DiscordPortal.cs11
-rw-r--r--plugins/providers/VNLib.Plugins.Essentials.Auth.Github/src/GithubPortal.cs13
4 files changed, 34 insertions, 46 deletions
diff --git a/plugins/providers/VNLib.Plugins.Essentials.Auth.Auth0/src/Auth0Portal.cs b/plugins/providers/VNLib.Plugins.Essentials.Auth.Auth0/src/Auth0Portal.cs
index 0ae92f4..2fcc477 100644
--- a/plugins/providers/VNLib.Plugins.Essentials.Auth.Auth0/src/Auth0Portal.cs
+++ b/plugins/providers/VNLib.Plugins.Essentials.Auth.Auth0/src/Auth0Portal.cs
@@ -22,8 +22,6 @@
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
-using System;
-
using VNLib.Plugins.Extensions.Loading;
using VNLib.Plugins.Extensions.Loading.Routing;
using VNLib.Plugins.Essentials.Auth.Social;
@@ -35,24 +33,16 @@ namespace VNLib.Plugins.Essentials.Auth.Auth0
[ServiceExport]
[ConfigurationName(ConfigKey)]
- public sealed class Auth0Portal : IOAuthProvider
+ public sealed class Auth0Portal(PluginBase plugin) : IOAuthProvider
{
internal const string ConfigKey = "auth0";
- private readonly LoginEndpoint _loginEndpoint;
- private readonly LogoutEndpoint _logoutEndpoint;
-
- public Auth0Portal(PluginBase plugin, IConfigScope config)
- {
- //Init the login endpoint
- _loginEndpoint = plugin.Route<LoginEndpoint>();
- _logoutEndpoint = plugin.Route<LogoutEndpoint>();
- }
+ private readonly LoginEndpoint _loginEndpoint = plugin.Route<LoginEndpoint>();
+ private readonly LogoutEndpoint _logoutEndpoint = plugin.Route<LogoutEndpoint>();
///<inheritdoc/>
public SocialOAuthPortal[] GetPortals()
{
-
//Return the Auth0 portal
return [
new SocialOAuthPortal(
diff --git a/plugins/providers/VNLib.Plugins.Essentials.Auth.Auth0/src/Endpoints/LogoutEndpoint.cs b/plugins/providers/VNLib.Plugins.Essentials.Auth.Auth0/src/Endpoints/LogoutEndpoint.cs
index 497357a..5a92968 100644
--- a/plugins/providers/VNLib.Plugins.Essentials.Auth.Auth0/src/Endpoints/LogoutEndpoint.cs
+++ b/plugins/providers/VNLib.Plugins.Essentials.Auth.Auth0/src/Endpoints/LogoutEndpoint.cs
@@ -22,12 +22,14 @@
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
-using VNLib.Utils;
+using System.Net;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using VNLib.Utils.IO;
using VNLib.Plugins.Extensions.Loading;
using VNLib.Plugins.Essentials.Accounts;
using VNLib.Plugins.Essentials.Endpoints;
-using VNLib.Plugins.Essentials.Extensions;
namespace VNLib.Plugins.Essentials.Auth.Auth0.Endpoints
@@ -35,7 +37,7 @@ namespace VNLib.Plugins.Essentials.Auth.Auth0.Endpoints
[ConfigurationName(Auth0Portal.ConfigKey)]
internal sealed class LogoutEndpoint : ProtectedWebEndpoint
{
- private readonly IAsyncLazy<string> ReturnUrl;
+ private readonly IAsyncLazy<VnMemoryStream> ReturnUrl;
public LogoutEndpoint(PluginBase plugin, IConfigScope config)
{
@@ -48,23 +50,35 @@ namespace VNLib.Plugins.Essentials.Auth.Auth0.Endpoints
//Build the return url once the client id is available
ReturnUrl = plugin.GetSecretAsync("auth0_client_id").ToLazy(sr =>
{
- return $"{logoutUrl}?client_id={sr.Result.ToString()}&returnTo={returnToUrl}";
- });
- }
+ //The result we will send to users on logout so then can properly redirect their clients
+ LogoutResult json = new()
+ {
+ Url = $"{logoutUrl}?client_id={sr.Result.ToString()}&returnTo={returnToUrl}"
+ };
- protected override ERRNO PreProccess(HttpEntity entity)
- {
- //Client required to be fully authorized
- return base.PreProccess(entity)
- && entity.IsClientAuthorized(AuthorzationCheckLevel.Critical);
+ VnMemoryStream vms = new();
+ JsonSerializer.Serialize(vms, json);
+ return VnMemoryStream.CreateReadonly(vms);
+ });
}
protected override VfReturnType Post(HttpEntity entity)
{
//Invalidate the login before redirecting the client
entity.InvalidateLogin();
- entity.Redirect(RedirectType.Temporary, ReturnUrl.Value);
- return VfReturnType.VirtualSkip;
+
+ return VirtualClose(
+ entity,
+ HttpStatusCode.OK,
+ Net.Http.ContentType.Json,
+ ReturnUrl.Value.GetReadonlyShallowCopy() //Return stream shallow copy to avoid alloc and copy
+ );
+ }
+
+ sealed class LogoutResult
+ {
+ [JsonPropertyName("url")]
+ public string? Url { get; set; }
}
}
} \ No newline at end of file
diff --git a/plugins/providers/VNLib.Plugins.Essentials.Auth.Discord/src/DiscordPortal.cs b/plugins/providers/VNLib.Plugins.Essentials.Auth.Discord/src/DiscordPortal.cs
index 5b0503e..ed3940f 100644
--- a/plugins/providers/VNLib.Plugins.Essentials.Auth.Discord/src/DiscordPortal.cs
+++ b/plugins/providers/VNLib.Plugins.Essentials.Auth.Discord/src/DiscordPortal.cs
@@ -35,22 +35,15 @@ namespace VNLib.Plugins.Essentials.Auth.Discord
[ServiceExport]
[ConfigurationName(ConfigKey)]
- public sealed class DiscordPortal : IOAuthProvider
+ public sealed class DiscordPortal(PluginBase plugin) : IOAuthProvider
{
internal const string ConfigKey = "discord";
- private readonly DiscordOauth _loginEndpoint;
-
- public DiscordPortal(PluginBase plugin, IConfigScope config)
- {
- //Init the login endpoint
- _loginEndpoint = plugin.Route<DiscordOauth>();
- }
+ private readonly DiscordOauth _loginEndpoint = plugin.Route<DiscordOauth>();
///<inheritdoc/>
public SocialOAuthPortal[] GetPortals()
{
-
//Return the Discord portal
return [
new SocialOAuthPortal(
diff --git a/plugins/providers/VNLib.Plugins.Essentials.Auth.Github/src/GithubPortal.cs b/plugins/providers/VNLib.Plugins.Essentials.Auth.Github/src/GithubPortal.cs
index 99b0ebf..946531d 100644
--- a/plugins/providers/VNLib.Plugins.Essentials.Auth.Github/src/GithubPortal.cs
+++ b/plugins/providers/VNLib.Plugins.Essentials.Auth.Github/src/GithubPortal.cs
@@ -22,8 +22,6 @@
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
-using System;
-
using VNLib.Plugins.Extensions.Loading;
using VNLib.Plugins.Extensions.Loading.Routing;
using VNLib.Plugins.Essentials.Auth.Social;
@@ -35,22 +33,15 @@ namespace VNLib.Plugins.Essentials.Auth.Github
[ServiceExport]
[ConfigurationName(ConfigKey)]
- public sealed class GithubPortal : IOAuthProvider
+ public sealed class GithubPortal(PluginBase plugin) : IOAuthProvider
{
internal const string ConfigKey = "github";
- private readonly GitHubOauth _loginEndpoint;
-
- public GithubPortal(PluginBase plugin, IConfigScope config)
- {
- //Init the login endpoint
- _loginEndpoint = plugin.Route<GitHubOauth>();
- }
+ private readonly GitHubOauth _loginEndpoint = plugin.Route<GitHubOauth>();
///<inheritdoc/>
public SocialOAuthPortal[] GetPortals()
{
-
//Return the github portal
return [
new SocialOAuthPortal(