Adding authentication and authorization flow

This commit is contained in:
2025-02-26 22:23:15 +01:00
parent 176f149be3
commit 76779afd2e
22 changed files with 562 additions and 19 deletions

View File

@@ -0,0 +1,62 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using BasicDotnetTemplate.MainProject.Core.Attributes;
using BasicDotnetTemplate.MainProject.Models.Api.Request.Auth;
using BasicDotnetTemplate.MainProject.Models.Api.Response;
using BasicDotnetTemplate.MainProject.Services;
namespace BasicDotnetTemplate.MainProject.Controllers
{
[Route("[controller]")]
public class AuthController : BaseController
{
private IAuthService _authService;
public AuthController(
IConfiguration configuration,
IAuthService authService
) : base(configuration)
{
this._authService = authService;
}
[HttpPost("authenticate")]
[ProducesResponseType<string>(StatusCodes.Status200OK)]
[ProducesResponseType<BaseResponse>(StatusCodes.Status404NotFound)]
[ProducesResponseType<BaseResponse>(StatusCodes.Status400BadRequest)]
[ProducesResponseType<BaseResponse>(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> AuthenticateAsync([FromBody] AuthenticateRequest request)
{
try
{
if (
request == null ||
request.Data == null ||
String.IsNullOrEmpty(request.Data.Username) ||
String.IsNullOrEmpty(request.Data.Password)
)
{
return BadRequest("Request is not well formed");
}
var data = await this._authService.AuthenticateAsync(request.Data);
if (data == null)
{
return NotFound();
}
return Success(String.Empty, data);
}
catch (Exception exception)
{
var message = "Something went wrong";
if (!String.IsNullOrEmpty(exception?.Message))
{
message += $". {exception?.Message}";
}
return InternalServerError(message);
}
}
}
}

View File

@@ -37,6 +37,12 @@ namespace BasicDotnetTemplate.MainProject.Controllers
return StatusCode((int)HttpStatusCode.OK, CreateResponse(HttpStatusCode.OK, message, data));
}
protected IActionResult NotModified(string message, object? data = null)
{
message = String.IsNullOrEmpty(message) ? "Not modified" : message;
return StatusCode((int)HttpStatusCode.NotModified, CreateResponse(HttpStatusCode.NotModified, message, data));
}
protected IActionResult NotFound(string message, object? data = null)
{
message = String.IsNullOrEmpty(message) ? "Not found" : message;