Command-line client. Do not trust SSL certificates by default, unlss '--trust' option...
authorallexzander <blackslayer4@gmail.com>
Fri, 7 Oct 2022 15:09:10 +0000 (18:09 +0300)
committerallexzander <blackslayer4@gmail.com>
Tue, 11 Oct 2022 06:43:31 +0000 (09:43 +0300)
Signed-off-by: allexzander <blackslayer4@gmail.com>
src/cmd/cmd.cpp
src/cmd/simplesslerrorhandler.cpp
src/libsync/account.cpp
src/libsync/account.h

index 1dd894a67ec09fa01ed34868815acf2b719e317d..cdc58391114e99eca63804fa852077e965347ee6 100644 (file)
@@ -440,6 +440,7 @@ int main(int argc, char **argv)
 
     account->setUrl(hostUrl);
     account->setSslErrorHandler(sslErrorHandler);
+    account->setTrustCertificates(options.trustSSL);
 
     QEventLoop loop;
     auto *job = new JsonApiJob(account, QLatin1String("ocs/v1.php/cloud/capabilities"));
index 48a19977334147a9793eaa209643c933d2ed382a..b88fbeb7b612565a9d1067d533de50f558c4d33f 100644 (file)
@@ -19,17 +19,27 @@ namespace OCC {
 
 bool SimpleSslErrorHandler::handleErrors(QList<QSslError> errors, const QSslConfiguration &conf, QList<QSslCertificate> *certs, OCC::AccountPtr account)
 {
-    (void)account;
-    (void)conf;
+    Q_UNUSED(conf);
 
-    if (!certs) {
-        qDebug() << "Certs parameter required but is NULL!";
+    if (!account || !certs) {
+        qDebug() << "account and certs parameters are required!";
         return false;
     }
 
+    if (account->trustCertificates()) {
+        for (const auto &error : qAsConst(errors)) {
+            certs->append(error.certificate());
+        }
+        return true;
+    }
+
     for (const auto &error : qAsConst(errors)) {
-        certs->append(error.certificate());
+        if (!account->approvedCerts().contains(error.certificate())) {
+            certs->append(error.certificate());
+            return false;
+        }
     }
+
     return true;
 }
 }
index bb23cd07cbcecf5a1647e15b4383d5317be68123..f3f8c1f108569f407e21f649320efe3c3d2feab2 100644 (file)
@@ -909,4 +909,14 @@ bool Account::fileCanBeUnlocked(SyncJournalDb * const journal,
     return false;
 }
 
+void Account::setTrustCertificates(bool trustCertificates)
+{
+    _trustCertificates = trustCertificates;
+}
+
+bool Account::trustCertificates() const
+{
+    return _trustCertificates;
+}
+
 } // namespace OCC
index d4a7858a06a749d7a4745d048871af631bc9dd8a..635caeac8a90b92310451e64ffd3f3139090f10b 100644 (file)
@@ -291,6 +291,9 @@ public:
 
     bool fileCanBeUnlocked(SyncJournalDb * const journal, const QString &folderRelativePath) const;
 
+    void setTrustCertificates(bool trustCertificates);
+    [[nodiscard]] bool trustCertificates() const;
+
 public slots:
     /// Used when forgetting credentials
     void clearQNAMCache();
@@ -343,6 +346,8 @@ private:
 
     static QString davPathBase();
 
+    bool _trustCertificates = false;
+
     QWeakPointer<Account> _sharedThis;
     QString _id;
     QString _davUser;