mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-23 03:18:49 +03:00
Support token authenticated registration
Using a dialog after username and password have been provided.
This commit is contained in:
parent
89840b9e0b
commit
b56a1be0bd
4 changed files with 113 additions and 0 deletions
|
@ -286,6 +286,7 @@ set(SRC_FILES
|
||||||
src/dialogs/Logout.cpp
|
src/dialogs/Logout.cpp
|
||||||
src/dialogs/PreviewUploadOverlay.cpp
|
src/dialogs/PreviewUploadOverlay.cpp
|
||||||
src/dialogs/ReCaptcha.cpp
|
src/dialogs/ReCaptcha.cpp
|
||||||
|
src/dialogs/TokenRegistration.cpp
|
||||||
|
|
||||||
# Emoji
|
# Emoji
|
||||||
src/emoji/EmojiModel.cpp
|
src/emoji/EmojiModel.cpp
|
||||||
|
@ -497,6 +498,7 @@ qt5_wrap_cpp(MOC_HEADERS
|
||||||
src/dialogs/Logout.h
|
src/dialogs/Logout.h
|
||||||
src/dialogs/PreviewUploadOverlay.h
|
src/dialogs/PreviewUploadOverlay.h
|
||||||
src/dialogs/ReCaptcha.h
|
src/dialogs/ReCaptcha.h
|
||||||
|
src/dialogs/TokenRegistration.h
|
||||||
|
|
||||||
# Emoji
|
# Emoji
|
||||||
src/emoji/EmojiModel.h
|
src/emoji/EmojiModel.h
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#include "dialogs/FallbackAuth.h"
|
#include "dialogs/FallbackAuth.h"
|
||||||
#include "dialogs/ReCaptcha.h"
|
#include "dialogs/ReCaptcha.h"
|
||||||
|
#include "dialogs/TokenRegistration.h"
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(mtx::user_interactive::Unauthorized)
|
Q_DECLARE_METATYPE(mtx::user_interactive::Unauthorized)
|
||||||
Q_DECLARE_METATYPE(mtx::user_interactive::Auth)
|
Q_DECLARE_METATYPE(mtx::user_interactive::Auth)
|
||||||
|
@ -481,6 +482,23 @@ RegisterPage::doUIA(const mtx::user_interactive::Unauthorized &unauthorized)
|
||||||
doRegistrationWithAuth(
|
doRegistrationWithAuth(
|
||||||
mtx::user_interactive::Auth{session, mtx::user_interactive::auth::Dummy{}});
|
mtx::user_interactive::Auth{session, mtx::user_interactive::auth::Dummy{}});
|
||||||
|
|
||||||
|
} else if (current_stage == mtx::user_interactive::auth_types::registration_token) {
|
||||||
|
auto dialog = new dialogs::TokenRegistration(this);
|
||||||
|
|
||||||
|
connect(dialog,
|
||||||
|
&dialogs::TokenRegistration::confirmation,
|
||||||
|
this,
|
||||||
|
[this, session, dialog](std::string token) {
|
||||||
|
dialog->close();
|
||||||
|
dialog->deleteLater();
|
||||||
|
emit registrationWithAuth(mtx::user_interactive::Auth{
|
||||||
|
session, mtx::user_interactive::auth::RegistrationToken{token}});
|
||||||
|
});
|
||||||
|
|
||||||
|
connect(
|
||||||
|
dialog, &dialogs::TokenRegistration::cancel, this, &RegisterPage::errorOccurred);
|
||||||
|
|
||||||
|
dialog->show();
|
||||||
} else {
|
} else {
|
||||||
// use fallback
|
// use fallback
|
||||||
auto dialog = new dialogs::FallbackAuth(
|
auto dialog = new dialogs::FallbackAuth(
|
||||||
|
|
62
src/dialogs/TokenRegistration.cpp
Normal file
62
src/dialogs/TokenRegistration.cpp
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
// SPDX-FileCopyrightText: 2021 Nheko Contributors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QPushButton>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
|
#include "dialogs/TokenRegistration.h"
|
||||||
|
|
||||||
|
#include "Config.h"
|
||||||
|
#include "MatrixClient.h"
|
||||||
|
#include "ui/TextField.h"
|
||||||
|
|
||||||
|
using namespace dialogs;
|
||||||
|
|
||||||
|
TokenRegistration::TokenRegistration(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->setMargin(conf::modals::WIDGET_MARGIN);
|
||||||
|
|
||||||
|
auto buttonLayout = new QHBoxLayout();
|
||||||
|
buttonLayout->setSpacing(8);
|
||||||
|
buttonLayout->setMargin(0);
|
||||||
|
|
||||||
|
cancelBtn_ = new QPushButton(tr("Cancel"), this);
|
||||||
|
confirmBtn_ = new QPushButton(tr("Confirm"), this);
|
||||||
|
confirmBtn_->setDefault(true);
|
||||||
|
|
||||||
|
buttonLayout->addStretch(1);
|
||||||
|
buttonLayout->addWidget(cancelBtn_);
|
||||||
|
buttonLayout->addWidget(confirmBtn_);
|
||||||
|
|
||||||
|
tokenInput_ = new TextField(this);
|
||||||
|
tokenInput_->setLabel(tr("Registration token"));
|
||||||
|
|
||||||
|
QFont font;
|
||||||
|
font.setPointSizeF(font.pointSizeF() * conf::modals::LABEL_MEDIUM_SIZE_RATIO);
|
||||||
|
|
||||||
|
auto label = new QLabel(tr("Please enter a valid registration token."), this);
|
||||||
|
label->setFont(font);
|
||||||
|
|
||||||
|
layout->addWidget(label);
|
||||||
|
layout->addWidget(tokenInput_);
|
||||||
|
layout->addLayout(buttonLayout);
|
||||||
|
|
||||||
|
connect(confirmBtn_, &QPushButton::clicked, this, [this]() {
|
||||||
|
emit confirmation(tokenInput_->text().toStdString());
|
||||||
|
emit close();
|
||||||
|
});
|
||||||
|
connect(cancelBtn_, &QPushButton::clicked, this, [this]() {
|
||||||
|
emit cancel();
|
||||||
|
emit close();
|
||||||
|
});
|
||||||
|
}
|
31
src/dialogs/TokenRegistration.h
Normal file
31
src/dialogs/TokenRegistration.h
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
// SPDX-FileCopyrightText: 2021 Nheko Contributors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
class QPushButton;
|
||||||
|
class QLabel;
|
||||||
|
class TextField;
|
||||||
|
|
||||||
|
namespace dialogs {
|
||||||
|
|
||||||
|
class TokenRegistration : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
TokenRegistration(QWidget *parent = nullptr);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void confirmation(std::string token);
|
||||||
|
void cancel();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QPushButton *confirmBtn_;
|
||||||
|
QPushButton *cancelBtn_;
|
||||||
|
TextField *tokenInput_;
|
||||||
|
};
|
||||||
|
} // dialogs
|
Loading…
Reference in a new issue