Make password change asynchronous

This isn't perfect (if you make multiple requests things could go badly),
but it's better than just slapping the new password into the settings,
even if the update failed.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2015-07-22 15:06:57 -07:00
parent aa9c2b7384
commit 9a68e356af
5 changed files with 17 additions and 2 deletions

1
pref.h
View file

@ -109,6 +109,7 @@ struct preferences {
short default_file_behavior;
facebook_prefs_t facebook;
char *cloud_storage_password;
char *cloud_storage_newpassword;
char *cloud_storage_email;
char *cloud_storage_email_encoded;
bool save_password_local;

View file

@ -423,10 +423,11 @@ void PreferencesDialog::syncSettings()
} else {
CloudStorageAuthenticate *cloudAuth = new CloudStorageAuthenticate(this);
connect(cloudAuth, SIGNAL(finishedAuthenticate()), this, SLOT(cloudPinNeeded()));
connect(cloudAuth, SIGNAL(passwordChangeSuccessful()), this, SLOT(passwordUpdateSuccessfull()));
QNetworkReply *reply = cloudAuth->backend(email, password, "", newpassword);
ui.cloud_storage_new_passwd->setText("");
ui.cloud_storage_password->setText(newpassword);
password = newpassword;
free(prefs.cloud_storage_newpassword);
prefs.cloud_storage_newpassword = strdup(qPrintable(newpassword));
}
}
} else if (prefs.cloud_verification_status == CS_UNKNOWN ||
@ -688,6 +689,11 @@ void PreferencesDialog::on_resetSettings_clicked()
}
}
void PreferencesDialog::passwordUpdateSuccessfull()
{
ui.cloud_storage_password->setText(prefs.cloud_storage_password);
}
void PreferencesDialog::emitSettingsChanged()
{
emit settingsChanged();

View file

@ -40,6 +40,7 @@ slots:
void facebookLoggedIn();
void facebookDisconnect();
void cloudPinNeeded();
void passwordUpdateSuccessfull();
private:
explicit PreferencesDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);
void setUiFromPrefs();

View file

@ -1029,6 +1029,12 @@ void CloudStorageAuthenticate::uploadFinished()
myLastError.clear();
} else if (cloudAuthReply == "[VERIFY]") {
prefs.cloud_verification_status = CS_NEED_TO_VERIFY;
} else if (cloudAuthReply == "[PASSWDCHANGED]") {
free(prefs.cloud_storage_password);
prefs.cloud_storage_password = prefs.cloud_storage_newpassword;
prefs.cloud_storage_newpassword = NULL;
emit passwordChangeSuccessful();
return;
} else {
prefs.cloud_verification_status = CS_INCORRECT_USER_PASSWD;
myLastError = cloudAuthReply;

View file

@ -118,6 +118,7 @@ public:
explicit CloudStorageAuthenticate(QObject *parent);
signals:
void finishedAuthenticate();
void passwordChangeSuccessful();
private
slots:
void uploadError(QNetworkReply::NetworkError error);