From 139b855c2c2266eb208c2009c37440fd37af3b15 Mon Sep 17 00:00:00 2001 From: fede Date: Mon, 5 May 2025 17:48:05 -0300 Subject: [PATCH] feat: login usuario --- .../Builder/DtoBuilder/UsuarioDtoBuilder.cs | 36 ++++ Aspnet/Controllers/UsuarioController.cs | 42 +++++ Entidades/Dto/UsuarioDto.cs | 11 ++ Front/src/App.svelte | 5 + Front/src/paginas/UsuarioPanel.svelte | 171 ++++++++++++++++++ Front/src/types.d.ts | 9 + Modelo/RepositorioUsuarios.cs | 144 +++++++++------ 7 files changed, 366 insertions(+), 52 deletions(-) create mode 100644 Aspnet/Builder/DtoBuilder/UsuarioDtoBuilder.cs create mode 100644 Aspnet/Controllers/UsuarioController.cs create mode 100644 Entidades/Dto/UsuarioDto.cs create mode 100644 Front/src/paginas/UsuarioPanel.svelte diff --git a/Aspnet/Builder/DtoBuilder/UsuarioDtoBuilder.cs b/Aspnet/Builder/DtoBuilder/UsuarioDtoBuilder.cs new file mode 100644 index 0000000..620cb78 --- /dev/null +++ b/Aspnet/Builder/DtoBuilder/UsuarioDtoBuilder.cs @@ -0,0 +1,36 @@ +using Entidades.Dto; + +namespace AlquilaFacil.Builder; +public class UsuarioDtoBuilder : Builder +{ + public UsuarioDtoBuilder SetDni(long dni) + { + data.Dni = dni; + return this; + } + public UsuarioDtoBuilder SetNombre(string nombre) + { + data.Nombre = nombre; + return this; + } + public UsuarioDtoBuilder SetApellido(string apellido) + { + data.Apellido = apellido; + return this; + } + public UsuarioDtoBuilder SetDomicilio(string domicilio) + { + data.Domicilio = domicilio; + return this; + } + public UsuarioDtoBuilder SetCelular(string celular) + { + data.Celular = celular; + return this; + } + public UsuarioDtoBuilder SetEmail(string email) + { + data.Email = email; + return this; + } +} diff --git a/Aspnet/Controllers/UsuarioController.cs b/Aspnet/Controllers/UsuarioController.cs new file mode 100644 index 0000000..5379e6b --- /dev/null +++ b/Aspnet/Controllers/UsuarioController.cs @@ -0,0 +1,42 @@ +using AlquilaFacil.Builder; +using Microsoft.AspNetCore.Mvc; +using Modelo; +using Entidades; + +namespace AlquilaFacil.Controllers; + +[ApiController] +public class UsuarioController : ControllerBase +{ + [HttpGet("/api/usuario")] + public IActionResult ObtenerInfoUsuario([FromHeader(Name = "Auth")] string Auth) + { + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli == null) return BadRequest(new { message = "No hay un usuari por ese token" }); + + var usu = new UsuarioDtoBuilder() + .SetNombre(cli.Nombre).SetApellido(cli.Apellido) + .SetEmail(cli.Email).SetCelular(cli.Celular) + .SetDni(cli.Dni).SetDomicilio(cli.Domicilio) + .Build(); + return Ok(usu); + } + + public class bodyCambiarContraseña + { + public string contraseña { get; set; } = ""; + } + + [HttpPatch("/api/usuario")] + public IActionResult CambiarPass([FromHeader(Name = "Auth")] string Auth, [FromBody] bodyCambiarContraseña body) + { + Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); + if (cli == null) return BadRequest(new { message = "No hay un usuario por ese token" }); + + if (body.contraseña.Length < 8) return BadRequest(new { message = "Tiene que tener por lo menos 8 caracteres" }); + + bool ret = RepositorioUsuarios.Singleton.CambiarContraseña(body.contraseña, cli); + return ret ? Ok(new { message = "Contraseña cambiada con éxito" }) : BadRequest(new { message = "No se pudo cambiar la contraseña" }); + + } +} diff --git a/Entidades/Dto/UsuarioDto.cs b/Entidades/Dto/UsuarioDto.cs new file mode 100644 index 0000000..ca6fd49 --- /dev/null +++ b/Entidades/Dto/UsuarioDto.cs @@ -0,0 +1,11 @@ +namespace Entidades.Dto; + +public class UsuarioDto +{ + public long Dni { get; set; } + public string Nombre { get; set; } = null!; + public string Apellido { get; set; } = null!; + public string Domicilio { get; set; } = null!; + public string Celular { get; set; } = null!; + public string Email { get; set; } = null!; +} diff --git a/Front/src/App.svelte b/Front/src/App.svelte index 378ac80..8f29e38 100644 --- a/Front/src/App.svelte +++ b/Front/src/App.svelte @@ -33,6 +33,7 @@ import AdminGrupos from "./paginas/AdminGrupos.svelte"; import OtroG from "./paginas/grupos/OtroG.svelte"; import GestionPemisos from "./paginas/GestionPemisos.svelte"; + import UsuarioPanel from "./paginas/UsuarioPanel.svelte"; @@ -167,6 +168,10 @@ + + + + diff --git a/Front/src/paginas/UsuarioPanel.svelte b/Front/src/paginas/UsuarioPanel.svelte new file mode 100644 index 0000000..2b7391f --- /dev/null +++ b/Front/src/paginas/UsuarioPanel.svelte @@ -0,0 +1,171 @@ + + + +
+ +
+
+ +
+
+
+
Información Personal
+
+
+ {#if !user} +
+
+ Cargando... +
+
+ {:else} +
+
DNI
+

{user.dni}

+
+
+
Nombre
+

{user.nombre}

+
+
+
Apellido
+

{user.apellido}

+
+
+
Domicilio
+

{user.domicilio}

+
+
+
Celular
+

{user.celular}

+
+
+
Correo Electrónico
+

{user.email}

+
+
+ +
+ {/if} +
+
+
+ + {#if showmodal} + + {/if} +
diff --git a/Front/src/types.d.ts b/Front/src/types.d.ts index 1e4c9d1..e6a4ff7 100644 --- a/Front/src/types.d.ts +++ b/Front/src/types.d.ts @@ -232,3 +232,12 @@ export type PermisoDto = { id:number, descripcion:string } + +export type ClientePanel = { + dni:number, + nombre:string, + apellido:string, + domicilio:string, + celular:string, + email:string +} diff --git a/Modelo/RepositorioUsuarios.cs b/Modelo/RepositorioUsuarios.cs index b309a94..12432cf 100644 --- a/Modelo/RepositorioUsuarios.cs +++ b/Modelo/RepositorioUsuarios.cs @@ -9,14 +9,29 @@ using Modelo.Facade; namespace Modelo; -public class RepositorioUsuarios: RepositorioBase { - public bool AltaInquilino(Cliente cli, long dni) { +public class RepositorioUsuarios : RepositorioBase +{ + + public bool CambiarContraseña(string pass, Cliente cli) + { var con = Context; - + var clii = con.Clientes.FirstOrDefault(x => x.Dni == cli.Dni); + if (clii == null) return false; + clii.Contraseña = Encoding.UTF8.GetBytes(HacerHash(pass)); + + this.GenerarLog(con, cli.Dni, "Modificada contraseña"); + return Guardar(con); + } + + public bool AltaInquilino(Cliente cli, long dni) + { + var con = Context; + Grupo? grupo; //check por si la cuenta ya existe (puede ser propietario) - Cliente? cli2 = con.Clientes.FirstOrDefault(x=>x.Email == cli.Email); - if (cli2 != null) { + Cliente? cli2 = con.Clientes.FirstOrDefault(x => x.Email == cli.Email); + if (cli2 != null) + { grupo = con.Grupos.Find(2); if (grupo == null || grupo.Id == 0) return false; cli2.Idgrupos.Add(grupo); @@ -25,7 +40,7 @@ public class RepositorioUsuarios: RepositorioBase { grupo = con.Grupos.Find(2); if (grupo == null || grupo.Id == 0) return false; - + con.Clientes.Add(cli); if (cli.Dni == 0) return false; @@ -35,13 +50,15 @@ public class RepositorioUsuarios: RepositorioBase { return Guardar(con); } - public bool AltaPropietario(Cliente cli, long dni) { + public bool AltaPropietario(Cliente cli, long dni) + { var con = Context; - + Grupo? grupo; //check por si la cuenta ya existe (puede ser propietario) Cliente? cli2 = con.Clientes.Find(cli.Dni); - if (cli2 != null) { + if (cli2 != null) + { grupo = con.Grupos.Find(1); if (grupo == null || grupo.Id == 0) return false; cli2.Idgrupos.Add(grupo); @@ -50,7 +67,7 @@ public class RepositorioUsuarios: RepositorioBase { grupo = con.Grupos.Find(1); if (grupo == null || grupo.Id == 0) return false; - + con.Clientes.Add(cli); if (cli.Dni == 0) return false; @@ -60,7 +77,8 @@ public class RepositorioUsuarios: RepositorioBase { return Guardar(con); } - public bool ActualizarPropietario(Cliente cli) { + public bool ActualizarPropietario(Cliente cli) + { var con = Context; Cliente? cliOld = con.Clientes.Find(cli.Dni); if (cliOld == null) return false; @@ -71,9 +89,10 @@ public class RepositorioUsuarios: RepositorioBase { } - public bool CheckUsuario(LoginDto logindto) { - if (logindto.Contraseña ==null)return false; - + public bool CheckUsuario(LoginDto logindto) + { + if (logindto.Contraseña == null) return false; + string Contraseña = HacerHash(logindto.Contraseña); Cliente? usu = Context.Clientes.FirstOrDefault(a => a.Email == logindto.Email); @@ -83,21 +102,24 @@ public class RepositorioUsuarios: RepositorioBase { if (hashdb == Contraseña) return true; return false; - + } - private string HacerHash(string pass) { + private string HacerHash(string pass) + { var buf = SHA256.HashData(Encoding.UTF8.GetBytes(pass)); - return BitConverter.ToString(buf).Replace("-",""); + return BitConverter.ToString(buf).Replace("-", ""); } - public bool CheckToken(string email, string token) { - var usu = Context.Clientes.FirstOrDefault(x => x.Email == email); + public bool CheckToken(string email, string token) + { + var usu = Context.Clientes.FirstOrDefault(x => x.Email == email); if (usu == null) return false; return usu.Token == token; } - public void GuardarToken(LoginDto login, string tokenString, System.Net.IPAddress? remoteIpAddress) { + public void GuardarToken(LoginDto login, string tokenString, System.Net.IPAddress? remoteIpAddress) + { var con = Context; var usu = con.Clientes.FirstOrDefault(x => x.Email == login.Email); if (usu == null) return; @@ -113,40 +135,49 @@ public class RepositorioUsuarios: RepositorioBase { } - public bool CheckGrupo(string email, string grupo) { + public bool CheckGrupo(string email, string grupo) + { var con = Context; - var usu = con.Clientes.Include(x=>x.Idgrupos).FirstOrDefault(x=>x.Email == email); + var usu = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(x => x.Email == email); bool ret = false; - if (usu != null && usu.Idgrupos != null) { - Parallel.ForEach(usu.Idgrupos, (idGrupo, state) => { - if (idGrupo.Nombre == grupo) { + if (usu != null && usu.Idgrupos != null) + { + Parallel.ForEach(usu.Idgrupos, (idGrupo, state) => + { + if (idGrupo.Nombre == grupo) + { ret = true; - state.Break(); + state.Break(); } }); } - + return ret; } - public IEnumerable GetClientes(){ + public IEnumerable GetClientes() + { var con = Context; - var list = con.Clientes.ToList().Select(x => new Entidades.Admin.UsuarioAdmin { + var list = con.Clientes.ToList().Select(x => new Entidades.Admin.UsuarioAdmin + { Dni = x.Dni, Email = x.Email, - Nombre = x.Nombre+" "+x.Apellido, - Habilitado = x.Habilitado}); + Nombre = x.Nombre + " " + x.Apellido, + Habilitado = x.Habilitado + }); return list; } - public bool AñadirClienteAGrupo(string email, string grupo, long dni) { + public bool AñadirClienteAGrupo(string email, string grupo, long dni) + { var con = Context; - + var cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(x => x.Email == email); var gru = con.Grupos.FirstOrDefault(x => x.Nombre == grupo); - - if (cli == null || gru == null) { + + if (cli == null || gru == null) + { return false; } @@ -155,13 +186,15 @@ public class RepositorioUsuarios: RepositorioBase { return Guardar(con); } - public bool EliminarClienteAGrupo(string email, string grupo, long dniresponsable) { + public bool EliminarClienteAGrupo(string email, string grupo, long dniresponsable) + { var con = Context; - + var cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(x => x.Email == email); var gru = con.Grupos.FirstOrDefault(x => x.Nombre == grupo); - - if (cli == null || gru == null) { + + if (cli == null || gru == null) + { return false; } cli.Idgrupos.Remove(gru); @@ -169,40 +202,47 @@ public class RepositorioUsuarios: RepositorioBase { return Guardar(con); } - public bool BajaCliente(long dni) { + public bool BajaCliente(long dni) + { var con = Context; - Cliente? cli = con.Clientes.Include(x=>x.Idgrupos).FirstOrDefault(x=>x.Dni == dni); + Cliente? cli = con.Clientes.Include(x => x.Idgrupos).FirstOrDefault(x => x.Dni == dni); if (cli == null) return false; - - if (cli.Habilitado == 0) { + + if (cli.Habilitado == 0) + { cli.Habilitado = 1; - } else { + } + else + { cli.Habilitado = 0; } GenerarLog(con, cli.Dni, $"Baja cliente id: {cli.Dni}"); return Guardar(con); } - public Cliente? ObtenerClientePorDni(long dni) { + public Cliente? ObtenerClientePorDni(long dni) + { var con = Context; - Cliente? cli = con.Clientes.FirstOrDefault(x=>x.Dni == dni); + Cliente? cli = con.Clientes.FirstOrDefault(x => x.Dni == dni); return cli; } - public Cliente? ObtenerClientePorToken(string token) { + public Cliente? ObtenerClientePorToken(string token) + { var con = Context; - Cliente? cli = con.Clientes.Include(x=>x.NotificacioneDniclienteNavigations).FirstOrDefault(x=>x.Token == token); + Cliente? cli = con.Clientes.Include(x => x.NotificacioneDniclienteNavigations).FirstOrDefault(x => x.Token == token); - if (cli == null|| cli.Dni == 0) return null; + if (cli == null || cli.Dni == 0) return null; return cli; } - public bool PatchUsuario(UpdateUsuarioAdmin dto, long dni, long responsabledni) { + public bool PatchUsuario(UpdateUsuarioAdmin dto, long dni, long responsabledni) + { var con = Context; - var usu = con.Clientes.FirstOrDefault(x=>x.Dni ==dni); + var usu = con.Clientes.FirstOrDefault(x => x.Dni == dni); if (usu == null) return false; - + usu.Nombre = dto.Nombre; usu.Apellido = dto.Apellido; usu.Celular = dto.Celular;