public IHttpActionResult ChangePassword(ChangePassword cambioClave)
        {
            if (string.IsNullOrEmpty(cambioClave.Password)) throw new Exception("Ingrese la clave actual");

            if (cambioClave.Password == cambioClave.NewPassword) throw new Exception("La clave nueva no debe ser igual a la anterior");

            if (cambioClave.NewPassword != cambioClave.NewPasswordConfirm) throw new Exception("La clave nueva no coincide");

            var bytesPwd = Convert.FromBase64String(cambioClave.NewPassword);
            var Pwd = Encoding.UTF8.GetString(bytesPwd);

            if (Pwd.Length < 4) throw new Exception("la nueva clave es muy corta");

            using (var entities = new MoneyPoints_dlloEntities())
            {
                var user = entities.Usuarios.FirstOrDefault(u => u.UsuarioId == cambioClave.UsuarioId && u.Password == cambioClave.Password);

                if (user == null) throw new Exception("Clave actual incorrecta");

                user.Password = cambioClave.NewPassword;
                entities.Entry(user).State = System.Data.Entity.EntityState.Modified;
                entities.SaveChanges();
            }

            return Ok();
        }
        public IHttpActionResult Authenticate(Usuario usuario)
        {
            //MoneyAuthorizeAttribute.AllowedUsers.Add(usuario);

            try
            {
                using (var entities = new MoneyPoints_dlloEntities())
                {
                    var user = entities.Usuarios.FirstOrDefault(u => u.Login == usuario.Login && u.Password == usuario.Password);

                    if (user == null)
                    {
                        return BadRequest("Usuario y/o clave incorrectas.");
                    }

                    usuario.UsuarioId = user.UsuarioId;
                    usuario.RolId = user.RolId;
                    usuario.TerceroId = user.TerceroId;

                    MoneyAuthorizeAttribute.AllowedUsers.Add(user);

                    return Ok(usuario);
                }
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }
예제 #3
0
        public void FinalizarCompra(Venta venta)
        {
            try
            {
                using (var en = new MoneyPoints_dlloEntities())
                {
                    var compra = new Compra
                    {
                        AfiliadoId = venta.AliadoId,
                        Fecha = DateTime.Now,
                        Valor = venta.Valor,
                        NumeroFactura = Guid.NewGuid().ToString().Split('-')[0], //Cambiar forma de generar numero de factura por un consecutivo,
                        Estado = "Finalizada" //Cambiar para enumeracion
                    };

                    compra.BeneficiariosClientesCompras.Add(new BeneficiariosClientesCompra
                    {
                        BeneficiariosClienteId = venta.BeneficiariosClienteId
                    });

                    compra.DetallesCompras.Add(new DetallesCompra { Valor = venta.Valor });

                    en.Compras.Add(compra);

                    var benefCliente = en.BeneficiariosClientes.Find(venta.BeneficiariosClienteId);

                    //Restamos el saldo
                    benefCliente.Saldo -= venta.Valor;

                    if (benefCliente.Saldo < 0) throw new Exception("Fondos insuficientes para esta compra");

                    //todo: falta restar los puntos, se debe validar contra la equivalencia
                    var equiv = en.Equivalencias.FirstOrDefault(e => e.ClienteId == benefCliente.ClienteId);

                    var rel = equiv.Puntos / equiv.Valor;

                    benefCliente.Puntos = Convert.ToInt32(Math.Round(benefCliente.Puntos * rel, 0));

                    en.Entry(benefCliente).State = EntityState.Modified;

                    en.SaveChanges();
                }

                Clients.Group(venta.ConnectionIdCliente).finalizarCompraCompleted("Compra realizada exitosamente.");
            }
            catch (Exception ex)
            {
                string details = "";
                if (ex.InnerException != null) details = ex.InnerException.Message;
                Clients.Group(venta.ConnectionIdCliente).finalizarCompraCompleted("No se pudo finalizar la compra: " + ex.Message + details);
            }
        }
        public IHttpActionResult ChangePIN(ChangePassword cambioClave)
        {
            if (cambioClave.PIN == cambioClave.NewPIN) throw new Exception("El nuevo PIN no debe ser igual al anterior");

            if (cambioClave.NewPIN != cambioClave.ConfirmPIN) throw new Exception("El nuevo PIN no coincide");

            try
            {
                var bytesPIN = System.Convert.FromBase64String(cambioClave.NewPIN);
                var PIN = Encoding.UTF8.GetString(bytesPIN);

                if (PIN.Length != 4) throw new Exception("El PIN debe ser de cuatro digitos");
            }
            catch (Exception)
            {
                throw new Exception("No se pudo decodificar la clave, debe estar en base 64");
            }

            using (var entities = new MoneyPoints_dlloEntities())
            {
                var user = entities.Usuarios.FirstOrDefault(u => u.UsuarioId == cambioClave.UsuarioId);

                if (user == null) throw new Exception("Usuario no existe");

                var benef = user.Tercero.Beneficiarios.ToList()[0];

                if (benef.Pin != cambioClave.PIN) throw new Exception("PIN incorrecto");

                benef.Pin = cambioClave.NewPIN;

                entities.Entry(benef).State = System.Data.Entity.EntityState.Modified;

                entities.SaveChanges();
            }

            return Ok();
        }
        private bool ValidateUser(string userName, string password)
        {
            if (AllowedUsers.FirstOrDefault(u => u.Login == userName && u.Password == password) != null)
            {
                return true;
            }
            else
            {
                using (var entities = new MoneyPoints_dlloEntities())
                {
                    var user = entities.Usuarios.FirstOrDefault(u => u.Login == userName && u.Password == password);

                    return !(user == null);
                }
            }
        }