Merge pull request #1523 from Nheko-Reborn/qmlFallbackAuth
QML the fallback auth dialog
This commit is contained in:
commit
ff079f6b6a
9 changed files with 149 additions and 124 deletions
29
src/FallbackAuth.cpp
Normal file
29
src/FallbackAuth.cpp
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
// SPDX-FileCopyrightText: Nheko Contributors
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#include "FallbackAuth.h"
|
||||
|
||||
#include <QDesktopServices>
|
||||
#include <QUrl>
|
||||
|
||||
#include "MatrixClient.h"
|
||||
|
||||
FallbackAuth::FallbackAuth(const QString &session, const QString &authType, QObject *parent)
|
||||
: QObject{parent}
|
||||
, m_session{session}
|
||||
, m_authType{authType}
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
FallbackAuth::openFallbackAuth()
|
||||
{
|
||||
const auto url = QString("https://%1:%2/_matrix/client/r0/auth/%4/"
|
||||
"fallback/web?session=%3")
|
||||
.arg(QString::fromStdString(http::client()->server()))
|
||||
.arg(http::client()->port())
|
||||
.arg(m_session, m_authType);
|
||||
|
||||
QDesktopServices::openUrl(url);
|
||||
}
|
||||
32
src/FallbackAuth.h
Normal file
32
src/FallbackAuth.h
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
// SPDX-FileCopyrightText: Nheko Contributors
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QQmlEngine>
|
||||
|
||||
class FallbackAuth : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
QML_ELEMENT
|
||||
QML_UNCREATABLE("")
|
||||
|
||||
Q_PROPERTY(QString authType MEMBER m_authType CONSTANT)
|
||||
Q_PROPERTY(QString session MEMBER m_session CONSTANT)
|
||||
|
||||
public:
|
||||
FallbackAuth(const QString &session, const QString &authType, QObject *parent = nullptr);
|
||||
|
||||
Q_INVOKABLE void openFallbackAuth();
|
||||
Q_INVOKABLE void confirm() { emit confirmation(); }
|
||||
Q_INVOKABLE void cancel() { emit cancelled(); }
|
||||
|
||||
signals:
|
||||
void confirmation();
|
||||
void cancelled();
|
||||
|
||||
private:
|
||||
const QString m_session;
|
||||
const QString m_authType;
|
||||
};
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
// SPDX-FileCopyrightText: Nheko Contributors
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#include <QDesktopServices>
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#include <QUrl>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
#include "dialogs/FallbackAuth.h"
|
||||
|
||||
#include "Config.h"
|
||||
#include "MatrixClient.h"
|
||||
|
||||
using namespace dialogs;
|
||||
|
||||
FallbackAuth::FallbackAuth(const QString &authType, const QString &session, QWidget *parent)
|
||||
: QWidget(parent)
|
||||
{
|
||||
setAutoFillBackground(true);
|
||||
setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint);
|
||||
setWindowModality(Qt::WindowModal);
|
||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
|
||||
auto layout = new QVBoxLayout(this);
|
||||
layout->setSpacing(conf::modals::WIDGET_SPACING);
|
||||
layout->setContentsMargins(conf::modals::WIDGET_MARGIN,
|
||||
conf::modals::WIDGET_MARGIN,
|
||||
conf::modals::WIDGET_MARGIN,
|
||||
conf::modals::WIDGET_MARGIN);
|
||||
|
||||
auto buttonLayout = new QHBoxLayout();
|
||||
buttonLayout->setSpacing(8);
|
||||
buttonLayout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
openBtn_ = new QPushButton(tr("Open Fallback in Browser"), this);
|
||||
cancelBtn_ = new QPushButton(tr("Cancel"), this);
|
||||
confirmBtn_ = new QPushButton(tr("Confirm"), this);
|
||||
confirmBtn_->setDefault(true);
|
||||
|
||||
buttonLayout->addStretch(1);
|
||||
buttonLayout->addWidget(openBtn_);
|
||||
buttonLayout->addWidget(cancelBtn_);
|
||||
buttonLayout->addWidget(confirmBtn_);
|
||||
|
||||
QFont font;
|
||||
font.setPointSizeF(font.pointSizeF() * conf::modals::LABEL_MEDIUM_SIZE_RATIO);
|
||||
|
||||
auto label = new QLabel(
|
||||
tr("Open the fallback, follow the steps, and confirm after completing them."), this);
|
||||
label->setFont(font);
|
||||
|
||||
layout->addWidget(label);
|
||||
layout->addLayout(buttonLayout);
|
||||
|
||||
connect(openBtn_, &QPushButton::clicked, [session, authType]() {
|
||||
const auto url = QString("https://%1:%2/_matrix/client/r0/auth/%4/"
|
||||
"fallback/web?session=%3")
|
||||
.arg(QString::fromStdString(http::client()->server()))
|
||||
.arg(http::client()->port())
|
||||
.arg(session, authType);
|
||||
|
||||
QDesktopServices::openUrl(url);
|
||||
});
|
||||
|
||||
connect(confirmBtn_, &QPushButton::clicked, this, [this]() {
|
||||
emit confirmation();
|
||||
emit close();
|
||||
});
|
||||
connect(cancelBtn_, &QPushButton::clicked, this, [this]() {
|
||||
emit cancel();
|
||||
emit close();
|
||||
});
|
||||
}
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
// SPDX-FileCopyrightText: Nheko Contributors
|
||||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
class QPushButton;
|
||||
class QLabel;
|
||||
|
||||
namespace dialogs {
|
||||
|
||||
class FallbackAuth final : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
FallbackAuth(const QString &authType, const QString &session, QWidget *parent = nullptr);
|
||||
|
||||
signals:
|
||||
void confirmation();
|
||||
void cancel();
|
||||
|
||||
private:
|
||||
QPushButton *openBtn_;
|
||||
QPushButton *confirmBtn_;
|
||||
QPushButton *cancelBtn_;
|
||||
};
|
||||
} // dialogs
|
||||
|
|
@ -13,8 +13,6 @@
|
|||
|
||||
#include "Logging.h"
|
||||
#include "MatrixClient.h"
|
||||
#include "ReCaptcha.h"
|
||||
#include "dialogs/FallbackAuth.h"
|
||||
|
||||
UIA *
|
||||
UIA::instance()
|
||||
|
|
@ -132,23 +130,18 @@ UIA::genericHandler(QString context)
|
|||
}
|
||||
} else {
|
||||
// use fallback
|
||||
auto dialog = new dialogs::FallbackAuth(QString::fromStdString(current_stage),
|
||||
QString::fromStdString(u.session),
|
||||
nullptr);
|
||||
dialog->setWindowTitle(context);
|
||||
|
||||
connect(dialog, &dialogs::FallbackAuth::confirmation, this, [h, u, dialog]() {
|
||||
dialog->close();
|
||||
dialog->deleteLater();
|
||||
auto fallback = new FallbackAuth(QString::fromStdString(u.session),
|
||||
QString::fromStdString(current_stage),
|
||||
nullptr);
|
||||
QQmlEngine::setObjectOwnership(fallback, QQmlEngine::JavaScriptOwnership);
|
||||
connect(fallback, &FallbackAuth::confirmation, this, [h, u]() {
|
||||
h.next(mtx::user_interactive::Auth{u.session,
|
||||
mtx::user_interactive::auth::Fallback{}});
|
||||
});
|
||||
|
||||
connect(dialog, &dialogs::FallbackAuth::cancel, this, [this]() {
|
||||
connect(fallback, &FallbackAuth::cancelled, this, [this]() {
|
||||
emit error(tr("Registration aborted"));
|
||||
});
|
||||
|
||||
dialog->show();
|
||||
emit fallbackAuth(fallback);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
#include <mtxclient/http/client.hpp>
|
||||
|
||||
#include "FallbackAuth.h"
|
||||
#include "ReCaptcha.h"
|
||||
|
||||
class UIA final : public QObject
|
||||
|
|
@ -62,6 +63,7 @@ signals:
|
|||
void email();
|
||||
void phoneNumber();
|
||||
void reCaptcha(ReCaptcha *recaptcha);
|
||||
void fallbackAuth(FallbackAuth *fallback);
|
||||
|
||||
void confirm3pidToken();
|
||||
void prompt3pidToken();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue