예제 #1
0
        public string changeProfileEmail(string current_e_mail, string Passwd, string new_e_mail)
        {
            // Chequear los encabezados SOAP
            this.checkSoapHeader();

            try
            {
                string NoChangeMessage = "No se realizó el cambio solicitado. ";

                // Breve corrección del nuevo e_mail si es necesario.
                new_e_mail = new_e_mail==null?string.Empty:new_e_mail.ToLower().Trim();

                if(current_e_mail.ToLower() == new_e_mail)
                {
                    return NoChangeMessage + "La dirección electrónica actual y la nueva no difieren.";
                }
                // Validar la existencia dle perfil según las credenciales.
                Perfil perfil = new Perfil();
                perfil.ID = perfil.Identificar(current_e_mail, Passwd, true);
                if(perfil.ID==0)
                {
              string errorMessage = "Acceso denegado. Las credenciales proporcionadas no corresponden con ningún perfil. " +
            "Si está seguro que son estas correctas, entonces verifique con los administradores de este servicio si su " +
            "perfil se encuentra deshabilitado.";
              throw new SoapException(errorMessage, SoapException.ClientFaultCode);
                }

                // Comprobar que o estén en uso el nuevo e_mail.
                if(Perfil.existEmail(new_e_mail))
                {
                    return NoChangeMessage + "La dirección electrónica " + new_e_mail + " ya se encuentra en uso.";
                }
                // Pasar el valor a la propiedad para que lo valide según lo configurado porque esta propiedad hace la validación.
                perfil.Email = new_e_mail;
                perfil.dsEntidad.Tables[0].Rows[0]["e_mail"] = new_e_mail;
                // Crear una nueva contraseña para el usuario porque por razones de seguridad le repetimos
                // el proceso de envío de la contraseña por correo como cuando se registró por primera vez.
                string encrypted = Crypto.Encrypt(new_e_mail + System.DateTime.Now.Ticks.ToString());
                int lagroMinPasswd = wsSettings.PasswdRequeriments.pwdMinChars;
                // Obtener la cadena encriptada que se le enviará al usuario.
                string new_Passwd = encrypted.Substring((encrypted.Length-lagroMinPasswd)-3, lagroMinPasswd).ToLower();
                perfil.dsEntidad.Tables[0].Rows[0]["Passwd"] = Crypto.Encrypt(new_Passwd);
                if(perfil.Actualizar()>0)
                {
                    if(!perfil.sendWelcomeEmail())
                    {
                        // Si no se envía el correo revertir el cambio.
                        perfil.dsEntidad.Tables[0].Rows[0]["e_mail"] = current_e_mail;
                        perfil.dsEntidad.Tables[0].Rows[0]["Passwd"] = Passwd;
                        perfil.Actualizar();
                        return NoChangeMessage + "El sistema de envío de notificaciones por correo no ha " +
                            "funcionado como se esperaba. Por favor, inténtelo más tarde. Se ha guardado " +
                            "un registro del suceso para que el personal de soporte de este servicio lo " +
                            "revise si es necesario.";
                    }
                    return "Su dirección electrónica ha cambiado, espere recibir a la nueva dirección un " +
                        "correo con una nueva contraseña, la cual ha sido cambiada por razones de seguridad.";
                }
                else
                {
                    string[] aryServiceAdmins = wsSettings.wsAdmins;
                    string ServiceAdmins = string.Empty;

                    for(int i =0; i<=(aryServiceAdmins.Length-1); i++)
                    {
                        ServiceAdmins = i!=0?ServiceAdmins + ", ":"";
                        ServiceAdmins = ServiceAdmins + aryServiceAdmins[i];
                    }

                    return NoChangeMessage + "El servicio ha experimentado un comportamiento fuera de lo normal. " +
                        "Por favor, inténtelo más tarde, si el problema persiste no dude en consultar a algunos " +
                        "de los administradores (" + ServiceAdmins + ") de este servicio.";
                }
            }
            catch(System.Exception Ex)
            {
                string errorMessage = ProcessError.getMessageToUser(Ex) + " " + System.Environment.NewLine;
                try
                {
                    ProcessError processError = new ProcessError();
                    if(processError.GuardarError(Ex, "AzuPass", "changeProfileEmail"))
                    {
                        errorMessage = errorMessage + processError.ErrorRecordedNotification;
                    }
                    processError = null;
                }
                catch(System.Exception)
                {
                    ; // No hacer nada si falla el mecanismo de guardar los errores.
                }
            throw new SoapException(errorMessage, SoapException.ClientFaultCode);
            //throw new System.Exception(errorMessage);
            }
        }
