Skip to content

Commit 7ec8d6a

Browse files
committed
Tidy up, fix errors
1 parent 581075d commit 7ec8d6a

17 files changed

Lines changed: 47 additions & 1446 deletions

File tree

SAPSec.Web/Authentication/DsiAuthenticationExtensions.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,23 @@ private static void ConfigureCookieOptions(CookieAuthenticationOptions options,
8888
options.ExpireTimeSpan = TimeSpan.FromMinutes(config.TokenExpiryMinutes);
8989
options.SlidingExpiration = true;
9090
options.LoginPath = Routes.SignIn;
91-
options.AccessDeniedPath = Routes.AccessDenied;
91+
options.AccessDeniedPath = Routes.AccessDenied;
92+
93+
// Override login redirect for unauthenticated requests
94+
options.Events.OnRedirectToLogin = context =>
95+
{
96+
// Set status code to 401 Unauthorized
97+
context.Response.StatusCode = StatusCodes.Status401Unauthorized;
98+
return Task.CompletedTask;
99+
};
100+
101+
// Override access-denied redirect for unauthorized requests
102+
options.Events.OnRedirectToAccessDenied = context =>
103+
{
104+
// Set status code to 403 Forbidden
105+
context.Response.StatusCode = StatusCodes.Status403Forbidden;
106+
return Task.CompletedTask;
107+
};
92108
}
93109

94110
private static void ConfigureOpenIdConnectOptions(OpenIdConnectOptions options, DsiConfiguration config)

SAPSec.Web/Authentication/DsiAuthenticationHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ await userService.SetCurrentOrganisationAsync(
149149
}
150150
else if (user.Organisations.Count > 1)
151151
{
152-
context.Properties!.RedirectUri = Routes.SchoolSearch;
152+
context.Properties!.RedirectUri = Routes.FindASchool;
153153
}
154154
}
155155

SAPSec.Web/Authorization/DsiAuthorizationHandler.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ void Fail(string message)
3838
if (!org.IsEstablishment || org.Urn is null)
3939
{
4040
logger.LogInformation("User Organisation is not an Establishment or has a null Urn.");
41-
return;
4241
}
4342

4443
context.Succeed(requirement);

SAPSec.Web/Constants/Routes.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
public static class Routes
44
{
5-
public const string SignIn = "/Auth/sign-in";
6-
public const string AccessDenied = "/error/403";
75
public const string Home = "/";
8-
public const string SchoolSearch = "/find-a-school";
9-
public const string Error = "/error";
6+
public const string SignIn = "/auth/signin";
7+
public const string FindASchool = "/find-a-school";
108
public static string School(string urn) => $"/school/{urn}";
9+
public const string Error = "/error";
10+
public const string AccessDenied = "/error/403";
1111
}

SAPSec.Web/Controllers/AuthController.cs

Lines changed: 4 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@
33
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
44
using Microsoft.AspNetCore.Authorization;
55
using Microsoft.AspNetCore.Mvc;
6-
using Microsoft.AspNetCore.Mvc.ViewEngines;
76
using SAPSec.Core.Interfaces.Services;
8-
using SAPSec.Core.Model;
97

108
namespace SAPSec.Web.Controllers;
119

12-
[Route("[controller]")]
10+
[Route("auth")]
1311
public class AuthController(
1412
IUserService userService,
1513
ILogger<AuthController> logger) : Controller
@@ -19,29 +17,14 @@ public class AuthController(
1917

2018
private static class Routes
2119
{
22-
public const string SignIn = "sign-in";
23-
public const string SignOut = "sign-out";
20+
public const string SignIn = "signin";
21+
public const string SignOut = "signout";
2422
public const string SignedOut = "signed-out";
25-
public const string SignOutCallback = "SignOutCallback";
26-
public const string SelectOrganisation = "select-organisation";
27-
}
28-
29-
private static class Defaults
30-
{
31-
public const string ReturnUrl = "/find-a-school";
3223
}
3324

3425
private static class LogMessages
3526
{
3627
public const string UserSigningOut = "User {UserId} signing out";
37-
public const string OrganisationSelected = "User {UserId} selected organisation {OrganisationId}";
38-
public const string OrganisationSelectionFailed = "Failed to set organisation {OrganisationId} for user {UserId}";
39-
public const string UserNotFound = "User not found or has no organisations";
40-
}
41-
42-
private static class ErrorMessages
43-
{
44-
public const string OrganisationIdRequired = "Organisation ID is required";
4528
}
4629

4730
[HttpGet(Routes.SignIn)]
@@ -56,46 +39,7 @@ public IActionResult SignIn(string? returnUrl = null)
5639
return ChallengeWithRedirect(returnUrl);
5740
}
5841

