summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2019-06-27 15:42:58 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2019-06-27 15:54:03 +0200
commit52871cf93c1a28cc94bcddfa0d47199340d792b8 (patch)
treeebdcada19aee35de53cfe3afbe8dc495c4d5065e /src
parentFix santizize=undefined warning (overflow) (diff)
downloadnheko-52871cf93c1a28cc94bcddfa0d47199340d792b8.tar.xz
Support well-known for server discovery
Diffstat (limited to 'src')
-rw-r--r--src/LoginPage.cpp34
1 files changed, 32 insertions, 2 deletions
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 <mtx/identifiers.hpp> #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(),