Compare commits

..

2 Commits

Author SHA1 Message Date
Philip J. Turmel
58071d92fc Merge a869a3ac9c into 939f2bd94a 2023-11-06 09:31:38 +08:00
Philip J. Turmel
a869a3ac9c Add User Agent Override to SAML Authentication
Adds "samlUserAgent" key to settings dialog.  If left blank, prior
behavior is unchanged.

If provided, the WebView Profile is adjusted with ::setHttpUserAgent()
before opening the portal's SAML page.
2023-10-21 15:23:59 -04:00
7 changed files with 38 additions and 9 deletions

View File

@@ -62,6 +62,7 @@ void GPClient::onSettingsButtonClicked()
{ {
settingsDialog->setClientos(settings::get("clientos", "Linux").toString()); settingsDialog->setClientos(settings::get("clientos", "Linux").toString());
settingsDialog->setOsVersion(settings::get("os-version", QSysInfo::prettyProductName()).toString()); settingsDialog->setOsVersion(settings::get("os-version", QSysInfo::prettyProductName()).toString());
settingsDialog->setSamlUserAgent(settings::get("samlUserAgent", "").toString());
settingsDialog->show(); settingsDialog->show();
} }
@@ -69,6 +70,7 @@ void GPClient::onSettingsAccepted()
{ {
settings::save("clientos", settingsDialog->clientos()); settings::save("clientos", settingsDialog->clientos());
settings::save("os-version", settingsDialog->osVersion()); settings::save("os-version", settingsDialog->osVersion());
settings::save("samlUserAgent", settingsDialog->samlUserAgent());
} }
void GPClient::on_connectButton_clicked() void GPClient::on_connectButton_clicked()

View File

