From 1c32f6bb2e6aa6894a1b0c57a79615a1f5322615 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Thu, 24 Aug 2017 12:38:00 +0200 Subject: [PATCH] [CSE] Check the server for client side encryption Call the apps api and check if the response has the client_side_encryption key. Signed-off-by: Tomaz Canabrava --- src/libsync/connectionvalidator.cpp | 25 +++++++++++++++++++++++++ src/libsync/connectionvalidator.h | 1 + 2 files changed, 26 insertions(+) diff --git a/src/libsync/connectionvalidator.cpp b/src/libsync/connectionvalidator.cpp index 2acbf74f1..75a2ff23f 100644 --- a/src/libsync/connectionvalidator.cpp +++ b/src/libsync/connectionvalidator.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -245,12 +246,36 @@ void ConnectionValidator::slotAuthSuccess() checkServerCapabilities(); } +void ConnectionValidator::checkClientSideEncryption() +{ + JsonApiJob *job = new JsonApiJob(_account, QLatin1String("ocs/v2.php/cloud/apps"), this); + job->setTimeout(timeoutToUseMsec); + connect(job, &JsonApiJob::jsonReceived, [this](const QJsonDocument& json, int httpResponse) { + Q_UNUSED(httpResponse); + auto apps = json.object().value("ocs").toObject().value("data").toObject().value("apps").toArray().toVariantList(); + + bool hasClientSideEncryption = false; + for(const auto& app : qAsConst(apps)) { + if (app.toString() == "client_side_encryption") { + hasClientSideEncryption = true; + qCInfo(lcConnectionValidator()) << "Found Client Side Encryption"; + break; + } + } + + // _account->setHasClientSideEncryption(hasClientSideEncryption); + }); + job->start(); +} + void ConnectionValidator::checkServerCapabilities() { JsonApiJob *job = new JsonApiJob(_account, QLatin1String("ocs/v1.php/cloud/capabilities"), this); job->setTimeout(timeoutToUseMsec); QObject::connect(job, &JsonApiJob::jsonReceived, this, &ConnectionValidator::slotCapabilitiesRecieved); job->start(); + + checkClientSideEncryption(); } void ConnectionValidator::slotCapabilitiesRecieved(const QJsonDocument &json) diff --git a/src/libsync/connectionvalidator.h b/src/libsync/connectionvalidator.h index b8bca9af9..9513aef06 100644 --- a/src/libsync/connectionvalidator.h +++ b/src/libsync/connectionvalidator.h @@ -128,6 +128,7 @@ protected slots: private: void reportResult(Status status); void checkServerCapabilities(); + void checkClientSideEncryption(); void fetchUser(); /** Sets the account's server version