Compare commits

..

3 Commits

Author SHA1 Message Date
Kevin Yue
bdad3ffe4d Add support for okta saml login 2020-02-23 14:24:01 +08:00
Kevin Yue
cc59f031b0 Update README.md 2020-02-21 23:16:26 +08:00
Kevin Yue
d31598eac3 Update bin path 2020-02-21 22:31:51 +08:00
8 changed files with 23 additions and 17 deletions

View File

@@ -4,7 +4,7 @@ Type=Application
Version=1.0.0
Name=GlobalProtect VPN
Comment=GlobalProtect VPN client, supports SAML auth mode
Exec=/usr/local/bin/gpclient
Exec=/usr/bin/gpclient
Icon=com.yuezk.qt.GPClient
Categories=Network;VPN;Utility;Qt;
Keywords=GlobalProtect;Openconnect;SAML;connection;VPN;

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);

View File

@@ -1,5 +1,5 @@
[D-BUS Service]
Name=com.yuezk.qt.GPService
Exec=/usr/local/bin/gpservice
Exec=/usr/bin/gpservice
User=root
SystemdService=gpservice.service

View File

@@ -4,7 +4,7 @@ Description=GlobalProtect openconnect DBus service
[Service]
Type=dbus
BusName=com.yuezk.qt.GPService
ExecStart=/usr/local/bin/gpservice
ExecStart=/usr/bin/gpservice
[Install]
WantedBy=multi-user.target

View File

@@ -19,10 +19,16 @@ A GlobalProtect VPN client (GUI) for Linux based on Openconnect and built with Q
```
## Install
### Install from AUR (Arch/Manjaro)
Install [globalprotect-openconnect](https://aur.archlinux.org/packages/globalprotect-openconnect/).
### Build from source code
```sh
git clone https://github.com/yuezk/GlobalProtect-openconnect.git
cd GlobalProtect-openconnect
git submodule init && git submodule update
git submodule update --init
qmake CONFIG+=release
make
sudo make install