aboutsummaryrefslogtreecommitdiff
path: root/plugins/VNLib.Plugins.Essentials.Auth.Social
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2024-03-24 21:15:47 -0400
committerLibravatar vnugent <public@vaughnnugent.com>2024-03-24 21:15:47 -0400
commit27b487b6d0befdb2197a58ceadb1f1ac2b337786 (patch)
tree0714fbc25aef9b8a98d747849b2502031bfb9867 /plugins/VNLib.Plugins.Essentials.Auth.Social
parentf2ac807486a00db4ba8486133d567e392f0fe98a (diff)
Squashed commit of the following:
commit 2a114541a3bfddae887adaa98c1ed326b125d511 Author: vnugent <public@vaughnnugent.com> Date: Sun Mar 24 20:53:38 2024 -0400 refactor: pull apart session authorization for future dev commit f8aea6453ddb2d56c1ce2ecb6a9e67d1af523c2e Author: vnugent <public@vaughnnugent.com> Date: Thu Mar 21 14:33:21 2024 -0400 feat: Add optional svg base64 icons for social OAuth2 connections commit cc29bed99dc9e151315cce75e50d55dca306b532 Author: vnugent <public@vaughnnugent.com> Date: Sun Mar 10 21:58:27 2024 -0400 source tree project location updated
Diffstat (limited to 'plugins/VNLib.Plugins.Essentials.Auth.Social')
-rw-r--r--plugins/VNLib.Plugins.Essentials.Auth.Social/src/PortalsEndpoint.cs37
-rw-r--r--plugins/VNLib.Plugins.Essentials.Auth.Social/src/SocialOAuthPortal.cs3
-rw-r--r--plugins/VNLib.Plugins.Essentials.Auth.Social/src/VNLib.Plugins.Essentials.Auth.Social.csproj8
3 files changed, 35 insertions, 13 deletions
diff --git a/plugins/VNLib.Plugins.Essentials.Auth.Social/src/PortalsEndpoint.cs b/plugins/VNLib.Plugins.Essentials.Auth.Social/src/PortalsEndpoint.cs
index 4e5f867..177988f 100644
--- a/plugins/VNLib.Plugins.Essentials.Auth.Social/src/PortalsEndpoint.cs
+++ b/plugins/VNLib.Plugins.Essentials.Auth.Social/src/PortalsEndpoint.cs
@@ -23,44 +23,63 @@
*/
using System;
+using System.Net;
using System.Linq;
+using System.Text.Json;
using System.Collections.Generic;
+using VNLib.Utils.IO;
+using VNLib.Net.Http;
using VNLib.Plugins.Essentials.Endpoints;
using VNLib.Plugins.Extensions.Loading;
-
namespace VNLib.Plugins.Essentials.Auth.Social
{
[ConfigurationName("portals")]
- internal sealed class PortalsEndpoint : UnprotectedWebEndpoint
+ internal sealed class PortalsEndpoint : UnprotectedWebEndpoint, IDisposable
{
- private PortalDefJson[] _portals;
+ private readonly VnMemoryStream _portals;
public PortalsEndpoint(PluginBase plugin, IConfigScope config)
{
string path = config.GetRequiredProperty("path", p => p.GetString()!);
InitPathAndLog(path, plugin.Log);
- //Empty array by default
- _portals = [];
+ _portals = new VnMemoryStream();
}
public void SetPortals(IEnumerable<SocialOAuthPortal> portals)
{
//Convert to json
- _portals = portals.Select(p => new PortalDefJson
+ PortalDefJson[] jsn = portals.Select(p => new PortalDefJson
{
id = p.PortalId,
login = p.LoginEndpoint.Path,
logout = p.LogoutEndpoint?.Path,
+ icon = p.Base64Icon
}).ToArray();
+
+ //Serialize portals array to memory stream
+ JsonSerializer.Serialize(_portals, jsn);
+
+ //Set memory stream to readonly so shallow copy can be returned
+ _ = VnMemoryStream.CreateReadonly(_portals);
}
protected override VfReturnType Get(HttpEntity entity)
{
- //return portals array as json
- return VirtualOkJson(entity, _portals);
+ //return portals array, pre-serialized
+ return VirtualClose(
+ entity,
+ HttpStatusCode.OK,
+ ContentType.Json,
+ _portals!.GetReadonlyShallowCopy()
+ );
+ }
+
+ void IDisposable.Dispose()
+ {
+ _portals?.Dispose();
}
private sealed class PortalDefJson
@@ -70,6 +89,8 @@ namespace VNLib.Plugins.Essentials.Auth.Social
public string? login { get; set; }
public string? logout { get; set; }
+
+ public string? icon { get; set; }
}
}
} \ No newline at end of file
diff --git a/plugins/VNLib.Plugins.Essentials.Auth.Social/src/SocialOAuthPortal.cs b/plugins/VNLib.Plugins.Essentials.Auth.Social/src/SocialOAuthPortal.cs
index 3fe6ddf..db5ed6e 100644
--- a/plugins/VNLib.Plugins.Essentials.Auth.Social/src/SocialOAuthPortal.cs
+++ b/plugins/VNLib.Plugins.Essentials.Auth.Social/src/SocialOAuthPortal.cs
@@ -30,5 +30,6 @@ namespace VNLib.Plugins.Essentials.Auth.Social
/// <param name="PortalId"> The unique identifier for the portal </param>
/// <param name="LoginEndpoint"> Required login endpoint to advertise to the client </param>
/// <param name="LogoutEndpoint"> Optional logout endpoint to advertise to the client </param>
- public record SocialOAuthPortal(string PortalId, IEndpoint LoginEndpoint, IEndpoint? LogoutEndpoint);
+ /// <param name="Base64Icon">Optional base64 image icon src for the client to load and display</param>
+ public record SocialOAuthPortal(string PortalId, IEndpoint LoginEndpoint, IEndpoint? LogoutEndpoint, string? Base64Icon);
} \ No newline at end of file
diff --git a/plugins/VNLib.Plugins.Essentials.Auth.Social/src/VNLib.Plugins.Essentials.Auth.Social.csproj b/plugins/VNLib.Plugins.Essentials.Auth.Social/src/VNLib.Plugins.Essentials.Auth.Social.csproj
index dd6132c..ef49728 100644
--- a/plugins/VNLib.Plugins.Essentials.Auth.Social/src/VNLib.Plugins.Essentials.Auth.Social.csproj
+++ b/plugins/VNLib.Plugins.Essentials.Auth.Social/src/VNLib.Plugins.Essentials.Auth.Social.csproj
@@ -50,10 +50,10 @@
</ItemGroup>
<ItemGroup>
- <ProjectReference Include="..\..\..\..\..\core\lib\Net.Rest.Client\src\VNLib.Net.Rest.Client.csproj" />
- <ProjectReference Include="..\..\..\..\..\core\lib\Plugins.Essentials\src\VNLib.Plugins.Essentials.csproj" />
- <ProjectReference Include="..\..\..\..\Extensions\lib\VNLib.Plugins.Extensions.Loading\src\VNLib.Plugins.Extensions.Loading.csproj" />
- <ProjectReference Include="..\..\..\..\Extensions\lib\VNLib.Plugins.Extensions.Validation\src\VNLib.Plugins.Extensions.Validation.csproj" />
+ <ProjectReference Include="..\..\..\..\core\lib\Net.Rest.Client\src\VNLib.Net.Rest.Client.csproj" />
+ <ProjectReference Include="..\..\..\..\core\lib\Plugins.Essentials\src\VNLib.Plugins.Essentials.csproj" />
+ <ProjectReference Include="..\..\..\..\VNLib.Plugins.Extensions\lib\VNLib.Plugins.Extensions.Loading\src\VNLib.Plugins.Extensions.Loading.csproj" />
+ <ProjectReference Include="..\..\..\..\VNLib.Plugins.Extensions\lib\VNLib.Plugins.Extensions.Validation\src\VNLib.Plugins.Extensions.Validation.csproj" />
</ItemGroup>
<Target Condition="'$(BuildingInsideVisualStudio)' == true" Name="PostBuild" AfterTargets="PostBuildEvent">