Ejemplo n.º 1
0
        private void LoginLocal()
        {
            //Comprobamos que el Nombre de Usuario contiene un Dominio
            var infoUser = Publicos.ComprobarDominioEnUsuario(txtUser.Text);

            infoUser.Dominio = cboDominio.Text;

            var result = false;

            //Comprobamos primero el tipo de Usuario
            if (GRPrincipal.Load(infoUser.Usuario, infoUser.Dominio))
            {
                InfoUsuario.Initialize();
                if (InfoUsuario.Instancia.Tipo)
                {
                    result = GRPrincipal.Login(infoUser.Usuario, txtPass.Text, cboDominio.Text);
                }
                else
                {
                    result = GRPrincipal.Login(infoUser.Usuario, GRCrypto.Encriptar(txtPass.Text));
                }
            }
            else
            {
                throw new InvalidOperationException("El usuario no está inscrito para este Sistema");
            }

            if (!result)
            {
                throw new SecurityException("El usuario o clave no son válidos!");
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Guarda los Cambios
 /// </summary>
 public new CambiarClave Save()
 {
     if (GRCrypto.Encriptar(RespuestaSecreta) != SecretAnswer && !ByPassClave)
     {
         throw new InvalidOperationException("La respuesta secreta no coincide!");
     }
     return(base.Save());
 }
Ejemplo n.º 3
0
 private void DoInsertUpdate(SqlCommand cmd)
 {
     using (BypassPropertyChecks)
     {
         cmd.Parameters.AddWithValue("@IdUsuario", ID);
         cmd.Parameters.AddWithValue("@IdClave", Guid.NewGuid().ToString());
         cmd.Parameters.AddWithValue("@Clave", GRCrypto.Encriptar(ClaveNueva));
         cmd.Parameters.AddWithValue("@PreguntaSecreta", PreguntaSecreta);
         cmd.Parameters.AddWithValue("@RespuestaSecreta", GRCrypto.Encriptar(RespuestaSecreta));
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Cambia la contraseña de un usuario externo, si el campo es vacio se crea una contraseña, de lo contrario registra al constraseña enviada.
        /// </summary>
        /// <param name="request">Constraseña a registrar</param>
        /// <returns>Contraseña generada</returns>
        public static ResponseCambioClave CambiarClaveWeb(RequestCambioClave request)
        {
            ResponseCambioClave response = new ResponseCambioClave();
            var publicCrypter            = new SimpleInteroperableEncryption();

            var info = GetInfoBasicaUsuariosByCodigo(new RequestInfoBasicaUsuarioDTO
            {
                CodigoUsuario = request.CodigoUsuario,
                Dominio       = request.Dominio
            });

            if (!info.Resultado.Success)
            {
                throw new InvalidOperationException("El usuario no existe!");
            }

            if (info.InfoBasica.Tipo != "E")
            {
                throw new InvalidOperationException("Sólo los usuarios externos pueden cambiar su contraseña");
            }

            //SI SE HA SOLICITADO CONTRASEÑA, SE VALIDA LA CONTRASEÑA ANTIGUA
            if (request.TipoCambioClave == TipoCambioClave.Ui)
            {
                // Comprobamos si el campo de Respuesta Secreta se encuentra lleno para validar
                // que el usuario se olvidó se contraseña y posteriormente hacer el cambio.
                if (string.IsNullOrEmpty(request.RespuestaSecreta))
                {
                    ResponseLoginUsuario responseLogin = Login(new RequestLogin
                    {
                        CodigoUsuario      = request.CodigoUsuario,
                        Clave              = publicCrypter.Decrypt(request.ClaveAntigua),
                        Dominio            = request.Dominio,
                        AcronimoAplicacion = request.Acronimo
                    });

                    if (!responseLogin.Resultado.Success)
                    {
                        throw new Exception("La contraseña es incorrecta.");
                    }
                }
                else
                {
                    // Comprobamos que la respuesta a la pregunta Secreta sea válida.
                    using (var ctx = new SeguridadEntities())
                    {
                        var clave = (from clav in ctx.Claves
                                     where clav.IdUsuario == info.InfoBasica.IdUsuario &&
                                     clav.Ultimo
                                     select new { RespuestaSecreta = clav.Respuesta }).FirstOrDefault();
                        if (clave != null)
                        {
                            if (clave.RespuestaSecreta != GRCrypto.Encriptar(request.RespuestaSecreta))
                            {
                                throw new SecurityException("La respuesta secreta no coincide!");
                            }
                        }
                    }
                }
            }

            // En caso sea un reseteo de clave
            if (request.TipoCambioClave == TipoCambioClave.Sys)
            {
                request.ClaveAntigua = request.ClaveNuevaConfirmada = request.ClaveNueva = publicCrypter.Decrypt(request.ClaveNueva);
            }
            else
            {
                //DESENCRIPTAR LA CONTRASENIA
                request.ClaveAntigua         = publicCrypter.Decrypt(request.ClaveAntigua);
                request.ClaveNueva           = publicCrypter.Decrypt(request.ClaveNueva);
                request.ClaveNuevaConfirmada = publicCrypter.Decrypt(request.ClaveNuevaConfirmada);
            }

            Result result = ValidacionCambiarClaveWeb(request);

            if (result.Success == false)
            {
                throw new Exception(result.Message);
            }

            bool primeraClave = false;

            try
            {
                //Validamos si tiene Clave registrada.
                GRPrincipal.Load(request.CodigoUsuario, request.Dominio);
            }
            catch (DataPortalException ex)
            {
                if (ex.BusinessException != null)
                {
                    if (ex.BusinessException.GetType() == typeof(UsuarioSinClaveException))
                    {   //SI LA EXCEPCION ES USUARIOSINCLAVE SE LE CREA UNA CLAVE
                        ActivarUsuario activarUsuario = ActivarUsuario.GetActivarUsuario(new FiltroUsuarios
                        {
                            Usuario = request.CodigoUsuario, Dominio = request.Dominio
                        });

                        activarUsuario.PreguntaSecreta = activarUsuario.RespuestaSecreta = request.CodigoUsuario;
                        activarUsuario.ClaveSecreta    = activarUsuario.ConfirmarClave = request.ClaveNueva;

                        activarUsuario.Save();
                        primeraClave = true;
                    }
                }
            }

            if (!primeraClave)
            {
                var cambiarClave = CambiarClave.GetCambiarClave(new FiltroUsuarios
                {
                    Usuario = request.CodigoUsuario, Dominio = request.Dominio
                });
                cambiarClave.ClaveNueva       = cambiarClave.ConfirmarClave = request.ClaveNueva;
                cambiarClave.RespuestaSecreta = string.IsNullOrEmpty(request.RespuestaSecreta)
                        ? cambiarClave.SecretAnswer : request.RespuestaSecreta;
                CambiarClave.ByPassClave = true;
                cambiarClave.Save();
            }

            response.Correo        = info.InfoBasica.Correo;
            response.Nombres       = info.InfoBasica.NombresCompletos;
            response.CodigoUsuario = request.CodigoUsuario;

            return(response);
        }
Ejemplo n.º 5
0
        public static ResponseLoginUsuario Login(RequestLogin request)
        {
            var response = new ResponseLoginUsuario();

            try
            {
                if (string.IsNullOrEmpty(request.Clave) || string.IsNullOrEmpty(request.CodigoUsuario))
                {
                    throw new InvalidOperationException("El usuario y clave son obligatorios.");
                }
                if (string.IsNullOrEmpty(request.AcronimoAplicacion))
                {
                    throw new InvalidOperationException("El acrónimo es obligatorio.");
                }

                // Desencriptamos el mensaje recibido.
                var cryptocon = new SimpleInteroperableEncryption();
                request.Clave = cryptocon.Decrypt(request.Clave);

                //Comprobamos que el Nombre de Usuario contiene un Dominio
                var infoUser = new UserDomain {
                    Usuario = request.CodigoUsuario, Dominio = request.Dominio
                };
                //Guardamos en el GlobalContext el valor que se reciba del Acrónimo
                Csla.ApplicationContext.GlobalContext["Acronimo"] = request.AcronimoAplicacion;
                if (string.IsNullOrEmpty(request.Dominio))
                {
                    throw new InvalidOperationException("El dominio es obligatorio.");
                }

                var result = false;

                //Comprobamos primero el tipo de Usuario
                if (GRPrincipal.Load(infoUser.Usuario, infoUser.Dominio))
                {
                    InfoUsuario.Initialize();
                    if (InfoUsuario.Instancia.Tipo) // Si es interno
                    {
                        result = GRPrincipal.Login(infoUser.Usuario, request.Clave, request.Dominio);
                    }
                    else // Si es externo
                    {
                        result = GRPrincipal.Login(infoUser.Usuario, GRCrypto.Encriptar(request.Clave));
                    }
                }
                else
                {
                    throw new InvalidOperationException("El usuario no está inscrito para este Sistema");
                }

                if (!result)
                {
                    throw new SecurityException("El usuario o clave no son válidos!");
                }

                response.Resultado.Success = result;
                response.IdPerfilUsuario   = InfoUsuario.Instancia.IdPerfilUsuario;
            }
            catch (DataPortalException ex)
            {
                response.Resultado.Message = ex.BusinessException.Message;
            }
            catch (Exception ex)
            {
                var msg = ex.Message;
                if (ex.InnerException != null)
                {
                    msg = ex.InnerException.Message;
                }
                response.Resultado.Message = msg;
            }

            return(response);
        }