From d3a8d3efa15f504d87129d28ea266efbeee23c4a Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sun, 28 Jul 2019 01:34:39 +0200 Subject: [PATCH] Fix AWS credentials getting lost --- libnymea-app-core/connection/awsclient.cpp | 20 +++++++++++++------- libnymea-app-core/connection/awsclient.h | 5 +++-- nymea-app/ui/appsettings/CloudLoginPage.qml | 12 +++++++++++- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/libnymea-app-core/connection/awsclient.cpp b/libnymea-app-core/connection/awsclient.cpp index d4ad1c09..38cbe172 100644 --- a/libnymea-app-core/connection/awsclient.cpp +++ b/libnymea-app-core/connection/awsclient.cpp @@ -152,7 +152,7 @@ bool AWSClient::confirmationPending() const return m_confirmationPending; } -void AWSClient::login(const QString &username, const QString &password, int attempt) +void AWSClient::login(const QString &username, const QString &password) { if (m_loginInProgress) { qWarning() << "Login already pending..."; @@ -196,17 +196,23 @@ void AWSClient::login(const QString &username, const QString &password, int atte qDebug() << "Logging in to AWS as user:" << username; QNetworkReply *reply = m_nam->post(request, payload); - connect(reply, &QNetworkReply::finished, this, [this, reply, username, password, attempt]() { + connect(reply, &QNetworkReply::finished, this, [this, reply, username, password]() { reply->deleteLater(); m_loginInProgress = false; if (reply->error() != QNetworkReply::NoError) { - qWarning() << "Error logging in to aws:" << reply->error() << reply->errorString(); - if (attempt < 3) { - login(username, password, attempt+1); + if (reply->error() == QNetworkReply::HostNotFoundError) { + qDebug() << "Error logging in to aws due to network connection."; + emit loginResult(LoginErrorNetworkError); return; } - m_username.clear(); - m_password.clear(); + if (reply->error() == QNetworkReply::ProtocolInvalidOperationError) { + qWarning() << "Looks like a wrong password."; + m_username.clear(); + m_password.clear(); + emit loginResult(LoginErrorInvalidUserOrPass); + return; + } + qWarning() << "Error logging in to aws. Error:" << reply->error() << reply->errorString(); emit loginResult(LoginErrorUnknownError); return; } diff --git a/libnymea-app-core/connection/awsclient.h b/libnymea-app-core/connection/awsclient.h index 77537740..e8048ddc 100644 --- a/libnymea-app-core/connection/awsclient.h +++ b/libnymea-app-core/connection/awsclient.h @@ -94,7 +94,8 @@ public: LoginErrorInvalidCode, LoginErrorUserExists, LoginErrorLimitExceeded, - LoginErrorUnknownError + LoginErrorUnknownError, + LoginErrorNetworkError }; Q_ENUM(LoginError) @@ -106,7 +107,7 @@ public: AWSDevices* awsDevices() const; bool confirmationPending() const; - Q_INVOKABLE void login(const QString &username, const QString &password, int attempt = -1); + Q_INVOKABLE void login(const QString &username, const QString &password); Q_INVOKABLE void logout(); Q_INVOKABLE void signup(const QString &username, const QString &password); Q_INVOKABLE void confirmRegistration(const QString &code); diff --git a/nymea-app/ui/appsettings/CloudLoginPage.qml b/nymea-app/ui/appsettings/CloudLoginPage.qml index 8d55de6d..57bd7c7f 100644 --- a/nymea-app/ui/appsettings/CloudLoginPage.qml +++ b/nymea-app/ui/appsettings/CloudLoginPage.qml @@ -215,6 +215,17 @@ Page { Connections { target: AWSClient onLoginResult: { + switch (error) { + case AWSClient.LoginErrorInvalidUserOrPass: + errorLabel.text = qsTr("Failed to log in. Please try again. Do you perhaps have forgotten your password?") + break; + case AWSClient.LoginErrorNetworkError: + errorLabel.text = qsTr("Failed to connect to the login server. Please mase sure your network connection is working.") + break; + default: + errorLabel.text = qsTr("An unexpected error happened. Please report this isse. Error code:", error) + break; + } errorLabel.visible = (error !== AWSClient.LoginErrorNoError) } } @@ -224,7 +235,6 @@ Page { Layout.fillWidth: true Layout.leftMargin: app.margins; Layout.rightMargin: app.margins; Layout.bottomMargin: app.margins wrapMode: Text.WordWrap - text: qsTr("Failed to log in. Please try again. Do you perhaps have forgotten your password?") font.pixelSize: app.smallFont color: "red" visible: false