diff -Naur desktop-3.2.3.orig/src/CMakeLists.txt desktop-3.2.3/src/CMakeLists.txt --- desktop-3.2.3.orig/src/CMakeLists.txt 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/CMakeLists.txt 2021-07-07 20:26:40.620839467 +0200 @@ -4,7 +4,13 @@ set(synclib_NAME ${APPLICATION_EXECUTABLE}sync) -find_package(Qt5 5.12 COMPONENTS Core Network Xml Concurrent WebEngineWidgets WebEngine REQUIRED) +find_package(Qt5 5.12 COMPONENTS Core Network Xml Concurrent REQUIRED) +find_package(Qt5 5.12 COMPONENTS WebEngineWidgets WebEngine) + +if(Qt5WebEngine_FOUND AND Qt5WebEngineWidgets_FOUND) + add_compile_definitions(WITH_WEBENGINE=1) +endif() + get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION) message(STATUS "Using Qt ${Qt5Core_VERSION} (${QT_QMAKE_EXECUTABLE})") diff -Naur desktop-3.2.3.orig/src/gui/CMakeLists.txt desktop-3.2.3/src/gui/CMakeLists.txt --- desktop-3.2.3.orig/src/gui/CMakeLists.txt 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/gui/CMakeLists.txt 2021-07-07 20:26:40.620839467 +0200 @@ -128,12 +128,17 @@ wizard/owncloudwizardcommon.cpp wizard/owncloudwizard.cpp wizard/owncloudwizardresultpage.cpp - wizard/webviewpage.cpp - wizard/webview.cpp wizard/slideshow.cpp wizard/welcomepage.cpp wizard/linklabel.cpp -) + ) + +if (Qt5WebEngine_FOUND AND Qt5WebEngineWidgets_FOUND) + list(APPEND client_SRCS + wizard/webviewpage.cpp + wizard/webview.cpp + ) +endif() IF(BUILD_UPDATER) set(updater_SRCS @@ -339,9 +344,12 @@ Qt5::Qml Qt5::Quick Qt5::QuickControls2 - Qt5::WebEngineWidgets ${synclib_NAME} -) + ) + +if(Qt5WebEngine_FOUND AND Qt5WebEngineWidgets_FOUND) + target_link_libraries(nextcloudCore PUBLIC Qt5::WebEngineWidgets) +endif() set_target_properties(nextcloudCore PROPERTIES diff -Naur desktop-3.2.3.orig/src/gui/creds/webflowcredentials.cpp desktop-3.2.3/src/gui/creds/webflowcredentials.cpp --- desktop-3.2.3.orig/src/gui/creds/webflowcredentials.cpp 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/gui/creds/webflowcredentials.cpp 2021-07-07 20:26:40.618839464 +0200 @@ -16,7 +16,9 @@ #include "account.h" #include "configfile.h" #include "theme.h" +#ifdef WITH_WEBENGINE #include "wizard/webview.h" +#endif // WITH_WEBENGINE #include "webflowcredentialsdialog.h" using namespace QKeychain; @@ -144,8 +146,12 @@ // Do a DetermineAuthTypeJob to make sure that the server is still using Flow2 auto job = new DetermineAuthTypeJob(_account->sharedFromThis(), this); connect(job, &DetermineAuthTypeJob::authType, [this](DetermineAuthTypeJob::AuthType type) { - // LoginFlowV2 > WebViewFlow > OAuth > Shib > Basic + // LoginFlowV2 > WebViewFlow > OAuth > Shib > Basic +#ifdef WITH_WEBENGINE bool useFlow2 = (type != DetermineAuthTypeJob::WebViewFlow); +#else // WITH_WEBENGINE + bool useFlow2 = true; +#endif // WITH_WEBENGINE _askDialog = new WebFlowCredentialsDialog(_account, useFlow2); diff -Naur desktop-3.2.3.orig/src/gui/creds/webflowcredentialsdialog.cpp desktop-3.2.3/src/gui/creds/webflowcredentialsdialog.cpp --- desktop-3.2.3.orig/src/gui/creds/webflowcredentialsdialog.cpp 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/gui/creds/webflowcredentialsdialog.cpp 2021-07-07 20:26:40.618839464 +0200 @@ -8,16 +8,20 @@ #include "owncloudgui.h" #include "headerbanner.h" #include "wizard/owncloudwizardcommon.h" +#ifdef WITH_WEBENGINE #include "wizard/webview.h" +#endif // WITH_WEBENGINE #include "wizard/flow2authwidget.h" namespace OCC { WebFlowCredentialsDialog::WebFlowCredentialsDialog(Account *account, bool useFlow2, QWidget *parent) - : QDialog(parent), - _useFlow2(useFlow2), - _flow2AuthWidget(nullptr), - _webView(nullptr) + : QDialog(parent) + , _useFlow2(useFlow2) + , _flow2AuthWidget(nullptr) +#ifdef WITH_WEBENGINE + , _webView(nullptr) +#endif // WITH_WEBENGINE { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); @@ -49,10 +53,12 @@ _flow2AuthWidget->startAuth(account); } else { +#ifdef WITH_WEBENGINE _webView = new WebView(); _containerLayout->addWidget(_webView); connect(_webView, &WebView::urlCatched, this, &WebFlowCredentialsDialog::urlCatched); +#endif // WITH_WEBENGINE } auto app = static_cast(qApp); @@ -73,12 +79,14 @@ void WebFlowCredentialsDialog::closeEvent(QCloseEvent* e) { Q_UNUSED(e) +#ifdef WITH_WEBENGINE if (_webView) { // Force calling WebView::~WebView() earlier so that _profile and _page are // deleted in the correct order. _webView->deleteLater(); _webView = nullptr; } +#endif // WITH_WEBENGINE if (_flow2AuthWidget) { _flow2AuthWidget->resetAuth(); @@ -89,9 +97,14 @@ emit onClose(); } -void WebFlowCredentialsDialog::setUrl(const QUrl &url) { +void WebFlowCredentialsDialog::setUrl(const QUrl &url) +{ +#ifdef WITH_WEBENGINE if (_webView) _webView->setUrl(url); +#else // WITH_WEBENGINE + Q_UNUSED(url); +#endif // WITH_WEBENGINE } void WebFlowCredentialsDialog::setInfo(const QString &msg) { diff -Naur desktop-3.2.3.orig/src/gui/creds/webflowcredentialsdialog.h desktop-3.2.3/src/gui/creds/webflowcredentialsdialog.h --- desktop-3.2.3.orig/src/gui/creds/webflowcredentialsdialog.h 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/gui/creds/webflowcredentialsdialog.h 2021-07-07 20:26:40.618839464 +0200 @@ -13,7 +13,9 @@ namespace OCC { class HeaderBanner; +#ifdef WITH_WEBENGINE class WebView; +#endif // WITH_WEBENGINE class Flow2AuthWidget; class WebFlowCredentialsDialog : public QDialog @@ -50,7 +52,9 @@ bool _useFlow2; Flow2AuthWidget *_flow2AuthWidget; +#ifdef WITH_WEBENGINE WebView *_webView; +#endif // WITH_WEBENGINE QLabel *_errorLabel; QLabel *_infoLabel; diff -Naur desktop-3.2.3.orig/src/gui/wizard/owncloudsetuppage.cpp desktop-3.2.3/src/gui/wizard/owncloudsetuppage.cpp --- desktop-3.2.3.orig/src/gui/wizard/owncloudsetuppage.cpp 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/gui/wizard/owncloudsetuppage.cpp 2021-07-07 20:26:40.619839465 +0200 @@ -119,21 +119,6 @@ _ui.leUrl->setPalette(leUrlPalette); } -#ifdef WITH_PROVIDERS -void OwncloudSetupPage::slotLogin() -{ - _ocWizard->setRegistration(false); -} -void OwncloudSetupPage::slotGotoProviderList() -{ - _ocWizard->setRegistration(true); - _ocWizard->setAuthType(DetermineAuthTypeJob::AuthType::WebViewFlow); - _authTypeKnown = true; - _checking = false; - emit completeChanged(); -} -#endif - // slot hit from textChanged of the url entry field. void OwncloudSetupPage::slotUrlChanged(const QString &url) { @@ -228,8 +213,10 @@ return WizardCommon::Page_OAuthCreds; case DetermineAuthTypeJob::LoginFlowV2: return WizardCommon::Page_Flow2AuthCreds; +#ifdef WITH_WEBENGINE case DetermineAuthTypeJob::WebViewFlow: return WizardCommon::Page_WebView; +#endif // WITH_WEBENGINE } return WizardCommon::Page_HttpCreds; } diff -Naur desktop-3.2.3.orig/src/gui/wizard/owncloudsetuppage.h desktop-3.2.3/src/gui/wizard/owncloudsetuppage.h --- desktop-3.2.3.orig/src/gui/wizard/owncloudsetuppage.h 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/gui/wizard/owncloudsetuppage.h 2021-07-07 20:26:40.617839462 +0200 @@ -67,10 +67,6 @@ protected slots: void slotUrlChanged(const QString &); void slotUrlEditFinished(); -#ifdef WITH_PROVIDERS - void slotLogin(); - void slotGotoProviderList(); -#endif void setupCustomization(); diff -Naur desktop-3.2.3.orig/src/gui/wizard/owncloudwizardcommon.h desktop-3.2.3/src/gui/wizard/owncloudwizardcommon.h --- desktop-3.2.3.orig/src/gui/wizard/owncloudwizardcommon.h 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/gui/wizard/owncloudwizardcommon.h 2021-07-07 20:26:40.619839465 +0200 @@ -46,7 +46,9 @@ Page_HttpCreds, Page_OAuthCreds, Page_Flow2AuthCreds, +#ifdef WITH_WEBENGINE Page_WebView, +#endif // WITH_WEBENGINE Page_AdvancedSetup, Page_Result }; diff -Naur desktop-3.2.3.orig/src/gui/wizard/owncloudwizard.cpp desktop-3.2.3/src/gui/wizard/owncloudwizard.cpp --- desktop-3.2.3.orig/src/gui/wizard/owncloudwizard.cpp 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/gui/wizard/owncloudwizard.cpp 2021-07-07 20:26:40.619839465 +0200 @@ -54,7 +54,11 @@ , _flow2CredsPage(new Flow2AuthCredsPage) , _advancedSetupPage(new OwncloudAdvancedSetupPage(this)) , _resultPage(new OwncloudWizardResultPage) +#ifdef WITH_WEBENGINE , _webViewPage(new WebViewPage(this)) +#else // WITH_WEBENGINE + , _webViewPage(nullptr) +#endif // WITH_WEBENGINE { setObjectName("owncloudWizard"); @@ -66,7 +70,9 @@ setPage(WizardCommon::Page_Flow2AuthCreds, _flow2CredsPage); setPage(WizardCommon::Page_AdvancedSetup, _advancedSetupPage); setPage(WizardCommon::Page_Result, _resultPage); +#ifdef WITH_WEBENGINE setPage(WizardCommon::Page_WebView, _webViewPage); +#endif // WITH_WEBENGINE connect(this, &QDialog::finished, this, &OwncloudWizard::basicSetupFinished); @@ -78,7 +84,9 @@ connect(_httpCredsPage, &OwncloudHttpCredsPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); connect(_browserCredsPage, &OwncloudOAuthCredsPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); connect(_flow2CredsPage, &Flow2AuthCredsPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); +#ifdef WITH_WEBENGINE connect(_webViewPage, &WebViewPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); +#endif // WITH_WEBENGINE connect(_advancedSetupPage, &OwncloudAdvancedSetupPage::createLocalAndRemoteFolders, this, &OwncloudWizard::createLocalAndRemoteFolders); connect(this, &QWizard::customButtonClicked, this, &OwncloudWizard::skipFolderConfiguration); @@ -230,9 +238,11 @@ _flow2CredsPage->setConnected(); break; +#ifdef WITH_WEBENGINE case WizardCommon::Page_WebView: _webViewPage->setConnected(); break; +#endif // WITH_WEBENGINE case WizardCommon::Page_AdvancedSetup: _advancedSetupPage->directoriesCreated(); @@ -256,8 +266,10 @@ _credentialsPage = _browserCredsPage; } else if (type == DetermineAuthTypeJob::LoginFlowV2) { _credentialsPage = _flow2CredsPage; +#ifdef WITH_WEBENGINE } else if (type == DetermineAuthTypeJob::WebViewFlow) { _credentialsPage = _webViewPage; +#endif // WITH_WEBENGINE } else { // try Basic auth even for "Unknown" _credentialsPage = _httpCredsPage; } @@ -281,7 +293,11 @@ button(QWizard::NextButton)->setHidden(true); // Need to set it from here, otherwise it has no effect _welcomePage->setLoginButtonDefault(); - } else if (id == WizardCommon::Page_WebView || id == WizardCommon::Page_Flow2AuthCreds) { + } else if ( +#ifdef WITH_WEBENGINE + id == WizardCommon::Page_WebView || +#endif // WITH_WEBENGINE + id == WizardCommon::Page_Flow2AuthCreds) { setButtonLayout({ QWizard::Stretch, QWizard::BackButton }); } else if (id == WizardCommon::Page_AdvancedSetup) { setButtonLayout({ QWizard::Stretch, QWizard::CustomButton1, QWizard::BackButton, QWizard::NextButton }); diff -Naur desktop-3.2.3.orig/src/gui/wizard/owncloudwizard.h desktop-3.2.3/src/gui/wizard/owncloudwizard.h --- desktop-3.2.3.orig/src/gui/wizard/owncloudwizard.h 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/gui/wizard/owncloudwizard.h 2021-07-07 20:26:40.619839465 +0200 @@ -128,7 +128,7 @@ OwncloudAdvancedSetupPage *_advancedSetupPage; OwncloudWizardResultPage *_resultPage; AbstractCredentialsWizardPage *_credentialsPage = nullptr; - WebViewPage *_webViewPage; + WebViewPage *_webViewPage = nullptr; QStringList _setupLog; diff -Naur desktop-3.2.3.orig/src/gui/wizard/welcomepage.cpp desktop-3.2.3/src/gui/wizard/welcomepage.cpp --- desktop-3.2.3.orig/src/gui/wizard/welcomepage.cpp 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/gui/wizard/welcomepage.cpp 2021-07-07 20:26:40.620839467 +0200 @@ -13,6 +13,7 @@ */ #include "welcomepage.h" +#include "guiutility.h" #include "theme.h" #include "wizard/owncloudwizard.h" #include "wizard/slideshow.h" @@ -94,11 +95,18 @@ void WelcomePage::setupCreateAccountButton() { +#ifdef WITH_WEBENGINE connect(_ui->createAccountButton, &QPushButton::clicked, this, [this](bool /*checked*/) { _ocWizard->setRegistration(true); _nextPage = WizardCommon::Page_WebView; _ocWizard->next(); }); +#else // WITH_WEBENGINE + connect(_ui->createAccountButton, &QPushButton::clicked, this, [this](bool /*checked*/) { + _ocWizard->setRegistration(true); + Utility::openBrowser(QStringLiteral("https://nextcloud.com/register")); + }); +#endif // WITH_WEBENGINE } void WelcomePage::setupHostYourOwnServerLabel() diff -Naur desktop-3.2.3.orig/src/libsync/networkjobs.cpp desktop-3.2.3/src/libsync/networkjobs.cpp --- desktop-3.2.3.orig/src/libsync/networkjobs.cpp 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/libsync/networkjobs.cpp 2021-07-07 20:26:40.619839465 +0200 @@ -30,6 +30,7 @@ #include #include #include +#include #ifndef TOKEN_AUTH_ONLY #include #include @@ -958,7 +959,11 @@ auto flow = gs.toObject().value("desktoplogin"); if (flow != QJsonValue::Undefined) { if (flow.toInt() == 1) { +#ifdef WITH_WEBENGINE _resultOldFlow = WebViewFlow; +#else // WITH_WEBENGINE + qCWarning(lcDetermineAuthTypeJob) << "Server does only support flow1, but this client was compiled without support for flow1"; +#endif // WITH_WEBENGINE } } } @@ -985,20 +990,24 @@ auto result = _resultPropfind; +#ifdef WITH_WEBENGINE // WebViewFlow > OAuth > Basic if (_account->serverVersionInt() >= Account::makeServerVersion(12, 0, 0)) { result = WebViewFlow; } +#endif // WITH_WEBENGINE // LoginFlowV2 > WebViewFlow > OAuth > Basic if (_account->serverVersionInt() >= Account::makeServerVersion(16, 0, 0)) { result = LoginFlowV2; } +#ifdef WITH_WEBENGINE // If we determined that we need the webview flow (GS for example) then we switch to that if (_resultOldFlow == WebViewFlow) { result = WebViewFlow; } +#endif // WITH_WEBENGINE // If we determined that a simple get gave us an authentication required error // then the server enforces basic auth and we got no choice but to use this diff -Naur desktop-3.2.3.orig/src/libsync/networkjobs.h desktop-3.2.3/src/libsync/networkjobs.h --- desktop-3.2.3.orig/src/libsync/networkjobs.h 2021-06-24 12:04:33.000000000 +0200 +++ desktop-3.2.3/src/libsync/networkjobs.h 2021-07-07 20:26:40.619839465 +0200 @@ -444,9 +444,11 @@ public: enum AuthType { NoAuthType, // used only before we got a chance to probe the server +#ifdef WITH_WEBENGINE + WebViewFlow, +#endif // WITH_WEBENGINE Basic, // also the catch-all fallback for backwards compatibility reasons OAuth, - WebViewFlow, LoginFlowV2 }; Q_ENUM(AuthType)