59-
[HttpGet(Routes.SelectOrganisation)]
60-
[Authorize]
61-
public async Task<IActionResult> SelectOrganisation(string? returnUrl = null)
62-
{
63-
var user = await _userService.GetUserFromClaimsAsync(User);
64-
65-
if (!HasValidOrganisations(user))
66-
{
67-
_logger.LogWarning(LogMessages.UserNotFound);
68-
return RedirectToProblem();
69-
}
70-
71-
ViewBag.ReturnUrl = returnUrl;
72-
return View(user);
73-
}
74-
75-
[HttpPost(Routes.SelectOrganisation)]
76-
[Authorize]
77-
[ValidateAntiForgeryToken]
78-
public async Task<IActionResult> SelectOrganisationPost(string organisationId, string? returnUrl = null)
79-
{
80-
if (string.IsNullOrEmpty(organisationId))
81-
{
82-
return BadRequest(ErrorMessages.OrganisationIdRequired);
83-
}
84-
85-
var success = await _userService.SetCurrentOrganisationAsync(User, organisationId);
86-
87-
if (!success)
88-
{
89-
LogOrganisationSelectionFailed(organisationId);
90-
return RedirectToProblem();
91-
}
92-
93-
LogOrganisationSelected(organisationId);
94-
return RedirectToLocal(returnUrl);
95-
}
96-
9742
[HttpGet(Routes.SignOut)]
98-
[HttpGet(Routes.SignOutCallback)]
9943
[AllowAnonymous]
10044
public new async Task<IActionResult> SignOut()
10145
{
@@ -127,16 +71,11 @@ private bool IsUserAuthenticated()
12771
return _userService.IsAuthenticated(User);
12872
}
12973

130-
private static bool HasValidOrganisations(User? user)
131-
{
132-
return user?.Organisations.Any() == true;
133-
}
134-
13574
private IActionResult ChallengeWithRedirect(string? returnUrl)
13675
{
13776
var properties = new AuthenticationProperties
13877
{
139-
RedirectUri = returnUrl ?? Defaults.ReturnUrl
78+
RedirectUri = returnUrl ?? Constants.Routes.FindASchool
14079
};
14180

14281
return Challenge(properties, OpenIdConnectDefaults.AuthenticationScheme);
@@ -169,11 +108,6 @@ private IActionResult RedirectToHome()
169108
return RedirectToAction("Index", "Home");
170109
}
171110

172-
private IActionResult RedirectToProblem()
173-
{
174-
return RedirectToAction("StatusCodeError", "Error", new { statusCode = 500 });
175-
}
176-
177111
#endregion
178112

179113
#region Logging Methods
@@ -184,17 +118,5 @@ private void LogUserSigningOut()
184118
_logger.LogInformation(LogMessages.UserSigningOut, userId);
185119
}
186120

187-
private void LogOrganisationSelected(string organisationId)
188-
{
189-
var userId = _userService.GetUserId(User);
190-
_logger.LogInformation(LogMessages.OrganisationSelected, userId, organisationId);
191-
}
192-
193-
private void LogOrganisationSelectionFailed(string organisationId)
194-
{
195-
var userId = _userService.GetUserId(User);
196-
_logger.LogWarning(LogMessages.OrganisationSelectionFailed, organisationId, userId);
197-
}
198-
199121
#endregion
200122
}

SAPSec.Web/Controllers/ConnectSchoolController.cs

Lines changed: 0 additions & 15 deletions
This file was deleted.

SAPSec.Web/Controllers/OrganisationController.cs

Lines changed: 0 additions & 112 deletions
This file was deleted.

SAPSec.Web/Controllers/SchoolHomeController.cs renamed to SAPSec.Web/Controllers/UserController.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@
55

66
namespace SAPSec.Web.Controllers;
77

8-
[Authorize]
9-
public class SchoolHomeController(
8+
[Authorize]
9+
[Route("user")]
10+
public class UserController(
1011
IUserService userService,
11-
ILogger<SchoolHomeController> logger) : Controller
12+
ILogger<UserController> logger) : Controller
1213
{
1314
private readonly IUserService _userService = userService ?? throw new ArgumentNullException(nameof(userService));
14-
private readonly ILogger<SchoolHomeController> _logger = logger ?? throw new ArgumentNullException(nameof(logger));
15+
private readonly ILogger<UserController> _logger = logger ?? throw new ArgumentNullException(nameof(logger));
1516

16-
[HttpGet]
17+
[HttpGet]
18+
[Route("redirect")]
1719
public async Task<IActionResult> Index()
1820
{
1921
var user = await _userService.GetUserFromClaimsAsync(User);
@@ -31,7 +33,7 @@ public async Task<IActionResult> Index()
3133
if (!org.IsEstablishment || org.Urn is null)
3234
{
3335
_logger.LogInformation("User Organisation is not an Establishment or has a null Urn, redirecting to school search.");
34-
return Redirect(Routes.SchoolSearch);
36+
return Redirect(Routes.FindASchool);
3537
}
3638

3739
return Redirect(Routes.School(org.Urn));

SAPSec.Web/Views/ConnectSchool/Index.cshtml

Lines changed: 0 additions & 13 deletions
This file was deleted.

SAPSec.Web/Views/Home/Index.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040

4141
<a asp-controller="Auth"
4242
asp-action="SignIn"
43-
asp-route-returnUrl="/SchoolHome"
43+
asp-route-returnUrl="/user/redirect"
4444
role="button"
4545
draggable="false"
4646
class="govuk-button govuk-button--start govuk-!-margin-top-2 govuk-!-margin-bottom-8"

0 commit comments

Comments
 (0)