Feat: Routing andando

Signed-off-by: fede <federico.nicolas.polidoro@gmail.com>
This commit is contained in:
2024-10-15 03:30:01 -03:00
parent 8742c4a39e
commit 9487546fd6
29 changed files with 437 additions and 50 deletions

View File

@@ -7,7 +7,10 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="htmx" Version="1.8.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.8" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.7" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.8.1" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.0.2" />
</ItemGroup>
<ItemGroup>

View File

@@ -27,7 +27,8 @@ public class InquilinoController: Controller
if (inq.Dni < 0 ) return BadRequest("Dni Invalido");
return Redirect("/Inquilino");
// no recuerdo porque esto existe
// return Redirect("/Inquilino");
return Content($"<p>Inquilino {inq.Nombre} agregado exitosamente.</p>", "text/html");
}
@@ -38,4 +39,4 @@ public class InquilinoController: Controller
public IActionResult FormAdd(){
return View();
}
}
}

View File

@@ -1,30 +1,41 @@
using Entidades.Dto;
using Modelo;
using Microsoft.AspNetCore.Mvc;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;
namespace AlquilaFacil.Controllers;
using Entidades.Dto;
using Modelo;
using Microsoft.AspNetCore.Mvc;
namespace AlquilaFacil.Controllers;
[ApiController]
public class LoginController: ControllerBase
{
[HttpPost("api/login")]
public IActionResult Login([FromBody] LoginDto loginDto) {
if (loginDto.Email == String.Empty || loginDto.Contraseña == String.Empty) return Unauthorized(new {message = "Los Datos no llegaron correctamente o faltan"});
var usuario = RepositorioUsuarios.Singleton.CheckUsuario(loginDto);
if (usuario == null) return Unauthorized(new {message = "El usuario no existe o la contraseña es incorrecta"});
public class LoginController: Controller
{
public IActionResult Index(){
return View();
}
string tokenString = GenerarToken(loginDto);
return Ok( new {Token = tokenString, Redirect = "/Menu"});
}
[HttpPost("api/login")]
public IActionResult Login([FromForm] LoginDto loginDto) {
var usuario = RepositorioUsuarios.Singleton.CheckUsuario(loginDto);
if (usuario == null){
return Content(errorAlert);
}
else {
Response.Headers["HX-Redirect"] = "/Home";
return Ok();
}
}
private const string errorAlert = @"
<div class='alert alert-warning alert-dismissible fade show' role='alert'>
<strong>Error!</strong> Usuario o contraseña incorrectos.
</div>";
}
private string GenerarToken(LoginDto loginDto){
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes("ffb2cdc15d472e41a5b626e294c45020");
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, loginDto.Email)
}),
Expires = DateTime.UtcNow.AddHours(1),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
}

View File

@@ -1,30 +1,41 @@
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddControllersWithViews();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowSvelteApp",
builder =>
{
builder.WithOrigins("*")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
if (app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Login}/{action=Index}/{id?}");
app.UseCors("AllowSvelteApp");
app.UseEndpoints(endpoints =>
{
// Mapea los controladores a las rutas predeterminadas.

View File

@@ -1,5 +1,5 @@
@model Entidades.Dto.LoginDto;
<div class="alert alert-danger" role="alert">
"@Model.Usuario"
"@Model"
</div>