]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Wizard: Show if server asks for client certificate #2799 #69 (#5261)
authorMarkus Goetz <markus@woboq.com>
Wed, 23 Nov 2016 10:43:15 +0000 (11:43 +0100)
committerGitHub <noreply@github.com>
Wed, 23 Nov 2016 10:43:15 +0000 (11:43 +0100)
This also nicely displays the 'Untrusted domain' message of oC.
The link to add a trusted domain (via web browser) is clickable.

src/gui/owncloudsetupwizard.cpp
src/gui/wizard/owncloudsetuppage.cpp
src/libsync/networkjobs.cpp

index b33e96bd9181b4d3f3f6e839f0e4d915e7528b1f..cc32ef3bb381020ce3ba35894c1e0b74cd191b15 100644 (file)
@@ -203,10 +203,34 @@ void OwncloudSetupWizard::slotOwnCloudFoundAuth(const QUrl& url, const QVariantM
 
 void OwncloudSetupWizard::slotNoOwnCloudFoundAuth(QNetworkReply *reply)
 {
-    _ocWizard->displayError(tr("Failed to connect to %1 at %2:<br/>%3")
-                            .arg(Theme::instance()->appNameGUI(),
-                                 reply->url().toString(),
-                                 reply->errorString()), checkDowngradeAdvised(reply));
+    int resultCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+    QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
+
+    // Do this early because reply might be deleted in message box event loop
+    QString msg = tr("Failed to connect to %1 at %2:<br/>%3")
+            .arg(Theme::instance()->appNameGUI(),
+                 reply->url().toString(),
+                 reply->errorString());
+    bool isDowngradeAdvised = checkDowngradeAdvised(reply);
+
+    // If a client cert is needed, nginx sends:
+    // 400 "<html>\r\n<head><title>400 No required SSL certificate was sent</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>400 Bad Request</h1></center>\r\n<center>No required SSL certificate was sent</center>\r\n<hr><center>nginx/1.10.0</center>\r\n</body>\r\n</html>\r\n"
+    // If the IP needs to be added as "trusted domain" in oC, oC sends:
+    // https://gist.github.com/guruz/ab6d11df1873c2ad3932180de92e7d82
+    if (resultCode != 200 && contentType.startsWith("text/")) {
+        // FIXME: Synchronous dialogs are not so nice because of event loop recursion
+        // (we already create a dialog further below)
+        QString serverError = reply->peek(1024*20);
+        qDebug() << serverError;
+        QMessageBox messageBox(_ocWizard);
+        messageBox.setText(serverError);
+        messageBox.addButton(QMessageBox::Ok);
+        messageBox.setTextFormat(Qt::RichText);
+        messageBox.exec();
+    }
+
+    // Displays message inside wizard and possibly also another message box
+    _ocWizard->displayError(msg, isDowngradeAdvised);
 
     // Allow the credentials dialog to pop up again for the same URL.
     // Maybe the user just clicked 'Cancel' by accident or changed his mind.
index 95ea565e2abe7af01f020c60b84c59aab0aa7b37..7700e7cf50be4a249c457ce8b87e1596d4bc1139 100644 (file)
@@ -256,6 +256,7 @@ void OwncloudSetupPage::setErrorString( const QString& err, bool retryHTTPonly )
 
                 OwncloudConnectionMethodDialog dialog;
                 dialog.setUrl(url);
+                // FIXME: Synchronous dialogs are not so nice because of event loop recursion
                 int retVal = dialog.exec();
 
                 switch (retVal) {
index 10fd3d5452b4761fcc9873da03642b9a7d8c97c6..97426404522451b26fea85fc6a9b987152c27b03 100644 (file)
@@ -463,7 +463,7 @@ bool CheckServerJob::finished()
     }
 
     bool success = false;
-    QByteArray body = reply()->readAll();
+    QByteArray body = reply()->peek(4*1024);
     int httpStatus = reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
     if( body.isEmpty() || httpStatus != 200) {
         qDebug() << "error: status.php replied " << httpStatus << body;