From 87a68669cf3912245bcc40014ed991a241a6981d Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Thu, 12 Feb 2026 13:12:14 -0600 Subject: [PATCH] feat(api): add protected connect account endpoint --- src/FiscalOS.API/Accounts/AccountsExtensions.cs | 15 +++++++++++++++ src/FiscalOS.API/Accounts/Connect/Endpoint.cs | 16 ++++++++++++++++ src/FiscalOS.API/Program.cs | 2 ++ src/FiscalOS.API/Usings.cs | 2 ++ .../Integration/ConnectTests.cs | 14 ++++++++++++++ 5 files changed, 49 insertions(+) create mode 100644 src/FiscalOS.API/Accounts/AccountsExtensions.cs create mode 100644 src/FiscalOS.API/Accounts/Connect/Endpoint.cs create mode 100644 tests/FiscalOS.API.Tests/Integration/ConnectTests.cs diff --git a/src/FiscalOS.API/Accounts/AccountsExtensions.cs b/src/FiscalOS.API/Accounts/AccountsExtensions.cs new file mode 100644 index 0000000..d5cfdb7 --- /dev/null +++ b/src/FiscalOS.API/Accounts/AccountsExtensions.cs @@ -0,0 +1,15 @@ +namespace FiscalOS.API.Accounts; + +internal static class AccountsExtensions +{ + private const string RouteGroupPrefix = "/accounts"; + + public static RouteGroupBuilder MapAccountsEndpoints(this WebApplication app) + { + var accountsGroup = app.MapGroup(RouteGroupPrefix).RequireAuthorization(); + + accountsGroup.MapConnectEndpoint(); + + return accountsGroup; + } +} \ No newline at end of file diff --git a/src/FiscalOS.API/Accounts/Connect/Endpoint.cs b/src/FiscalOS.API/Accounts/Connect/Endpoint.cs new file mode 100644 index 0000000..2ec2ba5 --- /dev/null +++ b/src/FiscalOS.API/Accounts/Connect/Endpoint.cs @@ -0,0 +1,16 @@ +namespace FiscalOS.API.Accounts.Connect; + +internal static class Endpoint +{ + private const string Route = "/connect"; + + public static RouteHandlerBuilder MapConnectEndpoint(this RouteGroupBuilder groupBuilder) + { + return groupBuilder.MapPost(Route, HandleAsync); + } + + private static async Task HandleAsync() + { + return Results.Ok(); + } +} \ No newline at end of file diff --git a/src/FiscalOS.API/Program.cs b/src/FiscalOS.API/Program.cs index ab8ec02..6ce3b7d 100644 --- a/src/FiscalOS.API/Program.cs +++ b/src/FiscalOS.API/Program.cs @@ -37,4 +37,6 @@ app.MapLoginEndpoint(); app.MapRefreshEndpoint() .RequireAuthorization(Schemes.AllowExpiredTokens); +app.MapAccountsEndpoints(); + app.Run(); \ No newline at end of file diff --git a/src/FiscalOS.API/Usings.cs b/src/FiscalOS.API/Usings.cs index 57bb61a..cf0e489 100644 --- a/src/FiscalOS.API/Usings.cs +++ b/src/FiscalOS.API/Usings.cs @@ -2,6 +2,8 @@ global using System.ComponentModel.DataAnnotations; global using System.Security.Claims; global using System.Text.Json.Serialization; +global using FiscalOS.API.Accounts; +global using FiscalOS.API.Accounts.Connect; global using FiscalOS.API.Http; global using FiscalOS.API.Login; global using FiscalOS.API.Refresh; diff --git a/tests/FiscalOS.API.Tests/Integration/ConnectTests.cs b/tests/FiscalOS.API.Tests/Integration/ConnectTests.cs new file mode 100644 index 0000000..e017cfd --- /dev/null +++ b/tests/FiscalOS.API.Tests/Integration/ConnectTests.cs @@ -0,0 +1,14 @@ +namespace FiscalOS.API.Tests.Integration; + +public class ConnectTests(TestApi testApi) : IntegrationTest(testApi) +{ + private static readonly Uri ConnectUri = new("/accounts/connect", UriKind.Relative); + + [Fact] + public async Task Connect_WhenCalledWithoutValidToken_ItShouldReturn401WithProblemDetails() + { + var res = await Client.PostAsJsonAsync(ConnectUri, new { }, TestContext.Current.CancellationToken); + + await res.Should().BeProblemDetails(HttpStatusCode.Unauthorized); + } +} \ No newline at end of file