aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/Endpoints
diff options
context:
space:
mode:
Diffstat (limited to 'code/api/Endpoints')
-rw-r--r--code/api/Endpoints/Account/CreateEndpoint.cs2
-rw-r--r--code/api/Endpoints/Account/DeleteEndpoint.cs17
-rw-r--r--code/api/Endpoints/Account/LoginEndpoint.cs8
-rw-r--r--code/api/Endpoints/Account/LogoutEndpoint.cs2
-rw-r--r--code/api/Endpoints/Base.cs36
-rw-r--r--code/api/Endpoints/EndpointBase.cs24
-rw-r--r--code/api/Endpoints/_Root/SessionEndpoint.cs4
7 files changed, 48 insertions, 45 deletions
diff --git a/code/api/Endpoints/Account/CreateEndpoint.cs b/code/api/Endpoints/Account/CreateEndpoint.cs
index 41ffe96..4cea8f1 100644
--- a/code/api/Endpoints/Account/CreateEndpoint.cs
+++ b/code/api/Endpoints/Account/CreateEndpoint.cs
@@ -1,6 +1,6 @@
namespace I2R.Storage.Api.Endpoints.Account;
-public class CreateEndpoint : Base
+public class CreateEndpoint : EndpointBase
{
private readonly AppDatabase _database;
private readonly UserService _userService;
diff --git a/code/api/Endpoints/Account/DeleteEndpoint.cs b/code/api/Endpoints/Account/DeleteEndpoint.cs
new file mode 100644
index 0000000..75a508a
--- /dev/null
+++ b/code/api/Endpoints/Account/DeleteEndpoint.cs
@@ -0,0 +1,17 @@
+namespace I2R.Storage.Api.Endpoints.Account;
+
+public class DeleteEndpoint : EndpointBase
+{
+ private readonly UserService _userService;
+
+ public DeleteEndpoint(UserService userService) {
+ _userService = userService;
+ }
+
+ [HttpDelete("~/account/delete")]
+ public async Task<ActionResult> Handle() {
+ await _userService.MarkUserAsDeletedAsync(LoggedInUser.Id, LoggedInUser.Id);
+ await _userService.LogOutUserAsync(HttpContext);
+ return Ok();
+ }
+} \ No newline at end of file
diff --git a/code/api/Endpoints/Account/LoginEndpoint.cs b/code/api/Endpoints/Account/LoginEndpoint.cs
index 0ffed0f..4f8e434 100644
--- a/code/api/Endpoints/Account/LoginEndpoint.cs
+++ b/code/api/Endpoints/Account/LoginEndpoint.cs
@@ -1,8 +1,6 @@
-using I2R.Storage.Api.Endpoints._Root;
-
namespace I2R.Storage.Api.Endpoints.Account;
-public class LoginEndpoint : Base
+public class LoginEndpoint : EndpointBase
{
private readonly AppDatabase _database;
private readonly UserService _userService;
@@ -25,11 +23,11 @@ public class LoginEndpoint : Base
public async Task<ActionResult> Handle([FromBody] Request request) {
var user = _database.Users.FirstOrDefault(c => c.Username == request.Username);
if (user == default) {
- return BadRequest(_localizer["Invalid username or password"]);
+ return KnownProblem(_localizer["Invalid username or password"]);
}
if (!PasswordHelper.Verify(request.Password, user.Password)) {
- return BadRequest(_localizer["Invalid username or password"]);
+ return KnownProblem(_localizer["Invalid username or password"]);
}
await _userService.LogInUserAsync(HttpContext, user.DefaultClaims());
diff --git a/code/api/Endpoints/Account/LogoutEndpoint.cs b/code/api/Endpoints/Account/LogoutEndpoint.cs
index 064fa9f..de03e8e 100644
--- a/code/api/Endpoints/Account/LogoutEndpoint.cs
+++ b/code/api/Endpoints/Account/LogoutEndpoint.cs
@@ -1,6 +1,6 @@
namespace I2R.Storage.Api.Endpoints.Account;
-public class LogoutEndpoint : Base
+public class LogoutEndpoint : EndpointBase
{
private readonly UserService _userService;
diff --git a/code/api/Endpoints/Base.cs b/code/api/Endpoints/Base.cs
deleted file mode 100644
index 211d1f6..0000000
--- a/code/api/Endpoints/Base.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Security.Claims;
-
-namespace I2R.Storage.Api.Endpoints;
-
-[ApiController]
-[Authorize]
-public class Base : ControllerBase
-{
- public class LoggedInUserModel
- {
- public string Username { get; set; }
- public Guid Id { get; set; }
- public EUserRole Role { get; set; }
-
- public class Public
- {
- public string Id { get; set; }
- public string Username { get; set; }
- public string Role { get; set; }
- }
-
- public Public ForThePeople(HttpContext httpContext) {
- return new Public() {
- Id = httpContext.User.FindFirstValue(AppClaims.USER_ID),
- Username = httpContext.User.FindFirstValue(AppClaims.USERNAME),
- Role = httpContext.User.FindFirstValue(AppClaims.USER_ROLE)
- };
- }
- }
-
- public LoggedInUserModel LoggedInUser => new LoggedInUserModel() {
- Id = HttpContext.User.FindFirstValue(AppClaims.USER_ID).AsGuid(),
- Username = HttpContext.User.FindFirstValue(AppClaims.USERNAME),
- Role = UserRole.FromString(HttpContext.User.FindFirstValue(AppClaims.USER_ROLE))
- };
-} \ No newline at end of file
diff --git a/code/api/Endpoints/EndpointBase.cs b/code/api/Endpoints/EndpointBase.cs
new file mode 100644
index 0000000..a16f40f
--- /dev/null
+++ b/code/api/Endpoints/EndpointBase.cs
@@ -0,0 +1,24 @@
+namespace I2R.Storage.Api.Endpoints;
+
+[ApiController]
+[Authorize]
+public class EndpointBase : ControllerBase
+{
+ protected LoggedInUserModel LoggedInUser => new(User);
+
+ [NonAction]
+ protected ActionResult KnownProblem(string title = default, string subtitle = default, Dictionary<string, string[]> errors = default) {
+ return BadRequest(new KnownProblemModel {
+ Title = title,
+ Subtitle = subtitle,
+ Errors = errors,
+ TraceId = HttpContext.TraceIdentifier
+ });
+ }
+
+ [NonAction]
+ protected ActionResult KnownProblem(KnownProblemModel problem) {
+ problem.TraceId = HttpContext.TraceIdentifier;
+ return BadRequest(problem);
+ }
+} \ No newline at end of file
diff --git a/code/api/Endpoints/_Root/SessionEndpoint.cs b/code/api/Endpoints/_Root/SessionEndpoint.cs
index 8d6ca56..c596dce 100644
--- a/code/api/Endpoints/_Root/SessionEndpoint.cs
+++ b/code/api/Endpoints/_Root/SessionEndpoint.cs
@@ -1,9 +1,9 @@
namespace I2R.Storage.Api.Endpoints._Root;
-public class SessionEndpoint : Base
+public class SessionEndpoint : EndpointBase
{
[HttpGet("~/session")]
public ActionResult<LoggedInUserModel.Public> Handle() {
- return LoggedInUser.ForThePeople(HttpContext);
+ return LoggedInUserModel.ForThePeople(HttpContext);
}
} \ No newline at end of file