@@ -31,7 +31,7 @@ namespace gpclient {
namespace settings { namespace settings {
extern QSettings *_settings; extern QSettings *_settings;
static const QStringList reservedKeys {"extraArgs", "clientos"}; static const QStringList reservedKeys {"extraArgs", "clientos", "samlUserAgent"};
QVariant get(const QString &key, const QVariant &defaultValue = QVariant()); QVariant get(const QString &key, const QVariant &defaultValue = QVariant());
QStringList get_all(const QString &key, const QVariant &defaultValue = QVariant()); QStringList get_all(const QString &key, const QVariant &defaultValue = QVariant());

View File

@@ -4,8 +4,11 @@
#include <QWebEngineCookieStore> #include <QWebEngineCookieStore>
#include <plog/Log.h> #include <plog/Log.h>
#include "gphelper.h"
#include "samlloginwindow.h" #include "samlloginwindow.h"
using namespace gpclient::helper;
SAMLLoginWindow::SAMLLoginWindow(QWidget *parent) SAMLLoginWindow::SAMLLoginWindow(QWidget *parent)
: QDialog(parent) : QDialog(parent)
, webView(new EnhancedWebView(this)) , webView(new EnhancedWebView(this))
@@ -42,6 +45,9 @@ void SAMLLoginWindow::closeEvent(QCloseEvent *event)
void SAMLLoginWindow::login(const QString samlMethod, const QString samlRequest, const QString preloginUrl) void SAMLLoginWindow::login(const QString samlMethod, const QString samlRequest, const QString preloginUrl)
{ {
webView->page()->profile()->cookieStore()->deleteSessionCookies(); webView->page()->profile()->cookieStore()->deleteSessionCookies();
const QString& ua = settings::get("samlUserAgent", "").toString();
if (!ua.isEmpty())
webView->page()->profile()->setHttpUserAgent(ua);
if (samlMethod == "POST") { if (samlMethod == "POST") {
webView->setHtml(samlRequest, preloginUrl); webView->setHtml(samlRequest, preloginUrl);

View File

@@ -40,3 +40,11 @@ void SettingsDialog::setOsVersion(QString osVersion) {
QString SettingsDialog::osVersion() { QString SettingsDialog::osVersion() {
return ui->osVersionInput->text(); return ui->osVersionInput->text();
} }
void SettingsDialog::setSamlUserAgent(QString samlUserAgent) {
ui->samlUserAgentInput->setText(samlUserAgent);
}
QString SettingsDialog::samlUserAgent() {
return ui->samlUserAgentInput->text();
}

View File

@@ -24,6 +24,9 @@ public:
void setOsVersion(QString osVersion); void setOsVersion(QString osVersion);
QString osVersion(); QString osVersion();
void setSamlUserAgent(QString samlUserAgent);
QString samlUserAgent();
private: private:
Ui::SettingsDialog *ui; Ui::SettingsDialog *ui;
}; };

View File

@@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>488</width> <width>488</width>
<height>220</height> <height>328</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@@ -55,7 +55,17 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>os-version:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="osVersionInput"/>
</item>
<item row="4" column="1">
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@@ -65,13 +75,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="3" column="1">
<widget class="QLineEdit" name="osVersionInput"/> <widget class="QLineEdit" name="samlUserAgentInput"/>
</item> </item>
<item row="2" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_4">
<property name="text"> <property name="text">
<string>os-version:</string> <string>saml-user-agent:</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@@ -23,7 +23,7 @@ A GlobalProtect VPN client (GUI) for Linux based on Openconnect and built with Q
|OS|Stable version | Development version| |OS|Stable version | Development version|
|---|--------------|--------------------| |---|--------------|--------------------|
|Linux Mint, Ubuntu 18.04 or later|[ppa:yuezk/globalprotect-openconnect](https://launchpad.net/~yuezk/+archive/ubuntu/globalprotect-openconnect)|[ppa:yuezk/globalprotect-openconnect-snapshot](https://launchpad.net/~yuezk/+archive/ubuntu/globalprotect-openconnect-snapshot)| |Linux Mint, Ubuntu 18.04 or later|[ppa:yuezk/globalprotect-openconnect](https://launchpad.net/~yuezk/+archive/ubuntu/globalprotect-openconnect)|[ppa:yuezk/globalprotect-openconnect-snapshot](https://launchpad.net/~yuezk/+archive/ubuntu/globalprotect-openconnect-snapshot)|
|Arch, Manjaro|[globalprotect-openconnect](https://archlinux.org/packages/extra/x86_64/globalprotect-openconnect/)|[AUR: globalprotect-openconnect-git](https://aur.archlinux.org/packages/globalprotect-openconnect-git/)| |Arch, Manjaro|[globalprotect-openconnect](https://archlinux.org/packages/community/x86_64/globalprotect-openconnect/)|[AUR: globalprotect-openconnect-git](https://aur.archlinux.org/packages/globalprotect-openconnect-git/)|
|Fedora|[copr: yuezk/globalprotect-openconnect](https://copr.fedorainfracloud.org/coprs/yuezk/globalprotect-openconnect/)|[copr: yuezk/globalprotect-openconnect](https://copr.fedorainfracloud.org/coprs/yuezk/globalprotect-openconnect/)| |Fedora|[copr: yuezk/globalprotect-openconnect](https://copr.fedorainfracloud.org/coprs/yuezk/globalprotect-openconnect/)|[copr: yuezk/globalprotect-openconnect](https://copr.fedorainfracloud.org/coprs/yuezk/globalprotect-openconnect/)|
|openSUSE, CentOS 8|[OBS: globalprotect-openconnect](https://build.opensuse.org/package/show/home:yuezk/globalprotect-openconnect)|[OBS: globalprotect-openconnect-snapshot](https://build.opensuse.org/package/show/home:yuezk/globalprotect-openconnect-snapshot)| |openSUSE, CentOS 8|[OBS: globalprotect-openconnect](https://build.opensuse.org/package/show/home:yuezk/globalprotect-openconnect)|[OBS: globalprotect-openconnect-snapshot](https://build.opensuse.org/package/show/home:yuezk/globalprotect-openconnect-snapshot)|