예제 #2
0
        public bool UpdateProfile(string e_mail, string Passwd, string Nombre, string Apellidos, System.DateTime FechaNac, Perfil.enuSexo Sexo, int IdCatOcupacional, string DescripcionIntereses)
        {
            // Chequear el encabezado SOAP.
            this.checkSoapHeader();

            try
            {
                Perfil perfil = new Perfil(0);
                perfil.ID = perfil.Identificar(e_mail, Passwd, false);
                if(perfil.ID==0)
                {
              throw new SoapException("Las credenciales proporcionadas no son válidas. Acceso denegado.", SoapException.ClientFaultCode);
              //throw new System.Exception("Las credenciales proporcionadas no son válidas. Acceso denegado.");
                }

                System.Text.StringBuilder errorMessage = new System.Text.StringBuilder("");

                // Nombre
                try
                {
                    perfil.Nombre = Nombre;
                }
                catch(System.Exception Ex)
                {
                    errorMessage.Append(Ex.Message + System.Environment.NewLine);
                }
                // Apellidos
                try
                {
                    perfil.Apellidos = Apellidos;
                }
                catch(System.Exception Ex)
                {
                    errorMessage.Append(Ex.Message + System.Environment.NewLine);
                }
                // FechaNac
                try
                {
                    perfil.FechaNac = FechaNac;
                }
                catch(System.Exception Ex)
                {
                    errorMessage.Append(Ex.Message + System.Environment.NewLine);
                }
                // Sexo
                try
                {
                    perfil.Sexo = Sexo;
                }
                catch(System.Exception Ex)
                {
                    errorMessage.Append(Ex.Message + System.Environment.NewLine);
                }
                // IdCatOcupacional
                try
                {
                    perfil.IdCatOcupacional = IdCatOcupacional;
                }
                catch(System.Exception Ex)
                {
                    errorMessage.Append(Ex.Message + System.Environment.NewLine);
                }
                // DescripIntereses
                try
                {
                    perfil.DescripIntereses = DescripcionIntereses;
                }
                catch(System.Exception Ex)
                {
                    errorMessage.Append(Ex.Message + System.Environment.NewLine);
                }
                // Si se registró algún error emitir una Exception cion las descripciones correspondientes.
                if(errorMessage.ToString()!=string.Empty)
                {
                    perfil = null;
              throw new SoapException(errorMessage.ToString(), SoapException.ClientFaultCode);
              //throw new System.Exception(errorMessage.ToString());
                }
                // El valor Passwd que se pasa para almacenarse es encriptado.
                //System.Object[] Args = { perfil.ID, perfil.Nombre, perfil.Apellidos, perfil.Email, perfil.Passwd, perfil.FechaNac, perfil.Sexo, perfil.IdCatOcupacional, perfil.FechaRegistro, perfil.Habilitado};
                //newPerfil.dsEntidad.Tables[0].Rows[0].ItemArray = Args;
                perfil.Actualizar();
                perfil = null;
                return true;
            }
            catch(System.Exception Ex)
            {
                string errorMessage = ProcessError.getMessageToUser(Ex) + " " + System.Environment.NewLine;
                try
                {
                    ProcessError processError = new ProcessError();
                    if(processError.GuardarError(Ex, "AzuPass", "UpdateProfile"))
                    {
                        errorMessage = errorMessage + processError.ErrorRecordedNotification;
                    }
                    processError = null;
                }
                catch(System.Exception)
                {
                    ; // No hacer nada si falla el mecanismo de guardar los errores.
                }
            throw new SoapException(errorMessage, SoapException.ClientFaultCode);
                //throw new System.Exception(errorMessage);
            }
        }
예제 #3
0
        public bool changeProfilePasswd(string e_mail, string current_Passwd, string new_Passwd)
        {
            // Chequear los encabezados SOAP
            this.checkSoapHeader();

            try
            {
                // Validar la existencia dle perfil según las credenciales.
                Perfil perfil = new Perfil();
                perfil.ID = perfil.Identificar(e_mail, current_Passwd, true);
                if(perfil.ID==0)
                {
              string errorMessage = "Acceso denegado. Las credenciales proporcionadas no corresponden con ningún perfil. " +
            "Si está seguro que son estas correctas, entonces verifique con los administradores de este servicio si su " +
            "perfil se encuentra deshabilitado.";
              throw new SoapException(errorMessage, SoapException.ClientFaultCode);
                }

                // Pasar el valor natural, para que lo valide según lo configurado porque esta propiedad hace la validación.
                perfil.Passwd = new_Passwd;
                // Ahora asignar el valor encriptado directamente al campo del DataSet del objeto perfil porque si lo hacemos
                // a través de la propiedad Passwd y es mayor en largo de los caracteres especificados en la cionfiguración
                // nos devolverá un error.
                perfil.dsEntidad.Tables[0].Rows[0]["Passwd"] = Crypto.Encrypt(new_Passwd);
                return perfil.Actualizar()>0?true:false;
            }
            catch(System.Exception Ex)
            {
                string errorMessage = ProcessError.getMessageToUser(Ex) + " " + System.Environment.NewLine;
                try
                {
                    ProcessError processError = new ProcessError();
                    if(processError.GuardarError(Ex, "AzuPass", "changeProfilePasswd"))
                    {
                        errorMessage = errorMessage + processError.ErrorRecordedNotification;
                    }
                    processError = null;
                }
                catch(System.Exception)
                {
                    ; // No hacer nada si falla el mecanismo de guardar los errores.
                }
            throw new SoapException(errorMessage, SoapException.ClientFaultCode);
                //throw new System.Exception(errorMessage);
            }
        }