Add support for okta saml login

This commit is contained in:
Kevin Yue 2020-02-23 14:24:01 +08:00
parent cc59f031b0
commit bdad3ffe4d
4 changed files with 13 additions and 13 deletions

View File

@ -80,13 +80,13 @@ void GPClient::preloginResultFinished()
return;
}
QByteArray bytes = reply->readAll();
QByteArray xmlBytes = reply->readAll();
const QString tagMethod = "saml-auth-method";
const QString tagRequest = "saml-request";
QString samlMethod;
QString samlRequest;
QXmlStreamReader xml(bytes);
QXmlStreamReader xml(xmlBytes);
while (!xml.atEnd()) {
xml.readNext();
if (xml.tokenType() == xml.StartElement) {
@ -105,11 +105,7 @@ void GPClient::preloginResultFinished()
}
if (samlMethod == "POST") {
// TODO
emit connectFailed();
QMessageBox msgBox;
msgBox.setText("TODO: SAML method is POST");
msgBox.exec();
samlLogin(reply->url().toString(), samlRequest);
} else if (samlMethod == "REDIRECT") {
samlLogin(samlRequest);
}
@ -214,14 +210,14 @@ void GPClient::doAuth(const QString portal)
connect(reply, &QNetworkReply::finished, this, &GPClient::preloginResultFinished);
}
void GPClient::samlLogin(const QString loginUrl)
void GPClient::samlLogin(const QString loginUrl, const QString html)
{
SAMLLoginWindow *loginWindow = new SAMLLoginWindow(this);
QObject::connect(loginWindow, &SAMLLoginWindow::success, this, &GPClient::onLoginSuccess);
QObject::connect(loginWindow, &SAMLLoginWindow::rejected, this, &GPClient::connectFailed);
loginWindow->login(loginUrl);
loginWindow->login(loginUrl, html);
loginWindow->exec();
delete loginWindow;
}

View File

@ -42,6 +42,6 @@ private:
void moveCenter();
void updateConnectionStatus(QString status);
void doAuth(const QString portal);
void samlLogin(const QString loginUrl);
void samlLogin(const QString loginUrl, const QString html = "");
};
#endif // GPCLIENT_H

View File

@ -27,9 +27,13 @@ void SAMLLoginWindow::closeEvent(QCloseEvent *event)
reject();
}
void SAMLLoginWindow::login(QString url)
void SAMLLoginWindow::login(QString url, QString html)
{
webView->load(QUrl(url));
if (html == "") {
webView->load(QUrl(url));
} else {
webView->setHtml(html, url);
}
}
void SAMLLoginWindow::onResponseReceived(QJsonObject params)

View File

@ -15,7 +15,7 @@ public:
explicit SAMLLoginWindow(QWidget *parent = nullptr);
~SAMLLoginWindow();
void login(QString url);
void login(QString url, QString html = "");
signals:
void success(QJsonObject samlResult);