From: Kevin Ottens Date: Wed, 15 Jul 2020 13:26:45 +0000 (+0200) Subject: Update our E2E API requirement X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~222^2^2~68 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=f46276d70d9017873b163ea5cee3fc04b6c9ad39;p=nextcloud-desktop.git Update our E2E API requirement Now that we adjusted our protocol to follow the slightly updated server API, let's make sure we don't try to talk to a server with an older API. Signed-off-by: Kevin Ottens --- diff --git a/src/libsync/capabilities.cpp b/src/libsync/capabilities.cpp index 190edfe77..78035fa8c 100644 --- a/src/libsync/capabilities.cpp +++ b/src/libsync/capabilities.cpp @@ -87,9 +87,35 @@ bool Capabilities::shareResharing() const bool Capabilities::clientSideEncryptionAvailable() const { auto it = _capabilities.constFind(QStringLiteral("end-to-end-encryption")); - if (it != _capabilities.constEnd()) - return (*it).toMap().value(QStringLiteral("enabled"), false).toBool(); - return false; + if (it == _capabilities.constEnd()) { + return false; + } + + const auto properties = (*it).toMap(); + const auto enabled = properties.value(QStringLiteral("enabled"), false).toBool(); + if (!enabled) { + return false; + } + + const auto version = properties.value(QStringLiteral("api-version"), "1.0").toByteArray(); + qCInfo(lcServerCapabilities) << "E2EE API version:" << version; + const auto splittedVersion = version.split('.'); + + bool ok = false; + const auto major = !splittedVersion.isEmpty() ? splittedVersion.at(0).toInt(&ok) : 0; + if (!ok) { + qCWarning(lcServerCapabilities) << "Didn't understand version scheme (major), E2EE disabled"; + return false; + } + + ok = false; + const auto minor = splittedVersion.size() > 1 ? splittedVersion.at(1).toInt(&ok) : 0; + if (!ok) { + qCWarning(lcServerCapabilities) << "Didn't understand version scheme (minor), E2EE disabled"; + return false; + } + + return major == 1 && minor >= 1; } bool Capabilities::notificationsAvailable() const