public bool CambiarContrasenia(RequestCambioClave request)
        {
            bool done = false;

            SimpleInteroperableEncryption crypter = new SimpleInteroperableEncryption(WebConfigReader.SemillaEncriptacionPublica);

            //ENCRIPTAMOS LAS CONTRASEÑAS
            request.ClaveAntigua         = crypter.Encrypt(request.ClaveAntigua);
            request.ClaveNueva           = crypter.Encrypt(request.ClaveNueva);
            request.ClaveNuevaConfirmada = crypter.Encrypt(request.ClaveNuevaConfirmada);

            request.Dominio         = WebConfigReader.DominioAplicacion;
            request.Acronimo        = WebConfigReader.AcronimoAplicacion;
            request.TipoCambioClave = TipoCambioClave.Ui;

            ResponseCambioClave response = (new SeguridadProxyRest()).CambiarClaveWeb(request);

            if (response.Result.Satisfactorio == false)
            {
                throw new Exception(response.Result.Mensaje);
            }

            done = true;

            return(done);
        }
        public bool ResetarContrasenia(RequestCambioClave request)
        {
            bool done = false;

            SimpleInteroperableEncryption crypter = new SimpleInteroperableEncryption(WebConfigReader.SemillaEncriptacionPublica);

            string contraseniaGenerada = Helper.GenerarContrasenia();

            request.ClaveAntigua = request.ClaveNuevaConfirmada = request.ClaveNueva = crypter.Encrypt(contraseniaGenerada);

            request.Dominio         = WebConfigReader.DominioAplicacion;
            request.Acronimo        = WebConfigReader.AcronimoAplicacion;
            request.TipoCambioClave = TipoCambioClave.Sys;

            ResponseCambioClave response = (new SeguridadProxyRest()).CambiarClaveWeb(request);

            if (response.Result.Satisfactorio == false)
            {
                throw new Exception(response.Result.Mensaje);
            }

            this.NotificarCambioConstraseniaMSC(response.CodigoUsuario, response.Correo, response.Nombres, contraseniaGenerada);

            done = true;

            return(done);
        }
        public bool CambiarConstraseniaMSC(RequestCambioClave request)
        {
            bool done = false;

            Result result = this.ValidacionCambiarConstraseniaMSC(request);

            if (result.Satisfactorio == false)
            {
                throw new Exception(result.Mensaje);
            }

            SimpleInteroperableEncryption crypter = new SimpleInteroperableEncryption(WebConfigReader.SemillaEncriptacionPublica);

            string contraseniaGenerada = string.Empty;

            if (request.TipoCambioClave == TipoCambioClave.Sys)
            {
                contraseniaGenerada  = Helper.GenerarContrasenia();
                request.ClaveAntigua = request.ClaveNuevaConfirmada = request.ClaveNueva = crypter.Encrypt(contraseniaGenerada);
            }
            else
            {
                //ENCRIPTAMOS LAS CONTRASEÑAS
                request.ClaveAntigua         = crypter.Encrypt(request.ClaveAntigua);
                request.ClaveNueva           = crypter.Encrypt(request.ClaveNueva);
                request.ClaveNuevaConfirmada = crypter.Encrypt(request.ClaveNuevaConfirmada);
            }
            request.Dominio  = WebConfigReader.DominioAplicacion;
            request.Acronimo = WebConfigReader.AcronimoAplicacion;


            ResponseCambioClave response = (new SeguridadProxyRest()).CambiarClaveWeb(request);

            if (response.Result.Satisfactorio == false)
            {
                throw new Exception(response.Result.Mensaje);
            }

            //ENVIAMOS EL CORREO
            if (request.TipoCambioClave == TipoCambioClave.Sys)
            {
                this.NotificarCambioConstraseniaMSC(response.CodigoUsuario, response.Correo, response.Nombres, contraseniaGenerada);
            }

            done = true;

            return(done);
        }
        public ResponseCambioClave CambiarClave(RequestCambioClave request)
        {
            var response = new ResponseCambioClave();

            try
            {
                response = SeguridadBL.CambiarClaveWeb(request);
                response.Resultado.Success = true;
            }
            catch (Exception ex)
            {
                response.Resultado.Message = ex.Message;
                response.Resultado.ErrCode = ex.GetHashCode().ToString();
                if (ex.InnerException != null)
                {
                    response.Resultado.Messages.Add(new Result {
                        Message = ex.InnerException.Message
                    });
                }
            }
            return(response);
        }
Beispiel #5
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);
        }