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