diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp
index f702832f..20fb3888 100644
--- a/src/LoginPage.cpp
+++ b/src/LoginPage.cpp
@@ -15,11 +15,14 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <QPainter>
#include <QStyleOption>
#include <mtx/identifiers.hpp>
+#include <mtx/responses/login.hpp>
#include "Config.h"
+#include "Logging.h"
#include "LoginPage.h"
#include "MatrixClient.h"
#include "ui/FlatButton.h"
@@ -108,7 +111,7 @@ LoginPage::LoginPage(QWidget *parent)
form_layout_->addLayout(matrixidLayout_);
form_layout_->addWidget(password_input_);
- form_layout_->addWidget(deviceName_, Qt::AlignHCenter, 0);
+ form_layout_->addWidget(deviceName_, Qt::AlignHCenter, nullptr);
form_layout_->addLayout(serverLayout_);
button_layout_ = new QHBoxLayout();
@@ -128,6 +131,7 @@ LoginPage::LoginPage(QWidget *parent)
error_label_ = new QLabel(this);
error_label_->setFont(font);
+ error_label_->setWordWrap(true);
top_layout_->addLayout(top_bar_layout_);
top_layout_->addStretch(1);
@@ -186,7 +190,37 @@ LoginPage::onMatrixIdEntered()
serverInput_->setText(homeServer);
http::client()->set_server(user.hostname());
- checkHomeserverVersion();
+ http::client()->well_known([this](const mtx::responses::WellKnown &res,
+ mtx::http::RequestErr err) {
+ if (err) {
+ using namespace boost::beast::http;
+
+ if (err->status_code == status::not_found) {
+ nhlog::net()->info("Autodiscovery: No .well-known.");
+ checkHomeserverVersion();
+ return;
+ }
+
+ if (!err->parse_error.empty()) {
+ emit versionErrorCb(
+ tr("Autodiscovery failed. Received malformed response."));
+ nhlog::net()->error(
+ "Autodiscovery failed. Received malformed response.");
+ return;
+ }
+
+ emit versionErrorCb(tr("Autodiscovery failed. Unknown error when "
+ "requesting .well-known."));
+ nhlog::net()->error("Autodiscovery failed. Unknown error when "
+ "requesting .well-known.");
+ return;
+ }
+
+ nhlog::net()->info("Autodiscovery: Discovered '" + res.homeserver.base_url +
+ "'");
+ http::client()->set_server(res.homeserver.base_url);
+ checkHomeserverVersion();
+ });
}
}
@@ -272,7 +306,6 @@ LoginPage::onLoginButtonClicked()
if (password_input_->text().isEmpty())
return loginError(tr("Empty password"));
- http::client()->set_server(serverInput_->text().toStdString());
http::client()->login(
user.localpart(),
password_input_->text().toStdString(),
@@ -285,6 +318,12 @@ LoginPage::onLoginButtonClicked()
return;
}
+ if (res.well_known) {
+ http::client()->set_server(res.well_known->homeserver.base_url);
+ nhlog::net()->info("Login requested to user server: " +
+ res.well_known->homeserver.base_url);
+ }
+
emit loginOk(res);
});
|