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