summary refs log tree commit diff
path: root/src/LoginPage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/LoginPage.cpp')
-rw-r--r--src/LoginPage.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp

index b34e9806..08b7335a 100644 --- a/src/LoginPage.cpp +++ b/src/LoginPage.cpp
@@ -6,9 +6,12 @@ #include <QDesktopServices> +#include <set> + #include <mtx/identifiers.hpp> #include <mtx/requests.hpp> #include <mtx/responses/login.hpp> +#include <mtx/responses/version.hpp> #include "Config.h" #include "Logging.h" @@ -149,7 +152,8 @@ LoginPage::checkHomeserverVersion() return; } - http::client()->versions([this](const mtx::responses::Versions &, mtx::http::RequestErr err) { + http::client()->versions([this](const mtx::responses::Versions &versions, + mtx::http::RequestErr err) { if (err) { if (err->status_code == 404) { emit versionErrorCb(tr("The required endpoints were not found. " @@ -170,6 +174,21 @@ LoginPage::checkHomeserverVersion() return; } + if (std::find_if( + versions.versions.cbegin(), versions.versions.cend(), [](const std::string &v) { + static const std::set<std::string_view, std::less<>> supported{ + "v1.1", + "v1.2", + "v1.3", + }; + return supported.count(v) != 0; + }) == versions.versions.cend()) { + emit versionErrorCb( + tr("The selected server does not support a version of the Matrix protocol, that this " + "client understands (v1.1, v1.2 or v1.3). You can't sign in.")); + return; + } + http::client()->get_login([this](mtx::responses::LoginFlows flows, mtx::http::RequestErr err) { if (err || flows.flows.empty())