Merge pull request #6261 from SUNET/master

GUI/LIBSYNC: force login flow V2 with config setting
This commit is contained in:
Matthieu Gallien 2024-01-19 11:37:33 +01:00 committed by GitHub
commit 97ac36e614
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 61 additions and 5 deletions

View file

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

View file

@ -213,6 +213,9 @@ 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:

View file

@ -89,6 +89,9 @@ private:
QProgressIndicator *_progressIndi;
OwncloudWizard *_ocWizard;
AddCertificateDialog *addCertDial = nullptr;
// Grab the forceLoginV2-setting from the wizard
bool useFlow2 = _ocWizard->useFlow2();
};
} // namespace OCC

View file

@ -65,7 +65,9 @@ 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 +80,9 @@ 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);
@ -189,6 +193,11 @@ QStringList OwncloudWizard::selectiveSyncBlacklist() const
return _advancedSetupPage->selectiveSyncBlacklist();
}
bool OwncloudWizard::useFlow2() const
{
return _useFlow2;
}
bool OwncloudWizard::useVirtualFileSync() const
{
return _advancedSetupPage->useVirtualFileSync();
@ -235,7 +244,9 @@ void OwncloudWizard::successfulStep()
#ifdef WITH_WEBENGINE
case WizardCommon::Page_WebView:
_webViewPage->setConnected();
if (!this->useFlow2()) {
_webViewPage->setConnected();
}
break;
#endif // WITH_WEBENGINE
@ -276,7 +287,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;

View file

@ -21,6 +21,7 @@
#include <QSslKey>
#include <QSslCertificate>
#include "libsync/configfile.h"
#include "networkjobs.h"
#include "wizard/owncloudwizardcommon.h"
#include "accountfwd.h"
@ -64,6 +65,7 @@ public:
[[nodiscard]] QString ocUrl() const;
[[nodiscard]] QString localFolder() const;
[[nodiscard]] QStringList selectiveSyncBlacklist() const;
[[nodiscard]] bool useFlow2() const;
[[nodiscard]] bool useVirtualFileSync() const;
[[nodiscard]] bool isConfirmBigFolderChecked() const;
@ -131,6 +133,8 @@ private:
bool _registration = false;
bool _useFlow2 = ConfigFile().forceLoginV2();
friend class OwncloudSetupWizard;
};

View file

@ -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,16 @@ 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();
}

View file

@ -153,6 +153,10 @@ public:
[[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);

View file

@ -44,6 +44,7 @@
#include "creds/abstractcredentials.h"
#include "creds/httpcredentials.h"
#include "configfile.h"
namespace OCC {
@ -1012,6 +1013,7 @@ DetermineAuthTypeJob::DetermineAuthTypeJob(AccountPtr account, QObject *parent)
: QObject(parent)
, _account(account)
{
useFlow2 = ConfigFile().forceLoginV2();
}
void DetermineAuthTypeJob::start()
@ -1077,7 +1079,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 +1117,9 @@ 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,9 @@ 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

View file

@ -549,6 +549,7 @@ private:
bool _getDone = false;
bool _propfindDone = false;
bool _oldFlowDone = false;
bool useFlow2 = false;
};
/**