Fix login with SSO and Password supported

This commit is contained in:
Nicolas Werner 2021-02-19 15:48:43 +01:00
parent 99efe2f06b
commit ebd12a6f33
2 changed files with 35 additions and 23 deletions

View File

@ -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("");

View File

@ -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;
};