mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-22 19:08:58 +03:00
Fix login with SSO and Password supported
This commit is contained in:
parent
99efe2f06b
commit
ebd12a6f33
2 changed files with 35 additions and 23 deletions
|
@ -147,16 +147,23 @@ LoginPage::LoginPage(QWidget *parent)
|
||||||
error_matrixid_label_->hide();
|
error_matrixid_label_->hide();
|
||||||
|
|
||||||
button_layout_ = new QHBoxLayout();
|
button_layout_ = new QHBoxLayout();
|
||||||
button_layout_->setSpacing(0);
|
button_layout_->setSpacing(20);
|
||||||
button_layout_->setContentsMargins(0, 0, 0, 30);
|
button_layout_->setContentsMargins(0, 0, 0, 30);
|
||||||
|
|
||||||
login_button_ = new RaisedButton(tr("LOGIN"), this);
|
login_button_ = new RaisedButton(tr("LOGIN"), this);
|
||||||
login_button_->setMinimumSize(350, 65);
|
login_button_->setMinimumSize(150, 65);
|
||||||
login_button_->setFontSize(20);
|
login_button_->setFontSize(20);
|
||||||
login_button_->setCornerRadius(3);
|
login_button_->setCornerRadius(3);
|
||||||
|
|
||||||
|
sso_login_button_ = new RaisedButton(tr("SSO LOGIN"), this);
|
||||||
|
sso_login_button_->setMinimumSize(150, 65);
|
||||||
|
sso_login_button_->setFontSize(20);
|
||||||
|
sso_login_button_->setCornerRadius(3);
|
||||||
|
sso_login_button_->setVisible(false);
|
||||||
|
|
||||||
button_layout_->addStretch(1);
|
button_layout_->addStretch(1);
|
||||||
button_layout_->addWidget(login_button_);
|
button_layout_->addWidget(login_button_);
|
||||||
|
button_layout_->addWidget(sso_login_button_);
|
||||||
button_layout_->addStretch(1);
|
button_layout_->addStretch(1);
|
||||||
|
|
||||||
error_label_ = new QLabel(this);
|
error_label_ = new QLabel(this);
|
||||||
|
@ -179,7 +186,12 @@ LoginPage::LoginPage(QWidget *parent)
|
||||||
this, &LoginPage::versionErrorCb, this, &LoginPage::versionError, Qt::QueuedConnection);
|
this, &LoginPage::versionErrorCb, this, &LoginPage::versionError, Qt::QueuedConnection);
|
||||||
|
|
||||||
connect(back_button_, SIGNAL(clicked()), this, SLOT(onBackButtonClicked()));
|
connect(back_button_, SIGNAL(clicked()), this, SLOT(onBackButtonClicked()));
|
||||||
connect(login_button_, SIGNAL(clicked()), this, SLOT(onLoginButtonClicked()));
|
connect(login_button_, &RaisedButton::clicked, this, [this]() {
|
||||||
|
onLoginButtonClicked(passwordSupported ? LoginMethod::Password : LoginMethod::SSO);
|
||||||
|
});
|
||||||
|
connect(sso_login_button_, &RaisedButton::clicked, this, [this]() {
|
||||||
|
onLoginButtonClicked(LoginMethod::SSO);
|
||||||
|
});
|
||||||
connect(matrixid_input_, SIGNAL(returnPressed()), login_button_, SLOT(click()));
|
connect(matrixid_input_, SIGNAL(returnPressed()), login_button_, SLOT(click()));
|
||||||
connect(password_input_, SIGNAL(returnPressed()), login_button_, SLOT(click()));
|
connect(password_input_, SIGNAL(returnPressed()), login_button_, SLOT(click()));
|
||||||
connect(deviceName_, SIGNAL(returnPressed()), login_button_, SLOT(click()));
|
connect(deviceName_, SIGNAL(returnPressed()), login_button_, SLOT(click()));
|
||||||
|
@ -314,16 +326,19 @@ LoginPage::checkHomeserverVersion()
|
||||||
http::client()->get_login(
|
http::client()->get_login(
|
||||||
[this](mtx::responses::LoginFlows flows, mtx::http::RequestErr err) {
|
[this](mtx::responses::LoginFlows flows, mtx::http::RequestErr err) {
|
||||||
if (err || flows.flows.empty())
|
if (err || flows.flows.empty())
|
||||||
emit versionOkCb(LoginMethod::Password);
|
emit versionOkCb(true, false);
|
||||||
|
|
||||||
LoginMethod loginMethod_ = LoginMethod::Password;
|
bool ssoSupported_ = false;
|
||||||
|
bool passwordSupported_ = false;
|
||||||
for (const auto &flow : flows.flows) {
|
for (const auto &flow : flows.flows) {
|
||||||
if (flow.type == mtx::user_interactive::auth_types::sso) {
|
if (flow.type == mtx::user_interactive::auth_types::sso) {
|
||||||
loginMethod_ = LoginMethod::SSO;
|
ssoSupported_ = true;
|
||||||
break;
|
} else if (flow.type ==
|
||||||
|
mtx::user_interactive::auth_types::password) {
|
||||||
|
passwordSupported_ = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
emit versionOkCb(loginMethod_);
|
emit versionOkCb(passwordSupported_, ssoSupported_);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -355,28 +370,24 @@ LoginPage::versionError(const QString &error)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
LoginPage::versionOk(LoginMethod loginMethod_)
|
LoginPage::versionOk(bool passwordSupported_, bool ssoSupported_)
|
||||||
{
|
{
|
||||||
this->loginMethod = loginMethod_;
|
passwordSupported = passwordSupported_;
|
||||||
|
ssoSupported = ssoSupported_;
|
||||||
|
|
||||||
serverLayout_->removeWidget(spinner_);
|
serverLayout_->removeWidget(spinner_);
|
||||||
matrixidLayout_->removeWidget(spinner_);
|
matrixidLayout_->removeWidget(spinner_);
|
||||||
spinner_->stop();
|
spinner_->stop();
|
||||||
|
|
||||||
if (loginMethod == LoginMethod::SSO) {
|
sso_login_button_->setVisible(ssoSupported);
|
||||||
password_input_->hide();
|
login_button_->setVisible(passwordSupported);
|
||||||
login_button_->setText(tr("SSO LOGIN"));
|
|
||||||
} else {
|
|
||||||
password_input_->show();
|
|
||||||
login_button_->setText(tr("LOGIN"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (serverInput_->isVisible())
|
if (serverInput_->isVisible())
|
||||||
serverInput_->hide();
|
serverInput_->hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
LoginPage::onLoginButtonClicked()
|
LoginPage::onLoginButtonClicked(LoginMethod loginMethod)
|
||||||
{
|
{
|
||||||
error_label_->setText("");
|
error_label_->setText("");
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ signals:
|
||||||
|
|
||||||
//! Used to trigger the corresponding slot outside of the main thread.
|
//! Used to trigger the corresponding slot outside of the main thread.
|
||||||
void versionErrorCb(const QString &err);
|
void versionErrorCb(const QString &err);
|
||||||
void versionOkCb(LoginPage::LoginMethod method);
|
void versionOkCb(bool passwordSupported, bool ssoSupported);
|
||||||
|
|
||||||
void loginOk(const mtx::responses::Login &res);
|
void loginOk(const mtx::responses::Login &res);
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ private slots:
|
||||||
void onBackButtonClicked();
|
void onBackButtonClicked();
|
||||||
|
|
||||||
// Callback for the login button.
|
// Callback for the login button.
|
||||||
void onLoginButtonClicked();
|
void onLoginButtonClicked(LoginMethod loginMethod);
|
||||||
|
|
||||||
// Callback for probing the server found in the mxid
|
// Callback for probing the server found in the mxid
|
||||||
void onMatrixIdEntered();
|
void onMatrixIdEntered();
|
||||||
|
@ -84,7 +84,7 @@ private slots:
|
||||||
// Callback for errors produced during server probing
|
// Callback for errors produced during server probing
|
||||||
void versionError(const QString &error_message);
|
void versionError(const QString &error_message);
|
||||||
// Callback for successful server probing
|
// Callback for successful server probing
|
||||||
void versionOk(LoginPage::LoginMethod method);
|
void versionOk(bool passwordSupported, bool ssoSupported);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void checkHomeserverVersion();
|
void checkHomeserverVersion();
|
||||||
|
@ -120,7 +120,7 @@ private:
|
||||||
QString inferredServerAddress_;
|
QString inferredServerAddress_;
|
||||||
|
|
||||||
FlatButton *back_button_;
|
FlatButton *back_button_;
|
||||||
RaisedButton *login_button_;
|
RaisedButton *login_button_, *sso_login_button_;
|
||||||
|
|
||||||
QWidget *form_widget_;
|
QWidget *form_widget_;
|
||||||
QHBoxLayout *form_wrapper_;
|
QHBoxLayout *form_wrapper_;
|
||||||
|
@ -130,5 +130,6 @@ private:
|
||||||
TextField *password_input_;
|
TextField *password_input_;
|
||||||
TextField *deviceName_;
|
TextField *deviceName_;
|
||||||
TextField *serverInput_;
|
TextField *serverInput_;
|
||||||
LoginMethod loginMethod = LoginMethod::Password;
|
bool passwordSupported = true;
|
||||||
|
bool ssoSupported = false;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue