From 1c85f94b007cfe4682f1017fc4c3c0f63f1f37c9 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Sun, 3 Sep 2017 13:33:50 +0200 Subject: [PATCH] [cse] Use server capabilities to query for cse --- src/gui/accountsettings.cpp | 5 +++-- src/libsync/account.cpp | 10 ---------- src/libsync/account.h | 4 ---- src/libsync/capabilities.cpp | 6 ++++++ src/libsync/capabilities.h | 3 +++ src/libsync/connectionvalidator.cpp | 24 ------------------------ src/libsync/connectionvalidator.h | 1 - 7 files changed, 12 insertions(+), 41 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index f64b584e7..091d7ce85 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -277,7 +277,7 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) } auto fileId = _model->data(index, FolderStatusModel::FileIdRole).toByteArray(); - if (accountsState()->account()->hasClientSideEncryption()) { + if (accountsState()->account()->capabilities().clientSideEncryptionAvaliable()) { ac = menu->addAction(tr("Encrypt")); connect(ac, &QAction::triggered, [this, &fileId](bool triggered) { Q_UNUSED(triggered); @@ -285,6 +285,7 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) "ocs/v2.php/apps/client_side_encryption/api/v1/encrypted/" + QString(fileId)); connect(job, &OCC::JsonApiJob::jsonReceived, [this](const QJsonDocument& json, int httpResponse) { + Q_UNUSED(json); qCInfo(lcAccountSettings) << "Encrypt Http Response" << httpResponse; }); job->start(); @@ -735,7 +736,7 @@ void AccountSettings::slotAccountStateChanged() * if it has, do not offer to create one. */ qCInfo(lcAccountSettings) << "Accout" << accountsState()->account()->displayName() - << "Client Side Encryption" << accountsState()->account()->hasClientSideEncryption(); + << "Client Side Encryption" << accountsState()->account()->capabilities().clientSideEncryptionAvaliable(); } } diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index bf3f67066..98190e653 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -482,14 +482,4 @@ void Account::setNonShib(bool nonShib) } } -bool Account::hasClientSideEncryption() const -{ - return _hasClientSideEncryption; -} - -void Account::setHasClientSideEncryption(bool cse) -{ - _hasClientSideEncryption = cse; -} - } // namespace OCC diff --git a/src/libsync/account.h b/src/libsync/account.h index e33d8baac..aa1009287 100644 --- a/src/libsync/account.h +++ b/src/libsync/account.h @@ -225,9 +225,6 @@ public: /// Called by network jobs on credential errors, emits invalidCredentials() void handleInvalidCredentials(); - bool hasClientSideEncryption() const; - void setHasClientSideEncryption(bool cse); - public slots: /// Used when forgetting credentials void clearQNAMCache(); @@ -278,7 +275,6 @@ private: QSharedPointer _am; QScopedPointer _credentials; bool _http2Supported = false; - bool _hasClientSideEncryption; /// Certificates that were explicitly rejected by the user QList _rejectedCertificates; diff --git a/src/libsync/capabilities.cpp b/src/libsync/capabilities.cpp index 4dfc33b89..09d9fe21f 100644 --- a/src/libsync/capabilities.cpp +++ b/src/libsync/capabilities.cpp @@ -81,6 +81,12 @@ bool Capabilities::shareResharing() const return _capabilities["files_sharing"].toMap()["resharing"].toBool(); } +bool Capabilities::clientSideEncryptionAvaliable() const +{ + return _capabilities.keys().indexOf("client-side-encryption") != 1 + ? _capabilities["client-side-encryption"].toMap()["enabled"].toBool() : false; +} + bool Capabilities::notificationsAvailable() const { // We require the OCS style API in 9.x, can't deal with the REST one only found in 8.2 diff --git a/src/libsync/capabilities.h b/src/libsync/capabilities.h index 9b15edb9c..8e7011913 100644 --- a/src/libsync/capabilities.h +++ b/src/libsync/capabilities.h @@ -53,6 +53,9 @@ public: /// returns true if the capabilities report notifications bool notificationsAvailable() const; + /// returns true if the server supports client side encryption + bool clientSideEncryptionAvaliable() const; + /// returns true if the capabilities are loaded already. bool isValid() const; diff --git a/src/libsync/connectionvalidator.cpp b/src/libsync/connectionvalidator.cpp index c0de1cb6c..920d247f5 100644 --- a/src/libsync/connectionvalidator.cpp +++ b/src/libsync/connectionvalidator.cpp @@ -246,36 +246,12 @@ 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 9513aef06..b8bca9af9 100644 --- a/src/libsync/connectionvalidator.h +++ b/src/libsync/connectionvalidator.h @@ -128,7 +128,6 @@ protected slots: private: void reportResult(Status status); void checkServerCapabilities(); - void checkClientSideEncryption(); void fetchUser(); /** Sets the account's server version