mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-27 17:37:36 +03:00
parent
3314a472c3
commit
04b6794318
5 changed files with 144 additions and 34 deletions
|
@ -35,6 +35,7 @@ set(client_UI
|
|||
wizard/owncloudadvancedsetuppage.ui
|
||||
wizard/owncloudconnectionmethoddialog.ui
|
||||
wizard/owncloudhttpcredspage.ui
|
||||
wizard/owncloudoauthcredspage.ui
|
||||
wizard/owncloudsetupnocredspage.ui
|
||||
wizard/owncloudwizardresultpage.ui
|
||||
)
|
||||
|
|
|
@ -50,6 +50,7 @@ public:
|
|||
enum Result { NotSupported,
|
||||
LoggedIn,
|
||||
Error };
|
||||
Q_ENUM(Result);
|
||||
void start();
|
||||
bool openBrowser();
|
||||
|
||||
|
|
|
@ -27,43 +27,62 @@ namespace OCC {
|
|||
|
||||
OwncloudOAuthCredsPage::OwncloudOAuthCredsPage()
|
||||
: AbstractCredentialsWizardPage()
|
||||
, _afterInitialSetup(false)
|
||||
|
||||
{
|
||||
_ui.setupUi(this);
|
||||
|
||||
Theme *theme = Theme::instance();
|
||||
_ui.topLabel->hide();
|
||||
_ui.bottomLabel->hide();
|
||||
QVariant variant = theme->customMedia(Theme::oCSetupTop);
|
||||
WizardCommon::setupCustomMedia(variant, _ui.topLabel);
|
||||
variant = theme->customMedia(Theme::oCSetupBottom);
|
||||
WizardCommon::setupCustomMedia(variant, _ui.bottomLabel);
|
||||
|
||||
WizardCommon::initErrorLabel(_ui.errorLabel);
|
||||
|
||||
setTitle(WizardCommon::titleTemplate().arg(tr("Connect to %1").arg(Theme::instance()->appNameGUI())));
|
||||
setSubTitle(WizardCommon::subTitleTemplate().arg(tr("Login in your browser")));
|
||||
|
||||
connect(_ui.openLinkButton, &QCommandLinkButton::clicked, [this] {
|
||||
_ui.errorLabel->hide();
|
||||
if (_asyncAuth)
|
||||
_asyncAuth->openBrowser();
|
||||
});
|
||||
}
|
||||
|
||||
void OwncloudOAuthCredsPage::setVisible(bool visible)
|
||||
void OwncloudOAuthCredsPage::initializePage()
|
||||
{
|
||||
if (!_afterInitialSetup) {
|
||||
QWizardPage::setVisible(visible);
|
||||
return;
|
||||
}
|
||||
OwncloudWizard *ocWizard = qobject_cast<OwncloudWizard *>(wizard());
|
||||
Q_ASSERT(ocWizard);
|
||||
ocWizard->account()->setCredentials(CredentialsFactory::create("http"));
|
||||
_asyncAuth.reset(new OAuth(ocWizard->account().data(), this));
|
||||
connect(_asyncAuth.data(), &OAuth::result, this, &OwncloudOAuthCredsPage::asyncAuthResult, Qt::QueuedConnection);
|
||||
_asyncAuth->start();
|
||||
wizard()->hide();
|
||||
}
|
||||
|
||||
if (isVisible() == visible) {
|
||||
return;
|
||||
}
|
||||
if (visible) {
|
||||
OwncloudWizard *ocWizard = qobject_cast<OwncloudWizard *>(wizard());
|
||||
Q_ASSERT(ocWizard);
|
||||
ocWizard->account()->setCredentials(CredentialsFactory::create("http"));
|
||||
_asyncAuth.reset(new OAuth(ocWizard->account().data(), this));
|
||||
connect(_asyncAuth.data(), SIGNAL(result(OAuth::Result, QString, QString, QString)),
|
||||
this, SLOT(asyncAuthResult(OAuth::Result, QString, QString, QString)));
|
||||
_asyncAuth->start();
|
||||
wizard()->hide();
|
||||
} else {
|
||||
// The next or back button was activated, show the wizard again
|
||||
wizard()->show();
|
||||
}
|
||||
void OCC::OwncloudOAuthCredsPage::cleanupPage()
|
||||
{
|
||||
// The next or back button was activated, show the wizard again
|
||||
wizard()->show();
|
||||
_asyncAuth.reset();
|
||||
}
|
||||
|
||||
void OwncloudOAuthCredsPage::asyncAuthResult(OAuth::Result r, const QString &user,
|
||||
const QString &token, const QString &refreshToken)
|
||||
{
|
||||
switch (r) {
|
||||
case OAuth::NotSupported:
|
||||
case OAuth::NotSupported: {
|
||||
/* OAuth not supported (can't open browser), fallback to HTTP credentials */
|
||||
OwncloudWizard *ocWizard = qobject_cast<OwncloudWizard *>(wizard());
|
||||
ocWizard->back();
|
||||
ocWizard->setAuthType(WizardCommon::HttpCreds);
|
||||
break;
|
||||
}
|
||||
case OAuth::Error:
|
||||
qWarning() << "FIXME!!!";
|
||||
/* Error while getting the access token. (Timeout, or the server did not accept our client credentials */
|
||||
_ui.errorLabel->show();
|
||||
wizard()->show();
|
||||
break;
|
||||
case OAuth::LoggedIn: {
|
||||
_token = token;
|
||||
|
@ -77,11 +96,6 @@ void OwncloudOAuthCredsPage::asyncAuthResult(OAuth::Result r, const QString &use
|
|||
}
|
||||
}
|
||||
|
||||
void OwncloudOAuthCredsPage::initializePage()
|
||||
{
|
||||
_afterInitialSetup = true;
|
||||
}
|
||||
|
||||
int OwncloudOAuthCredsPage::nextId() const
|
||||
{
|
||||
return WizardCommon::Page_AdvancedSetup;
|
||||
|
@ -100,4 +114,9 @@ AbstractCredentials *OwncloudOAuthCredsPage::getCredentials() const
|
|||
ocWizard->_clientSslCertificate, ocWizard->_clientSslKey);
|
||||
}
|
||||
|
||||
bool OwncloudOAuthCredsPage::isComplete() const
|
||||
{
|
||||
return false; /* We can never go forward manually */
|
||||
}
|
||||
|
||||
} // namespace OCC
|
||||
|
|
|
@ -24,6 +24,9 @@
|
|||
#include "accountfwd.h"
|
||||
#include "creds/oauth.h"
|
||||
|
||||
#include "ui_owncloudoauthcredspage.h"
|
||||
|
||||
|
||||
namespace OCC {
|
||||
|
||||
|
||||
|
@ -36,25 +39,24 @@ public:
|
|||
AbstractCredentials *getCredentials() const Q_DECL_OVERRIDE;
|
||||
|
||||
void initializePage() Q_DECL_OVERRIDE;
|
||||
void cleanupPage() override;
|
||||
int nextId() const Q_DECL_OVERRIDE;
|
||||
void setConnected();
|
||||
bool isComplete() const override;
|
||||
|
||||
public Q_SLOTS:
|
||||
void setVisible(bool visible) Q_DECL_OVERRIDE;
|
||||
void asyncAuthResult(OAuth::Result, const QString &user, const QString &token,
|
||||
const QString &reniewToken);
|
||||
|
||||
signals:
|
||||
void connectToOCUrl(const QString &);
|
||||
|
||||
private:
|
||||
bool _afterInitialSetup;
|
||||
|
||||
public:
|
||||
QString _user;
|
||||
QString _token;
|
||||
QString _refreshToken;
|
||||
QScopedPointer<OAuth> _asyncAuth;
|
||||
Ui_OwncloudOAuthCredsPage _ui;
|
||||
};
|
||||
|
||||
} // namespace OCC
|
||||
|
|
87
src/gui/wizard/owncloudoauthcredspage.ui
Normal file
87
src/gui/wizard/owncloudoauthcredspage.ui
Normal file
|
@ -0,0 +1,87 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>OwncloudOAuthCredsPage</class>
|
||||
<widget class="QWidget" name="OwncloudOAuthCredsPage">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>424</width>
|
||||
<height>373</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="topLabel">
|
||||
<property name="text">
|
||||
<string notr="true">TextLabel</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::RichText</enum>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Please switch to your browser to proceed.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="errorLabel">
|
||||
<property name="text">
|
||||
<string>An error occured while connecting. Please try again.</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCommandLinkButton" name="openLinkButton">
|
||||
<property name="text">
|
||||
<string>Re-open Browser</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>127</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="bottomLabel">
|
||||
<property name="text">
|
||||
<string notr="true">TextLabel</string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::RichText</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
Reference in a new issue