Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/desktop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kamm <mail@ckamm.de>2017-10-27 11:29:31 +0300
committerChristian Kamm <mail@ckamm.de>2017-10-27 11:29:31 +0300
commit05c1bfb6cf5a890572de41a59da5e719d7c0432c (patch)
tree52407f7a203fd90239ae029305b255daf063c1a9 /src/gui/owncloudsetupwizard.cpp
parent17126de5c703e935d2de9285a880211f0a120e35 (diff)
parent2d2ec2a57639c47f05d2534c5043b130a50fb673 (diff)
Merge remote-tracking branch 'origin/2.4'
Diffstat (limited to 'src/gui/owncloudsetupwizard.cpp')
-rw-r--r--src/gui/owncloudsetupwizard.cpp84
1 files changed, 61 insertions, 23 deletions
diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp
index ac57424e5..e5bcb4a44 100644
--- a/src/gui/owncloudsetupwizard.cpp
+++ b/src/gui/owncloudsetupwizard.cpp
@@ -18,6 +18,7 @@
#include <QProcess>
#include <QMessageBox>
#include <QDesktopServices>
+#include <QApplication>
#include "wizard/owncloudwizardcommon.h"
#include "wizard/owncloudwizard.h"
@@ -45,7 +46,7 @@ OwncloudSetupWizard::OwncloudSetupWizard(QObject *parent)
, _remoteFolder()
{
connect(_ocWizard, &OwncloudWizard::determineAuthType,
- this, &OwncloudSetupWizard::slotDetermineAuthType);
+ this, &OwncloudSetupWizard::slotCheckServer);
connect(_ocWizard, &OwncloudWizard::connectToOCUrl,
this, &OwncloudSetupWizard::slotConnectToOCUrl);
connect(_ocWizard, &OwncloudWizard::createLocalAndRemoteFolders,
@@ -69,6 +70,7 @@ static QPointer<OwncloudSetupWizard> wiz = 0;
void OwncloudSetupWizard::runWizard(QObject *obj, const char *amember, QWidget *parent)
{
if (!wiz.isNull()) {
+ bringWizardToFrontIfVisible();
return;
}
@@ -84,6 +86,17 @@ bool OwncloudSetupWizard::bringWizardToFrontIfVisible()
return false;
}
+ if (wiz->_ocWizard->currentId() == WizardCommon::Page_ShibbolethCreds) {
+ // Try to find if there is a browser open and raise that instead (Issue #6105)
+ const auto allWindow = qApp->topLevelWidgets();
+ auto it = std::find_if(allWindow.cbegin(), allWindow.cend(), [](QWidget *w)
+ { return QLatin1String(w->metaObject()->className()) == QLatin1String("OCC::ShibbolethWebView"); });
+ if (it != allWindow.cend()) {
+ ownCloudGui::raiseDialog(*it);
+ return true;
+ }
+ }
+
ownCloudGui::raiseDialog(wiz->_ocWizard);
return true;
}
@@ -127,7 +140,7 @@ void OwncloudSetupWizard::startWizard()
}
// also checks if an installation is valid and determines auth type in a second step
-void OwncloudSetupWizard::slotDetermineAuthType(const QString &urlString)
+void OwncloudSetupWizard::slotCheckServer(const QString &urlString)
{
QString fixedUrl = urlString;
QUrl url = QUrl::fromUserInput(fixedUrl);
@@ -150,7 +163,7 @@ void OwncloudSetupWizard::slotDetermineAuthType(const QString &urlString)
// We want to reset the QNAM proxy so that the global proxy settings are used (via ClientProxy settings)
account->networkAccessManager()->setProxy(QNetworkProxy(QNetworkProxy::DefaultProxy));
// use a queued invocation so we're as asynchronous as with the other code path
- QMetaObject::invokeMethod(this, "slotContinueDetermineAuth", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(this, "slotFindServer", Qt::QueuedConnection);
}
}
@@ -164,20 +177,40 @@ void OwncloudSetupWizard::slotSystemProxyLookupDone(const QNetworkProxy &proxy)
AccountPtr account = _ocWizard->account();
account->networkAccessManager()->setProxy(proxy);
- slotContinueDetermineAuth();
+ slotFindServer();
}
-void OwncloudSetupWizard::slotContinueDetermineAuth()
+void OwncloudSetupWizard::slotFindServer()
{
AccountPtr account = _ocWizard->account();
// Set fake credentials before we check what credential it actually is.
account->setCredentials(CredentialsFactory::create("dummy"));
- // Before we check the auth type, resolve any permanent redirect
- // chain there might be. We cannot do this only on url/status.php
- // in CheckServerJob, because things like url shorteners don't
- // redirect subpaths.
+ // Determining the actual server URL can be a multi-stage process
+ // 1. Check url/status.php with CheckServerJob
+ // If that works we're done. In that case we don't check the
+ // url directly for redirects, see #5954.
+ // 2. Check the url for permanent redirects (like url shorteners)
+ // 3. Check redirected-url/status.php with CheckServerJob
+
+ // Step 1: Check url/status.php
+ CheckServerJob *job = new CheckServerJob(account, this);
+ job->setIgnoreCredentialFailure(true);
+ connect(job, &CheckServerJob::instanceFound, this, &OwncloudSetupWizard::slotFoundServer);
+ connect(job, &CheckServerJob::instanceNotFound, this, &OwncloudSetupWizard::slotFindServerBehindRedirect);
+ connect(job, &CheckServerJob::timeout, this, &OwncloudSetupWizard::slotNoServerFoundTimeout);
+ job->setTimeout((account->url().scheme() == "https") ? 30 * 1000 : 10 * 1000);
+ job->start();
+
+ // Step 2 and 3 are in slotFindServerBehindRedirect()
+}
+
+void OwncloudSetupWizard::slotFindServerBehindRedirect()
+{
+ AccountPtr account = _ocWizard->account();
+
+ // Step 2: Resolve any permanent redirect chains on the base url
auto redirectCheckJob = account->sendRequest("GET", account->url());
// Use a significantly reduced timeout for this redirect check:
@@ -197,20 +230,20 @@ void OwncloudSetupWizard::slotContinueDetermineAuth()
}
});
- // When done, start checking status.php.
+ // Step 3: When done, start checking status.php.
connect(redirectCheckJob, &SimpleNetworkJob::finishedSignal, this,
[this, account]() {
CheckServerJob *job = new CheckServerJob(account, this);
job->setIgnoreCredentialFailure(true);
- connect(job, &CheckServerJob::instanceFound, this, &OwncloudSetupWizard::slotOwnCloudFoundAuth);
- connect(job, &CheckServerJob::instanceNotFound, this, &OwncloudSetupWizard::slotNoOwnCloudFoundAuth);
- connect(job, &CheckServerJob::timeout, this, &OwncloudSetupWizard::slotNoOwnCloudFoundAuthTimeout);
+ connect(job, &CheckServerJob::instanceFound, this, &OwncloudSetupWizard::slotFoundServer);
+ connect(job, &CheckServerJob::instanceNotFound, this, &OwncloudSetupWizard::slotNoServerFound);
+ connect(job, &CheckServerJob::timeout, this, &OwncloudSetupWizard::slotNoServerFoundTimeout);
job->setTimeout((account->url().scheme() == "https") ? 30 * 1000 : 10 * 1000);
job->start();
- });
+ });
}
-void OwncloudSetupWizard::slotOwnCloudFoundAuth(const QUrl &url, const QJsonObject &info)
+void OwncloudSetupWizard::slotFoundServer(const QUrl &url, const QJsonObject &info)
{
auto serverVersion = CheckServerJob::version(info);
@@ -230,14 +263,10 @@ void OwncloudSetupWizard::slotOwnCloudFoundAuth(const QUrl &url, const QJsonObje
qCInfo(lcWizard) << " was redirected to" << url.toString();
}
- DetermineAuthTypeJob *job = new DetermineAuthTypeJob(_ocWizard->account(), this);
- job->setIgnoreCredentialFailure(true);
- connect(job, &DetermineAuthTypeJob::authType,
- _ocWizard, &OwncloudWizard::setAuthType);
- job->start();
+ slotDetermineAuthType();
}
-void OwncloudSetupWizard::slotNoOwnCloudFoundAuth(QNetworkReply *reply)
+void OwncloudSetupWizard::slotNoServerFound(QNetworkReply *reply)
{
auto job = qobject_cast<CheckServerJob *>(sender());
int resultCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
@@ -279,12 +308,21 @@ void OwncloudSetupWizard::slotNoOwnCloudFoundAuth(QNetworkReply *reply)
_ocWizard->account()->resetRejectedCertificates();
}
-void OwncloudSetupWizard::slotNoOwnCloudFoundAuthTimeout(const QUrl &url)
+void OwncloudSetupWizard::slotNoServerFoundTimeout(const QUrl &url)
{
_ocWizard->displayError(
tr("Timeout while trying to connect to %1 at %2.")
.arg(Utility::escape(Theme::instance()->appNameGUI()), Utility::escape(url.toString())),
- false);
+ false);
+}
+
+void OwncloudSetupWizard::slotDetermineAuthType()
+{
+ DetermineAuthTypeJob *job = new DetermineAuthTypeJob(_ocWizard->account(), this);
+ job->setIgnoreCredentialFailure(true);
+ connect(job, &DetermineAuthTypeJob::authType,
+ _ocWizard, &OwncloudWizard::setAuthType);
+ job->start();
}
void OwncloudSetupWizard::slotConnectToOCUrl(const QString &url)