コード例 #1
0
ファイル: AzuPass.asmx.cs プロジェクト: Leskyam/AzuPass
        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
ファイル: clsPerfil.cs プロジェクト: Leskyam/AzuPass
 public bool ResendPasswd(string e_mail)
 {
     System.Object[] Args = { null, e_mail.ToLower() };
       Perfil perfil = new Perfil();
       // Devuelve el ID del Perfil al que pertenece el Email.
       System.Object result = perfil.getValue("IDxEmail", Args);
       //System.Diagnostics.Debug.WriteLine(result);
       if (result == System.DBNull.Value)
       {
     throw new System.Exception("No existe ningún perfil que corresponda con el Correo-e: \"" + e_mail + "\", por tanto no se ha enviado la contraseña a dicha dirección.");
       }
       perfil.ID = (int)result;
       return perfil.sendWelcomeEmail();
 }
コード例 #3
0
ファイル: AzuPass.asmx.cs プロジェクト: Leskyam/AzuPass
        public bool Register(string Nombre, string Apellidos, string e_mail, System.DateTime FechaNac, Perfil.enuSexo Sexo, int IdCatOcupacional, string DescripcionIntereses)
        {
            // Chequear el encabezado SOAP.
            this.checkSoapHeader();

            try
            {
                // Arreglar errores menores en las siguientes variables.
                Nombre = Nombre==null?string.Empty:Nombre.Trim();
                Apellidos = Apellidos==null?string.Empty:Apellidos.Trim();
                e_mail = e_mail==null?string.Empty:e_mail.ToLower().Trim();
                // Validar los datos proporcionados por la aplicación cliente.
                valUserData(Nombre, Apellidos, e_mail, FechaNac, IdCatOcupacional);
                if(DescripcionIntereses!=null)
                {
                    if (DescripcionIntereses.Trim() == string.Empty){DescripcionIntereses=null;}
                }

                // Obtener un valor encriptado para enviar por correo como Passwd inicial para el usuario.
                string encrypted = Crypto.Encrypt(e_mail + System.DateTime.Now.Ticks.ToString());
                int largoMinPasswd = wsSettings.PasswdRequeriments.pwdMinChars;
                // Obtener la cadena encriptada que se le enviará al usuario.
            string Passwd = encrypted.Substring((encrypted.Length - largoMinPasswd) - 3, largoMinPasswd).ToLower();
                // El valor Passwd que se pasa para almacenarse es otra vez encriptado.
                System.Object[] Args = { null, Nombre, Apellidos, e_mail, Crypto.Encrypt(Passwd), FechaNac, Sexo, IdCatOcupacional,
                                           System.DateTime.Now, true, DescripcionIntereses };
                Perfil perfil = new Perfil();
                perfil.dsEntidad.Tables[0].Rows[0].ItemArray = Args;
                int IdPerfil = perfil.Agregar();

                // Enviar el correo de notificación. Si no se puede eliminará los registros recien agregados.
                if(!perfil.sendWelcomeEmail())
                {
                    perfil.Eliminar();
                    perfil = null;

                    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];
                    }
              string errorMessage = "El sistema para envío de notificaciones no ha funcionado como se esperaba, no se ha registrado el Perfil. " +
                        "Por favor, inténtelo más tarde, si el problema persiste no dude en consultar a alguno de los administradores (" + ServiceAdmins + ") de este servcio.";
              throw new SoapException(errorMessage, SoapException.ClientFaultCode);
                }

                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", "Register"))
                    {
                        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);
            }
        }