mirror of
				https://github.com/yuezk/GlobalProtect-openconnect.git
				synced 2025-05-20 07:26:58 -04:00 
			
		
		
		
	Merge branch 'master' into add_snap_packaging
This commit is contained in:
		@@ -8,7 +8,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
using namespace gpclient::helper;
 | 
					using namespace gpclient::helper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GatewayAuthenticator::GatewayAuthenticator(const QString& gateway, const GatewayAuthenticatorParams& params)
 | 
					GatewayAuthenticator::GatewayAuthenticator(const QString& gateway, const GatewayAuthenticatorParams params)
 | 
				
			||||||
    : QObject()
 | 
					    : QObject()
 | 
				
			||||||
    , gateway(gateway)
 | 
					    , gateway(gateway)
 | 
				
			||||||
    , params(params)
 | 
					    , params(params)
 | 
				
			||||||
@@ -29,23 +29,19 @@ void GatewayAuthenticator::authenticate()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    PLOGI << "Start gateway authentication...";
 | 
					    PLOGI << "Start gateway authentication...";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    LoginParams loginParams;
 | 
					    LoginParams loginParams { params.clientos() };
 | 
				
			||||||
    loginParams.setUser(params.username());
 | 
					    loginParams.setUser(params.username());
 | 
				
			||||||
    loginParams.setPassword(params.password());
 | 
					    loginParams.setPassword(params.password());
 | 
				
			||||||
    loginParams.setUserAuthCookie(params.userAuthCookie());
 | 
					    loginParams.setUserAuthCookie(params.userAuthCookie());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!params.clientos().isEmpty()) {
 | 
					 | 
				
			||||||
        loginParams.setClientos(params.clientos());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    login(loginParams);
 | 
					    login(loginParams);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GatewayAuthenticator::login(const LoginParams ¶ms)
 | 
					void GatewayAuthenticator::login(const LoginParams &loginParams)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    PLOGI << "Trying to login the gateway at " << loginUrl << " with " << params.toUtf8();
 | 
					    PLOGI << "Trying to login the gateway at " << loginUrl << " with " << loginParams.toUtf8();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    QNetworkReply *reply = createRequest(loginUrl, params.toUtf8());
 | 
					    QNetworkReply *reply = createRequest(loginUrl, loginParams.toUtf8());
 | 
				
			||||||
    connect(reply, &QNetworkReply::finished, this, &GatewayAuthenticator::onLoginFinished);
 | 
					    connect(reply, &QNetworkReply::finished, this, &GatewayAuthenticator::onLoginFinished);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -132,10 +128,11 @@ void GatewayAuthenticator::onPerformNormalLogin(const QString &username, const Q
 | 
				
			|||||||
    PLOGI << "Start to perform normal login...";
 | 
					    PLOGI << "Start to perform normal login...";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    normalLoginWindow->setProcessing(true);
 | 
					    normalLoginWindow->setProcessing(true);
 | 
				
			||||||
    LoginParams params;
 | 
					    LoginParams loginParams { params.clientos() };
 | 
				
			||||||
    params.setUser(username);
 | 
					    loginParams.setUser(username);
 | 
				
			||||||
    params.setPassword(password);
 | 
					    loginParams.setPassword(password);
 | 
				
			||||||
    login(params);
 | 
					    
 | 
				
			||||||
 | 
					    login(loginParams);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GatewayAuthenticator::onLoginWindowRejected()
 | 
					void GatewayAuthenticator::onLoginWindowRejected()
 | 
				
			||||||
@@ -170,12 +167,12 @@ void GatewayAuthenticator::onSAMLLoginSuccess(const QMap<QString, QString> &saml
 | 
				
			|||||||
        PLOGI << "SAML login succeeded, got the portal-userauthcookie " << samlResult.value("userAuthCookie");
 | 
					        PLOGI << "SAML login succeeded, got the portal-userauthcookie " << samlResult.value("userAuthCookie");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    LoginParams params;
 | 
					    LoginParams loginParams { params.clientos() };
 | 
				
			||||||
    params.setUser(samlResult.value("username"));
 | 
					    loginParams.setUser(samlResult.value("username"));
 | 
				
			||||||
    params.setPreloginCookie(samlResult.value("preloginCookie"));
 | 
					    loginParams.setPreloginCookie(samlResult.value("preloginCookie"));
 | 
				
			||||||
    params.setUserAuthCookie(samlResult.value("userAuthCookie"));
 | 
					    loginParams.setUserAuthCookie(samlResult.value("userAuthCookie"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    login(params);
 | 
					    login(loginParams);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GatewayAuthenticator::onSAMLLoginFail(const QString msg)
 | 
					void GatewayAuthenticator::onSAMLLoginFail(const QString msg)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ class GatewayAuthenticator : public QObject
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    Q_OBJECT
 | 
					    Q_OBJECT
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    explicit GatewayAuthenticator(const QString& gateway, const GatewayAuthenticatorParams& params);
 | 
					    explicit GatewayAuthenticator(const QString& gateway, const GatewayAuthenticatorParams params);
 | 
				
			||||||
    ~GatewayAuthenticator();
 | 
					    ~GatewayAuthenticator();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void authenticate();
 | 
					    void authenticate();
 | 
				
			||||||
@@ -30,13 +30,13 @@ private slots:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    QString gateway;
 | 
					    QString gateway;
 | 
				
			||||||
    const GatewayAuthenticatorParams& params;
 | 
					    const GatewayAuthenticatorParams params;
 | 
				
			||||||
    QString preloginUrl;
 | 
					    QString preloginUrl;
 | 
				
			||||||
    QString loginUrl;
 | 
					    QString loginUrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    NormalLoginWindow *normalLoginWindow{ nullptr };
 | 
					    NormalLoginWindow *normalLoginWindow{ nullptr };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void login(const LoginParams& params);
 | 
					    void login(const LoginParams& loginParams);
 | 
				
			||||||
    void doAuth();
 | 
					    void doAuth();
 | 
				
			||||||
    void normalAuth(QString labelUsername, QString labelPassword, QString authMessage);
 | 
					    void normalAuth(QString labelUsername, QString labelPassword, QString authMessage);
 | 
				
			||||||
    void samlAuth(QString samlMethod, QString samlRequest, QString preloginUrl = "");
 | 
					    void samlAuth(QString samlMethod, QString samlRequest, QString preloginUrl = "");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <QUrlQuery>
 | 
					#include <QUrlQuery>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LoginParams::LoginParams()
 | 
					LoginParams::LoginParams(const QString clientos)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    params.addQueryItem("prot", QUrl::toPercentEncoding("https:"));
 | 
					    params.addQueryItem("prot", QUrl::toPercentEncoding("https:"));
 | 
				
			||||||
    params.addQueryItem("server", "");
 | 
					    params.addQueryItem("server", "");
 | 
				
			||||||
@@ -15,6 +15,12 @@ LoginParams::LoginParams()
 | 
				
			|||||||
    params.addQueryItem("direct", "yes");
 | 
					    params.addQueryItem("direct", "yes");
 | 
				
			||||||
    params.addQueryItem("clientVer", "4100");
 | 
					    params.addQueryItem("clientVer", "4100");
 | 
				
			||||||
    params.addQueryItem("os-version", QUrl::toPercentEncoding(QSysInfo::prettyProductName()));
 | 
					    params.addQueryItem("os-version", QUrl::toPercentEncoding(QSysInfo::prettyProductName()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // add the clientos parameter if not empty
 | 
				
			||||||
 | 
					    if (!clientos.isEmpty()) {
 | 
				
			||||||
 | 
					        params.addQueryItem("clientos", clientos);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    params.addQueryItem("portal-userauthcookie", "");
 | 
					    params.addQueryItem("portal-userauthcookie", "");
 | 
				
			||||||
    params.addQueryItem("portal-prelogonuserauthcookie", "");
 | 
					    params.addQueryItem("portal-prelogonuserauthcookie", "");
 | 
				
			||||||
    params.addQueryItem("prelogin-cookie", "");
 | 
					    params.addQueryItem("prelogin-cookie", "");
 | 
				
			||||||
@@ -55,11 +61,6 @@ void LoginParams::setPreloginCookie(const QString cookie)
 | 
				
			|||||||
    updateQueryItem("prelogin-cookie", cookie);
 | 
					    updateQueryItem("prelogin-cookie", cookie);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void LoginParams::setClientos(const QString clientos)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    updateQueryItem("clientos", clientos);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
QByteArray LoginParams::toUtf8() const
 | 
					QByteArray LoginParams::toUtf8() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return params.toString().toUtf8();
 | 
					    return params.toString().toUtf8();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@
 | 
				
			|||||||
class LoginParams
 | 
					class LoginParams
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    LoginParams();
 | 
					    LoginParams(const QString clientos);
 | 
				
			||||||
    ~LoginParams();
 | 
					    ~LoginParams();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void setUser(const QString user);
 | 
					    void setUser(const QString user);
 | 
				
			||||||
@@ -15,7 +15,6 @@ public:
 | 
				
			|||||||
    void setUserAuthCookie(const QString cookie);
 | 
					    void setUserAuthCookie(const QString cookie);
 | 
				
			||||||
    void setPrelogonAuthCookie(const QString cookie);
 | 
					    void setPrelogonAuthCookie(const QString cookie);
 | 
				
			||||||
    void setPreloginCookie(const QString cookie);
 | 
					    void setPreloginCookie(const QString cookie);
 | 
				
			||||||
    void setClientos(const QString clientos);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    QByteArray toUtf8() const;
 | 
					    QByteArray toUtf8() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@
 | 
				
			|||||||
#include <plog/Log.h>
 | 
					#include <plog/Log.h>
 | 
				
			||||||
#include <plog/Appenders/ColorConsoleAppender.h>
 | 
					#include <plog/Appenders/ColorConsoleAppender.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const QString version = "v1.3.2";
 | 
					static const QString version = "v1.3.3";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, char *argv[])
 | 
					int main(int argc, char *argv[])
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,7 @@ using namespace gpclient::helper;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
PortalAuthenticator::PortalAuthenticator(const QString& portal, const QString& clientos) : QObject()
 | 
					PortalAuthenticator::PortalAuthenticator(const QString& portal, const QString& clientos) : QObject()
 | 
				
			||||||
  , portal(portal)
 | 
					  , portal(portal)
 | 
				
			||||||
 | 
					  , clientos(clientos)
 | 
				
			||||||
  , preloginUrl("https://" + portal + "/global-protect/prelogin.esp?tmp=tmp&kerberos-support=yes&ipv6-support=yes&clientVer=4100")
 | 
					  , preloginUrl("https://" + portal + "/global-protect/prelogin.esp?tmp=tmp&kerberos-support=yes&ipv6-support=yes&clientVer=4100")
 | 
				
			||||||
  , configUrl("https://" + portal + "/global-protect/getconfig.esp")
 | 
					  , configUrl("https://" + portal + "/global-protect/getconfig.esp")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -146,12 +147,12 @@ void PortalAuthenticator::onSAMLLoginFail(const QString msg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void PortalAuthenticator::fetchConfig(QString username, QString password, QString preloginCookie, QString userAuthCookie)
 | 
					void PortalAuthenticator::fetchConfig(QString username, QString password, QString preloginCookie, QString userAuthCookie)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    LoginParams params;
 | 
					    LoginParams loginParams { clientos };
 | 
				
			||||||
    params.setServer(portal);
 | 
					    loginParams.setServer(portal);
 | 
				
			||||||
    params.setUser(username);
 | 
					    loginParams.setUser(username);
 | 
				
			||||||
    params.setPassword(password);
 | 
					    loginParams.setPassword(password);
 | 
				
			||||||
    params.setPreloginCookie(preloginCookie);
 | 
					    loginParams.setPreloginCookie(preloginCookie);
 | 
				
			||||||
    params.setUserAuthCookie(userAuthCookie);
 | 
					    loginParams.setUserAuthCookie(userAuthCookie);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Save the username and password for future use.
 | 
					    // Save the username and password for future use.
 | 
				
			||||||
    this->username = username;
 | 
					    this->username = username;
 | 
				
			||||||
@@ -159,7 +160,7 @@ void PortalAuthenticator::fetchConfig(QString username, QString password, QStrin
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    PLOGI << "Fetching the portal config from " << configUrl << " for user: " << username;
 | 
					    PLOGI << "Fetching the portal config from " << configUrl << " for user: " << username;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    QNetworkReply *reply = createRequest(configUrl, params.toUtf8());
 | 
					    QNetworkReply *reply = createRequest(configUrl, loginParams.toUtf8());
 | 
				
			||||||
    connect(reply, &QNetworkReply::finished, this, &PortalAuthenticator::onFetchConfigFinished);
 | 
					    connect(reply, &QNetworkReply::finished, this, &PortalAuthenticator::onFetchConfigFinished);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,6 +34,7 @@ private slots:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    QString portal;
 | 
					    QString portal;
 | 
				
			||||||
 | 
					    QString clientos;
 | 
				
			||||||
    QString preloginUrl;
 | 
					    QString preloginUrl;
 | 
				
			||||||
    QString configUrl;
 | 
					    QString configUrl;
 | 
				
			||||||
    QString username;
 | 
					    QString username;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user