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; 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) { grupo = con.Grupos.Find(2); if (grupo == null || grupo.Id == 0) return false; cli2.Idgrupos.Add(grupo); return Guardar(con); } grupo = con.Grupos.Find(2); if (grupo == null || grupo.Id == 0) return false; con.Clientes.Add(cli); if (cli.Dni == 0) return false; cli.Idgrupos.Add(grupo); return Guardar(con); } public bool AltaPropietario(Cliente cli) { 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) { grupo = con.Grupos.Find(1); if (grupo == null || grupo.Id == 0) return false; cli2.Idgrupos.Add(grupo); return Guardar(con); } grupo = con.Grupos.Find(1); if (grupo == null || grupo.Id == 0) return false; con.Clientes.Add(cli); 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; 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; } public IEnumerable GetClientes(){ var con = Context; 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}); return list; } public bool AñadirClienteAGrupo(string email, string grupo) { 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) { return false; } cli.Idgrupos.Add(gru); return Guardar(con); } public bool EliminarClienteAGrupo(string email, string grupo) { 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) { return false; } cli.Idgrupos.Remove(gru); return Guardar(con); } public bool BajaCliente(long dni) { var con = Context; Cliente? cli = con.Clientes.Include(x=>x.Idgrupos).FirstOrDefault(x=>x.Dni == dni); if (cli == null) return false; if (cli.Habilitado == 0) { cli.Habilitado = 1; } else { cli.Habilitado = 0; } return Guardar(con); } public Cliente? ObtenerClientePorDni(long dni) { var con = Context; Cliente? cli = con.Clientes.FirstOrDefault(x=>x.Dni == dni); return cli; } public Cliente? ObtenerClientePorToken(string token) { var con = Context; Cliente? cli = con.Clientes.Include(x=>x.NotificacioneDniclienteNavigations).FirstOrDefault(x=>x.Token == token); if (cli == null|| cli.Dni == 0) return null; return cli; } }