299 lines
8.5 KiB
C#
299 lines
8.5 KiB
C#
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using Entidades.Dto;
|
|
using Entidades;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Entidades.Admin;
|
|
using System.Net;
|
|
using Modelo.Facade;
|
|
|
|
namespace Modelo;
|
|
|
|
public class RepositorioUsuarios : RepositorioBase<RepositorioUsuarios>
|
|
{
|
|
public (bool, long) Check2fa(string Email, string Pin)
|
|
{
|
|
var con = Context;
|
|
var cli = con.Clientes.FirstOrDefault(x => x.Email == Email);
|
|
if (cli == null || cli.F2a == null) return (false, 0);
|
|
|
|
if (cli.F2a != Pin) return (false, 0);
|
|
|
|
return (true, cli.Dni);
|
|
}
|
|
|
|
public bool SetF2aPin(string pin, string Email)
|
|
{
|
|
if (pin.Length != 6) return false;
|
|
var con = Context;
|
|
var cli = con.Clientes.FirstOrDefault(x => x.Email == Email);
|
|
if (cli == null) return false;
|
|
|
|
cli.F2a = pin;
|
|
//no Necesita logs esto
|
|
return Guardar(con);
|
|
}
|
|
public bool CheckEmailRecuperacion(string Email, string EmailRecuperacion)
|
|
{
|
|
var con = Context;
|
|
Cliente cli = con.Clientes.FirstOrDefault(x => x.Email == Email);
|
|
if (cli == null) return false;
|
|
if (cli.EmailRecuperacion == EmailRecuperacion)
|
|
{
|
|
base.GenerarLog(con, cli.Dni, "Intento de recuperar Usuario");
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public bool SetEmailRecuperacion(string emailrecuperacion, Cliente cli)
|
|
{
|
|
var con = Context;
|
|
Cliente clii = con.Clientes.FirstOrDefault(x => x.Dni == cli.Dni);
|
|
if (clii == null) return false;
|
|
clii.EmailRecuperacion = emailrecuperacion;
|
|
base.GenerarLog(con, cli.Dni, "Set email Recuperacion");
|
|
return Guardar(con);
|
|
}
|
|
|
|
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)
|
|
{
|
|
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);
|
|
GenerarLog(con, dni, $"Alta Inquilino: {cli.Dni}");
|
|
return Guardar(con);
|
|
}
|
|
|
|
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)
|
|
{
|
|
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);
|
|
GenerarLog(con, dni, $"Alta Propietario: {cli.Dni}");
|
|
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)
|
|
{
|
|
if (logindto.Contraseña == null) return false;
|
|
|
|
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, System.Net.IPAddress? remoteIpAddress)
|
|
{
|
|
var con = Context;
|
|
var usu = con.Clientes.FirstOrDefault(x => x.Email == login.Email);
|
|
if (usu == null) return;
|
|
usu.Token = tokenString;
|
|
GenerarLog(con, usu.Dni, "Login", remoteIpAddress);
|
|
Guardar(con);
|
|
}
|
|
|
|
private void GenerarLog(AlquilaFacilContext con, long dni, string v, IPAddress? remoteIpAddress)
|
|
{
|
|
var Auditoria = new AuditoriaFacade(con);
|
|
Auditoria.GenerarLogLogin(dni, v, remoteIpAddress);
|
|
|
|
}
|
|
|
|
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<Entidades.Admin.UsuarioAdmin> 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, 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)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
cli.Idgrupos.Add(gru);
|
|
GenerarLog(con, dni, $"Añadir grupo: {gru.Nombre}");
|
|
return Guardar(con);
|
|
}
|
|
|
|
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)
|
|
{
|
|
return false;
|
|
}
|
|
cli.Idgrupos.Remove(gru);
|
|
GenerarLog(con, dniresponsable, $"Eliminar de grupo: {gru.Nombre}");
|
|
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;
|
|
}
|
|
GenerarLog(con, cli.Dni, $"Baja cliente id: {cli.Dni}");
|
|
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;
|
|
}
|
|
|
|
public bool PatchUsuario(UpdateUsuarioAdmin dto, long dni, long responsabledni)
|
|
{
|
|
var con = Context;
|
|
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;
|
|
usu.Domicilio = dto.Domicilio;
|
|
|
|
GenerarLog(con, responsabledni, "Patch Usuario");
|
|
return Guardar(con);
|
|
}
|
|
}
|