mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-22 04:55:48 +03:00
GUI/LIBSYNC: force login flow V2 with config setting
This patch allows a user to set the config variable: forceLoginV2=true This will make the client use the browser login flow instead of the webview. This is useful for making the user experience equal on Windows, Linux and Mac. Currently only Macs use the v2 flow and it was only possible to get this behaviour in the Windows and Linux clients at build time using a CMAKE flag. The default behaviour is kept the same, and nothing changes for the user unless the flag is manually set in the config file. A setter is included in this patch, although it is not yet used in the GUI. Signed-off-by: Micke Nordin <kano@sunet.se>
This commit is contained in:
parent
c4f2537418
commit
772d44c66d
9 changed files with 48 additions and 5 deletions
|
@ -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. |
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -65,6 +65,7 @@ OwncloudWizard::OwncloudWizard(QWidget *parent)
|
|||
setPage(WizardCommon::Page_Flow2AuthCreds, _flow2CredsPage);
|
||||
setPage(WizardCommon::Page_AdvancedSetup, _advancedSetupPage);
|
||||
#ifdef WITH_WEBENGINE
|
||||
if(!useFlow2())
|
||||
setPage(WizardCommon::Page_WebView, _webViewPage);
|
||||
#endif // WITH_WEBENGINE
|
||||
|
||||
|
@ -78,6 +79,7 @@ OwncloudWizard::OwncloudWizard(QWidget *parent)
|
|||
connect(_httpCredsPage, &OwncloudHttpCredsPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl);
|
||||
connect(_flow2CredsPage, &Flow2AuthCredsPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl);
|
||||
#ifdef WITH_WEBENGINE
|
||||
if(!useFlow2())
|
||||
connect(_webViewPage, &WebViewPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl);
|
||||
#endif // WITH_WEBENGINE
|
||||
connect(_advancedSetupPage, &OwncloudAdvancedSetupPage::createLocalAndRemoteFolders,
|
||||
|
@ -235,6 +237,7 @@ void OwncloudWizard::successfulStep()
|
|||
|
||||
#ifdef WITH_WEBENGINE
|
||||
case WizardCommon::Page_WebView:
|
||||
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) {
|
||||
if(this->useFlow2()) {
|
||||
_credentialsPage = _flow2CredsPage;
|
||||
} else {
|
||||
_credentialsPage = _webViewPage;
|
||||
}
|
||||
#endif // WITH_WEBENGINE
|
||||
} else { // try Basic auth even for "Unknown"
|
||||
_credentialsPage = _httpCredsPage;
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <QSslKey>
|
||||
#include <QSslCertificate>
|
||||
|
||||
#include "libsync/configfile.h"
|
||||
#include "networkjobs.h"
|
||||
#include "wizard/owncloudwizardcommon.h"
|
||||
#include "accountfwd.h"
|
||||
|
@ -87,6 +88,7 @@ public:
|
|||
QSslKey _clientSslKey; // key extracted from pkcs12
|
||||
QSslCertificate _clientSslCertificate; // cert extracted from pkcs12
|
||||
QList<QSslCertificate> _clientSslCaCertificates;
|
||||
bool useFlow2() { return _useFlow2; };
|
||||
|
||||
public slots:
|
||||
void setAuthType(OCC::DetermineAuthTypeJob::AuthType type);
|
||||
|
@ -131,6 +133,8 @@ private:
|
|||
|
||||
bool _registration = false;
|
||||
|
||||
bool _useFlow2 = ConfigFile().forceLoginV2();
|
||||
|
||||
friend class OwncloudSetupWizard;
|
||||
};
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
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
|
||||
|
||||
|
|
|
@ -549,6 +549,7 @@ private:
|
|||
bool _getDone = false;
|
||||
bool _propfindDone = false;
|
||||
bool _oldFlowDone = false;
|
||||
bool useFlow2 = false;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue