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); } }
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(); }
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); } }