diff --git a/doc/conffile.rst b/doc/conffile.rst index 8d403df30bd8a..670cc4d607540 100644 --- a/doc/conffile.rst +++ b/doc/conffile.rst @@ -41,6 +41,8 @@ Some interesting values that can be set on the configuration file are: | ``chunkSize`` | ``10000000`` (10 MB) | Specifies the chunk size of uploaded files in bytes. | | | | The client will dynamically adjust this size within the maximum and minimum bounds (see below). | +----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+ +| ``forceLoginV2`` | ``false`` | If the client should force the new login flow, eventhough some circumstances might need the old flow. | ++----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+ | ``minChunkSize`` | ``1000000`` (1 MB) | Specifies the minimum chunk size of uploaded files in bytes. | +----------------------------------+--------------------------+--------------------------------------------------------------------------------------------------------+ | ``maxChunkSize`` | ``1000000000`` (1000 MB) | Specifies the maximum chunk size of uploaded files in bytes. | diff --git a/src/gui/wizard/owncloudsetuppage.cpp b/src/gui/wizard/owncloudsetuppage.cpp index c7134478ab0ae..15be3e342dd5e 100644 --- a/src/gui/wizard/owncloudsetuppage.cpp +++ b/src/gui/wizard/owncloudsetuppage.cpp @@ -213,6 +213,8 @@ int OwncloudSetupPage::nextId() const return WizardCommon::Page_Flow2AuthCreds; #ifdef WITH_WEBENGINE case DetermineAuthTypeJob::WebViewFlow: + if (this->useFlow2) + return WizardCommon::Page_Flow2AuthCreds; return WizardCommon::Page_WebView; #endif // WITH_WEBENGINE case DetermineAuthTypeJob::NoAuthType: diff --git a/src/gui/wizard/owncloudsetuppage.h b/src/gui/wizard/owncloudsetuppage.h index e9c5da0d2c0d0..06cea0753695e 100644 --- a/src/gui/wizard/owncloudsetuppage.h +++ b/src/gui/wizard/owncloudsetuppage.h @@ -89,6 +89,9 @@ protected slots: QProgressIndicator *_progressIndi; OwncloudWizard *_ocWizard; AddCertificateDialog *addCertDial = nullptr; + + // Grab the forceLoginV2-setting from the wizard + bool useFlow2 = _ocWizard->useFlow2(); }; } // namespace OCC diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index faac2f5ad8934..a70421a762ebc 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -65,7 +65,8 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) setPage(WizardCommon::Page_Flow2AuthCreds, _flow2CredsPage); setPage(WizardCommon::Page_AdvancedSetup, _advancedSetupPage); #ifdef WITH_WEBENGINE - setPage(WizardCommon::Page_WebView, _webViewPage); + if(!useFlow2()) + setPage(WizardCommon::Page_WebView, _webViewPage); #endif // WITH_WEBENGINE connect(this, &QDialog::finished, this, &OwncloudWizard::basicSetupFinished); @@ -78,7 +79,8 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) connect(_httpCredsPage, &OwncloudHttpCredsPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); connect(_flow2CredsPage, &Flow2AuthCredsPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); #ifdef WITH_WEBENGINE - connect(_webViewPage, &WebViewPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); + if(!useFlow2()) + connect(_webViewPage, &WebViewPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); #endif // WITH_WEBENGINE connect(_advancedSetupPage, &OwncloudAdvancedSetupPage::createLocalAndRemoteFolders, this, &OwncloudWizard::createLocalAndRemoteFolders); @@ -235,7 +237,8 @@ void OwncloudWizard::successfulStep() #ifdef WITH_WEBENGINE case WizardCommon::Page_WebView: - _webViewPage->setConnected(); + if(!this->useFlow2()) + _webViewPage->setConnected(); break; #endif // WITH_WEBENGINE @@ -276,7 +279,11 @@ void OwncloudWizard::setAuthType(DetermineAuthTypeJob::AuthType type) _credentialsPage = _flow2CredsPage; #ifdef WITH_WEBENGINE } else if (type == DetermineAuthTypeJob::WebViewFlow) { - _credentialsPage = _webViewPage; + if(this->useFlow2()) { + _credentialsPage = _flow2CredsPage; + } else { + _credentialsPage = _webViewPage; + } #endif // WITH_WEBENGINE } else { // try Basic auth even for "Unknown" _credentialsPage = _httpCredsPage; diff --git a/src/gui/wizard/owncloudwizard.h b/src/gui/wizard/owncloudwizard.h index 58d3e915d9d1b..7b006c7272c25 100644 --- a/src/gui/wizard/owncloudwizard.h +++ b/src/gui/wizard/owncloudwizard.h @@ -21,6 +21,7 @@ #include #include +#include "libsync/configfile.h" #include "networkjobs.h" #include "wizard/owncloudwizardcommon.h" #include "accountfwd.h" @@ -87,6 +88,7 @@ class OwncloudWizard : public QWizard QSslKey _clientSslKey; // key extracted from pkcs12 QSslCertificate _clientSslCertificate; // cert extracted from pkcs12 QList _clientSslCaCertificates; + bool useFlow2() { return _useFlow2; }; public slots: void setAuthType(OCC::DetermineAuthTypeJob::AuthType type); @@ -131,6 +133,8 @@ public slots: bool _registration = false; + bool _useFlow2 = ConfigFile().forceLoginV2(); + friend class OwncloudSetupWizard; }; diff --git a/src/libsync/configfile.cpp b/src/libsync/configfile.cpp index 60cb2cc71aeba..39949683f8bce 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -104,6 +104,8 @@ static constexpr char stopSyncingExistingFoldersOverLimitC[] = "stopSyncingExist static constexpr char confirmExternalStorageC[] = "confirmExternalStorage"; static constexpr char moveToTrashC[] = "moveToTrash"; +static constexpr char forceLoginV2C[] = "forceLoginV2"; + static constexpr char certPath[] = "http_certificatePath"; static constexpr char certPasswd[] = "http_certificatePasswd"; @@ -991,6 +993,13 @@ void ConfigFile::setMoveToTrash(bool isChecked) setValue(moveToTrashC, isChecked); } +bool ConfigFile::forceLoginV2() const { + return getValue(forceLoginV2C, QString(), false).toBool(); +} +void ConfigFile::setForceLoginV2(bool isChecked) { + setValue(forceLoginV2C, isChecked); +} + bool ConfigFile::showMainDialogAsNormalWindow() const { return getValue(showMainDialogAsNormalWindowC, {}, false).toBool(); } diff --git a/src/libsync/configfile.h b/src/libsync/configfile.h index 21e58412afcc5..0ca15b807c73c 100644 --- a/src/libsync/configfile.h +++ b/src/libsync/configfile.h @@ -153,6 +153,10 @@ class OWNCLOUDSYNC_EXPORT ConfigFile [[nodiscard]] bool moveToTrash() const; void setMoveToTrash(bool); + /** If we should force loginflow v2 */ + [[nodiscard]] bool forceLoginV2() const; + void setForceLoginV2(bool); + [[nodiscard]] bool showMainDialogAsNormalWindow() const; static bool setConfDir(const QString &value); diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp index 3c784675feb61..48f10eb363be3 100644 --- a/src/libsync/networkjobs.cpp +++ b/src/libsync/networkjobs.cpp @@ -44,6 +44,7 @@ #include "creds/abstractcredentials.h" #include "creds/httpcredentials.h" +#include "configfile.h" namespace OCC { @@ -1011,7 +1012,9 @@ bool JsonApiJob::finished() DetermineAuthTypeJob::DetermineAuthTypeJob(AccountPtr account, QObject *parent) : QObject(parent) , _account(account) + { + useFlow2 = ConfigFile().forceLoginV2(); } void DetermineAuthTypeJob::start() @@ -1077,7 +1080,11 @@ void DetermineAuthTypeJob::start() if (flow != QJsonValue::Undefined) { if (flow.toInt() == 1) { #ifdef WITH_WEBENGINE - _resultOldFlow = WebViewFlow; + if(!this->useFlow2) { + _resultOldFlow = WebViewFlow; + } else { + qCWarning(lcDetermineAuthTypeJob) << "Server only supports flow1, but this client was configured to only use flow2"; + } #else // WITH_WEBENGINE qCWarning(lcDetermineAuthTypeJob) << "Server does only support flow1, but this client was compiled without support for flow1"; #endif // WITH_WEBENGINE @@ -1111,6 +1118,8 @@ void DetermineAuthTypeJob::checkAllDone() // WebViewFlow > Basic if (_account->serverVersionInt() >= Account::makeServerVersion(12, 0, 0)) { result = WebViewFlow; + if(useFlow2) + result = LoginFlowV2; } #endif // WITH_WEBENGINE @@ -1123,6 +1132,8 @@ void DetermineAuthTypeJob::checkAllDone() // If we determined that we need the webview flow (GS for example) then we switch to that if (_resultOldFlow == WebViewFlow) { result = WebViewFlow; + if(useFlow2) + result = LoginFlowV2; } #endif // WITH_WEBENGINE diff --git a/src/libsync/networkjobs.h b/src/libsync/networkjobs.h index 4fc397a7a4129..5670d0769590b 100644 --- a/src/libsync/networkjobs.h +++ b/src/libsync/networkjobs.h @@ -542,6 +542,7 @@ class OWNCLOUDSYNC_EXPORT DetermineAuthTypeJob : public QObject bool _getDone = false; bool _propfindDone = false; bool _oldFlowDone = false; + bool useFlow2 = false; }; /**