initial commit

This commit is contained in:
2026-03-20 23:52:10 +01:00
parent 05bea695bd
commit ce04cd8d77
38 changed files with 3006 additions and 52 deletions

View File

@@ -0,0 +1,88 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
namespace CityInfo.API.Controllers
{
[Route("api/authentication")]
[ApiController]
public class AuthenticationController : ControllerBase
{
private readonly IConfiguration _configuration;
public class AuthenticationRequestBody
{
public string? UserName { get; set; }
public string? Password { get; set; }
}
internal class CityInfoUser
{
public int UserId { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string City { get; set; }
public CityInfoUser(
int userId, string userName, string firstName, string lastName, string city)
{
UserId = userId;
UserName = userName;
FirstName = firstName;
LastName = lastName;
City = city;
}
}
public AuthenticationController(IConfiguration configuration)
{
_configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
}
[HttpPost("authenticate")]
public ActionResult<string> Authenticate(AuthenticationRequestBody authenticationRequestBody)
{
var user = ValidateUserCredentials(authenticationRequestBody.UserName, authenticationRequestBody.Password);
if (user == null)
{
return Unauthorized();
}
var securityKey = new SymmetricSecurityKey(Convert.FromBase64String(_configuration["Authentication:SecretForKey"]));
var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var claimsForToken = new List<Claim>
{
new Claim("sub", user.UserId.ToString()),
new Claim("given_name", user.FirstName),
new Claim("family_name", user.LastName),
new Claim("city", user.City)
};
var jwtSecurityToken = new JwtSecurityToken(
_configuration["Authentication:Issuer"],
_configuration["Authentication:Audience"],
claimsForToken,
DateTime.UtcNow,
DateTime.UtcNow.AddHours(1),
signingCredentials);
var tokenToReturn = new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
return Ok(tokenToReturn);
}
private CityInfoUser ValidateUserCredentials(string? userName, string? password)
{
return new CityInfoUser(
1,
userName ?? "",
"Nathan",
"Pire",
"Charleroi");
}
}
}