From 8ba00fd9099f22cbd7df4b2f5ca7bc7b9f872610 Mon Sep 17 00:00:00 2001 From: Nicolas Werner <nicolas.werner@hotmail.de> Date: Mon, 8 Jul 2019 12:41:55 +0200 Subject: [PATCH] Add .well-known support --- requirements.txt | 2 +- src/login.cpp | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 9e2900f..85302da 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,4 +3,4 @@ https://gitlab.matrix.org/matrix-org/olm/-/archive/3.1.0/olm-3.1.0.zip -DBUILD_S nlohmann/json gabime/spdlog -DSPDLOG_BUILD_BENCH=OFF -DSPDLOG_BUILD_EXAMPLES=OFF -DSPDLOG_BUILD_TESTS=OFF boost,https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1_69_0.tar.bz2 --cmake boost -DBOOST_WITH_ATOMIC=1 -DBOOST_WITH_ATOMIC=1 -DBOOST_WITH_CHRONO=1 -DBOOST_WITH_DATE_TIME=1 -DBOOST_WITH_IOSTREAMS=1 -DBOOST_WITH_RANDOM=1 -DBOOST_WITH_REGEX=1 -DBOOST_WITH_SYSTEM=1 -DBOOST_WITH_THREAD=1 -DBUILD_SHARED_LIBS=OFF -MonokelPinguin/mtxclient@0.3.0-dev -DBUILD_LIB_EXAMPLES=off -DBUILD_LIB_TESTS=OFF -DBUILD_SHARED_LIBS=OFF +Nheko-Reborn/mtxclient@0.3.0-dev -DBUILD_LIB_EXAMPLES=off -DBUILD_LIB_TESTS=OFF -DBUILD_SHARED_LIBS=OFF diff --git a/src/login.cpp b/src/login.cpp index 4f3e22b..f2c234e 100644 --- a/src/login.cpp +++ b/src/login.cpp @@ -5,6 +5,7 @@ #include <mtx/identifiers.hpp> #include "client.h" +#include "debug_out.h" #include "settings.h" Login::Login(QObject *parent) : QObject(parent) {} @@ -41,7 +42,31 @@ void Login::mxidEntered(QString mxid) { } QString server = QString::fromStdString(user.hostname()); - this->validateServer(server); + + http::client().well_known([this, server](const mtx::responses::WellKnown &well_known, mtx::http::RequestErr err) { + if (err) { + using namespace boost::beast::http; + + if (err->status_code == status::not_found) { + qDebug() << "Autodiscovery: No .well-known."; + this->validateServer(server); + return; + } + + if (!err->parse_error.empty()) { + emit homeserverInvalid(server, tr("Autodiscovery failed. Received malformed response.")); + qDebug() << "Autodiscovery failed. Received malformed response." << *err; + return; + } + + emit homeserverInvalid(server, tr("Autodiscovery failed. Unknown error when requesting .well-known.")); + qDebug() << "Autodiscovery failed. Unknown error when requesting .weel-known."; + return; + } + + qDebug() << "Autodiscovery: Discovered '" << QString::fromStdString(well_known.homeserver.base_url) << "'"; + this->validateServer(QString::fromStdString(well_known.homeserver.base_url)); + }); } void Login::homeserverEntered(QString server) { this->validateServer(server); } @@ -122,11 +147,17 @@ void Login::login(QString mxid, QString password, QString server) { qDebug() << "Access token:" << QString::fromStdString(response.access_token) << " , device: " << QString::fromStdString(response.device_id); + if (response.well_known) { + qDebug() << "Login response requested to migrate to: " + << QString::fromStdString(response.well_known->homeserver.base_url); + http::client().set_server(response.well_known->homeserver.base_url); + } + Settings s; s.access_token(response.access_token); s.device_id(response.device_id); s.user(response.user_id); - s.server(homeserver); + s.server(http::client().server()); s.server_port(http::client().port()); emit loginSuccess(); -- GitLab