Handle empty matrix ID (regression from 9de1ec1)
fixes #259
2 files changed, 27 insertions, 40 deletions
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<MatrixClient> 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<User>(matrix_id.toStdString());
- return true;
+ user = parse<User>(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<User>(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());
|