From 52871cf93c1a28cc94bcddfa0d47199340d792b8 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Thu, 27 Jun 2019 15:42:58 +0200 Subject: Support well-known for server discovery --- src/LoginPage.cpp | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'src/LoginPage.cpp') diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index f702832f..00893659 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -20,6 +20,7 @@ #include #include "Config.h" +#include "Logging.h" #include "LoginPage.h" #include "MatrixClient.h" #include "ui/FlatButton.h" @@ -186,7 +187,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 .weel-known."); + return; + } + + nhlog::net()->info("Autodiscovery: Discovered '" + res.homeserver.base_url + + "'"); + http::client()->set_server(res.homeserver.base_url); + checkHomeserverVersion(); + }); } } @@ -272,7 +303,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(), -- cgit 1.5.1 From aa3d4c4f15226dc90420de65ef489d6d5d404e82 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Thu, 27 Jun 2019 15:55:04 +0200 Subject: Reconfigure server url, when requested by login response --- src/LoginPage.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/LoginPage.cpp') diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index 00893659..3bcdafd7 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -315,6 +315,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); }); -- cgit 1.5.1 From 94a8c358d13be62f59f385664a1c5175e33c83e8 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Thu, 27 Jun 2019 23:01:07 +0200 Subject: Fix typo in log message --- src/LoginPage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/LoginPage.cpp') diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp index 3bcdafd7..0e7a18d4 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp @@ -209,7 +209,7 @@ LoginPage::onMatrixIdEntered() emit versionErrorCb(tr("Autodiscovery failed. Unknown error when " "requesting .well-known.")); nhlog::net()->error("Autodiscovery failed. Unknown error when " - "requesting .weel-known."); + "requesting .well-known."); return; } -- cgit 1.5.1