diff --git a/include/LoginPage.h b/include/LoginPage.h index 003f0ee2..b2b40537 100644 --- a/include/LoginPage.h +++ b/include/LoginPage.h @@ -48,7 +48,7 @@ protected: public slots: // Displays errors produced during the login. - void loginError(QString error_message); + void loginError(QString msg) { error_label_->setText(msg); } private slots: // Callback for the back button. diff --git a/src/LoginPage.cc b/src/LoginPage.cc index 6c01670a..f71a992e 100644 --- a/src/LoginPage.cc +++ b/src/LoginPage.cc @@ -152,39 +152,22 @@ LoginPage::LoginPage(QSharedPointer client, QWidget *parent) } void -LoginPage::loginError(QString error) +LoginPage::onMatrixIdEntered() { - error_label_->setText(error); -} + error_label_->setText(""); -bool -LoginPage::isMatrixIdValid() -{ - auto matrix_id = matrixid_input_->text(); + User user; try { - parse(matrix_id.toStdString()); - return true; + user = parse(matrixid_input_->text().toStdString()); } catch (const std::exception &e) { - return false; + return loginError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); } - return false; -} - -void -LoginPage::onMatrixIdEntered() -{ - error_label_->setText(""); - - if (!isMatrixIdValid()) { - loginError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); - return; - } else if (password_input_->text().isEmpty()) { - loginError(tr("Empty password")); - } + if (password_input_->text().isEmpty()) + return loginError(tr("Empty password")); - QString homeServer = matrixid_input_->text().split(":").at(1); + QString homeServer = QString::fromStdString(user.hostname()); if (homeServer != inferredServerAddress_) { serverInput_->hide(); serverLayout_->removeWidget(errorIcon_); @@ -251,17 +234,21 @@ LoginPage::onLoginButtonClicked() { error_label_->setText(""); - if (!isMatrixIdValid()) { - loginError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); - } else if (password_input_->text().isEmpty()) { - loginError("Empty password"); - } else { - QString user = matrixid_input_->text().split(":").at(0).split("@").at(1); - QString password = password_input_->text(); - client_->setServer(serverInput_->text()); - client_->login(user, password); - emit loggingIn(); + User user; + + try { + user = parse(matrixid_input_->text().toStdString()); + } catch (const std::exception &e) { + return loginError("You have entered an invalid Matrix ID e.g @joe:matrix.org"); } + + if (password_input_->text().isEmpty()) + return loginError(tr("Empty password")); + + client_->setServer(serverInput_->text()); + client_->login(QString::fromStdString(user.localpart()), password_input_->text()); + + emit loggingIn(); } void diff --git a/src/MatrixClient.cc b/src/MatrixClient.cc index bcf7a62b..544f58cb 100644 --- a/src/MatrixClient.cc +++ b/src/MatrixClient.cc @@ -123,11 +123,6 @@ MatrixClient::login(const QString &username, const QString &password) noexcept int status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); - if (reply->error()) { - emit loginError(reply->errorString()); - return; - } - if (status_code == 403) { emit loginError(tr("Wrong username or password")); return; @@ -144,6 +139,11 @@ MatrixClient::login(const QString &username, const QString &password) noexcept return; } + if (reply->error()) { + emit loginError(reply->errorString()); + return; + } + try { mtx::responses::Login login = nlohmann::json::parse(reply->readAll().data());