Selaa lähdekoodia

Command-line client. Do not trust SSL certificates by default, unlss '--trust' option is set.

Signed-off-by: allexzander <blackslayer4@gmail.com>
allexzander 3 vuotta sitten
vanhempi
commit
4930531949
4 muutettua tiedostoa jossa 31 lisäystä ja 5 poistoa
  1. 1 0
      src/cmd/cmd.cpp
  2. 15 5
      src/cmd/simplesslerrorhandler.cpp
  3. 10 0
      src/libsync/account.cpp
  4. 5 0
      src/libsync/account.h

+ 1 - 0
src/cmd/cmd.cpp

@@ -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"));

+ 15 - 5
src/cmd/simplesslerrorhandler.cpp

@@ -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;
 }
 }

+ 10 - 0
src/libsync/account.cpp

@@ -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

+ 5 - 0
src/libsync/account.h

@@ -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;