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