don't give up too fast when AWS login fails, also prevent multiple simultaneous login attempts

This commit is contained in:
Michael Zanetti 2018-09-13 21:37:47 +02:00
parent c294c12533
commit d1a77654e3
2 changed files with 16 additions and 3 deletions

View File

@ -131,8 +131,14 @@ bool AWSClient::confirmationPending() const
return m_confirmationPending; return m_confirmationPending;
} }
void AWSClient::login(const QString &username, const QString &password) void AWSClient::login(const QString &username, const QString &password, int attempt)
{ {
if (m_loginInProgress) {
qWarning() << "Login already pending...";
return;
}
m_loginInProgress = true;
m_username = username; m_username = username;
// Due to an issue in AWS apis it's very complex to use the refresh token. Taking a shortcut here for now: // Due to an issue in AWS apis it's very complex to use the refresh token. Taking a shortcut here for now:
// Will store the password in the config for now and re-login when the accessToken expires. // Will store the password in the config for now and re-login when the accessToken expires.
@ -169,10 +175,15 @@ void AWSClient::login(const QString &username, const QString &password)
qDebug() << "Logging in to AWS as user:" << username; qDebug() << "Logging in to AWS as user:" << username;
QNetworkReply *reply = m_nam->post(request, payload); QNetworkReply *reply = m_nam->post(request, payload);
connect(reply, &QNetworkReply::finished, this, [this, reply]() { connect(reply, &QNetworkReply::finished, this, [this, reply, username, password, attempt]() {
reply->deleteLater(); reply->deleteLater();
m_loginInProgress = false;
if (reply->error() != QNetworkReply::NoError) { if (reply->error() != QNetworkReply::NoError) {
qWarning() << "Error logging in to aws:" << reply->error() << reply->errorString(); qWarning() << "Error logging in to aws:" << reply->error() << reply->errorString();
if (attempt < 3) {
login(username, password, attempt+1);
return;
}
m_username.clear(); m_username.clear();
m_password.clear(); m_password.clear();
emit loginResult(LoginErrorUnknownError); emit loginResult(LoginErrorUnknownError);

View File

@ -103,7 +103,7 @@ public:
AWSDevices* awsDevices() const; AWSDevices* awsDevices() const;
bool confirmationPending() const; bool confirmationPending() const;
Q_INVOKABLE void login(const QString &username, const QString &password); Q_INVOKABLE void login(const QString &username, const QString &password, int attempt = -1);
Q_INVOKABLE void logout(); Q_INVOKABLE void logout();
Q_INVOKABLE void signup(const QString &username, const QString &password); Q_INVOKABLE void signup(const QString &username, const QString &password);
Q_INVOKABLE void confirmRegistration(const QString &code); Q_INVOKABLE void confirmRegistration(const QString &code);
@ -154,6 +154,8 @@ private:
QString m_username; QString m_username;
QString m_password; QString m_password;
bool m_loginInProgress = false;
bool m_confirmationPending = false; bool m_confirmationPending = false;
QByteArray m_accessToken; QByteArray m_accessToken;