[CSE] Check the server for client side encryption
authorTomaz Canabrava <tcanabrava@kde.org>
Thu, 24 Aug 2017 10:38:00 +0000 (12:38 +0200)
committerRoeland Jago Douma <roeland@famdouma.nl>
Wed, 18 Oct 2017 19:51:36 +0000 (21:51 +0200)
Call the apps api and check if the response has
the client_side_encryption key.

Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
src/libsync/connectionvalidator.cpp
src/libsync/connectionvalidator.h

index 2acbf74f1ce8e051198b378875c90803f9ee7b20..75a2ff23fd7417a9a39cdd1b1a12a6f27d00b124 100644 (file)
@@ -14,6 +14,7 @@
 
 #include <QJsonDocument>
 #include <QJsonObject>
+#include <QJsonArray>
 #include <QLoggingCategory>
 #include <QNetworkReply>
 #include <QNetworkProxyFactory>
@@ -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)
index b8bca9af94fe941d19a1286d78126e839cd4c753..9513aef06ab338305c1945ef0bdb7dddca35e977 100644 (file)
@@ -128,6 +128,7 @@ protected slots:
 private:
     void reportResult(Status status);
     void checkServerCapabilities();
+    void checkClientSideEncryption();
     void fetchUser();
 
     /** Sets the account's server version