using System.Security.Cryptography; using System.Text; using Entidades.Dto; using Entidades; using Microsoft.EntityFrameworkCore; namespace Modelo; public class RepositorioUsuarios: RepositorioBase { public bool AltaInquilino(Cliente cli) { var con = Context; //check por si la cuenta ya existe (puede ser propietario) Cliente? cli2 = con.Clientes.Find(cli.Dni); if (cli2 != null) { cli = cli2; } var grupo = con.Grupos.Find(2); if (grupo == null || grupo.Id == 0) return false; con.Clientes.Add(cli); Guardar(con); con = Context; cli = con.Clientes.Find(cli.Dni) ?? new(); if (cli.Dni == 0) return false; cli.Idgrupos.Add(grupo); return Guardar(con); } public bool AltaPropietario(Cliente cli) { var con = Context; //check por si la cuenta ya existe (puede ser propietario) Cliente? cli2 = con.Clientes.Find(cli.Dni); if (cli2 != null) { cli = cli2; } var grupo = con.Grupos.Find(1); if (grupo == null || grupo.Id == 0) return false; con.Clientes.Add(cli); Guardar(con); con = Context; cli = con.Clientes.Find(cli.Dni) ?? new(); if (cli.Dni == 0) return false; cli.Idgrupos.Add(grupo); return Guardar(con); } public bool ActualizarPropietario(Cliente cli) { var con = Context; Cliente? cliOld = con.Clientes.Find(cli.Dni); if (cliOld == null) return false; if (cli.Dni != cliOld.Dni) return false; cliOld = cli; return Guardar(con); } public bool CheckUsuario(LoginDto logindto) { string Contraseña = HacerHash(logindto.Contraseña); Cliente? usu = Context.Clientes.FirstOrDefault(a => a.Email == logindto.Email); if (usu == null) return false; string hashdb = Encoding.UTF8.GetString(usu.Contraseña); if (hashdb == Contraseña) return true; return false; } private string HacerHash(string pass) { var buf = SHA256.HashData(Encoding.UTF8.GetBytes(pass)); return BitConverter.ToString(buf).Replace("-",""); } public bool CheckToken(string email, string token) { var usu = Context.Clientes.FirstOrDefault(x => x.Email == email); if (usu == null) return false; #if DEBUG //Console.WriteLine(token + "\n" +usu.Token); #endif return usu.Token == token; } public void GuardarToken(LoginDto login, string tokenString) { var con = Context; var usu = con.Clientes.FirstOrDefault(x => x.Email == login.Email); if (usu == null) return; usu.Token = tokenString; Guardar(con); } public bool CheckGrupo(string email, string grupo) { var con = Context; 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) { ret = true; state.Break(); } }); } return ret; } }