mirror of
				https://github.com/yuezk/GlobalProtect-openconnect.git
				synced 2025-05-20 07:26:58 -04:00 
			
		
		
		
	Fix saml login for portal-userauthcookie (#12)
This commit is contained in:
		| @@ -151,11 +151,16 @@ void GatewayAuthenticator::samlAuth(QString samlMethod, QString samlRequest, QSt | ||||
|  | ||||
| void GatewayAuthenticator::onSAMLLoginSuccess(const QMap<QString, QString> &samlResult) | ||||
| { | ||||
|     PLOGI << "SAML login succeeded, got the prelogin cookie " << samlResult.value("preloginCookie"); | ||||
|     if (samlResult.contains("preloginCookie")) { | ||||
|         PLOGI << "SAML login succeeded, got the prelogin-cookie " << samlResult.value("preloginCookie"); | ||||
|     } else { | ||||
|         PLOGI << "SAML login succeeded, got the portal-userauthcookie " << samlResult.value("userAuthCookie"); | ||||
|     } | ||||
|  | ||||
|     LoginParams params; | ||||
|     params.setUser(samlResult.value("username")); | ||||
|     params.setPreloginCookie(samlResult.value("preloginCookie")); | ||||
|     params.setUserAuthCookie(samlResult.value("userAuthCookie")); | ||||
|  | ||||
|     login(params); | ||||
| } | ||||
|   | ||||
| @@ -124,9 +124,13 @@ void PortalAuthenticator::samlAuth() | ||||
|  | ||||
| void PortalAuthenticator::onSAMLLoginSuccess(const QMap<QString, QString> samlResult) | ||||
| { | ||||
|     PLOGI << "SAML login succeeded, got the prelogin cookie " << samlResult.value("preloginCookie"); | ||||
|     if (samlResult.contains("preloginCookie")) { | ||||
|         PLOGI << "SAML login succeeded, got the prelogin-cookie " << samlResult.value("preloginCookie"); | ||||
|     } else { | ||||
|         PLOGI << "SAML login succeeded, got the portal-userauthcookie " << samlResult.value("userAuthCookie"); | ||||
|     } | ||||
|  | ||||
|     fetchConfig(samlResult.value("username"), "", samlResult.value("preloginCookie")); | ||||
|     fetchConfig(samlResult.value("username"), "", samlResult.value("preloginCookie"), samlResult.value("userAuthCookie")); | ||||
| } | ||||
|  | ||||
| void PortalAuthenticator::onSAMLLoginFail(const QString msg) | ||||
| @@ -134,13 +138,14 @@ void PortalAuthenticator::onSAMLLoginFail(const QString msg) | ||||
|     emitFail(msg); | ||||
| } | ||||
|  | ||||
| void PortalAuthenticator::fetchConfig(QString username, QString password, QString preloginCookie) | ||||
| void PortalAuthenticator::fetchConfig(QString username, QString password, QString preloginCookie, QString userAuthCookie) | ||||
| { | ||||
|     LoginParams params; | ||||
|     params.setServer(portal); | ||||
|     params.setUser(username); | ||||
|     params.setPassword(password); | ||||
|     params.setPreloginCookie(preloginCookie); | ||||
|     params.setUserAuthCookie(userAuthCookie); | ||||
|  | ||||
|     // Save the username and password for future use. | ||||
|     this->username = username; | ||||
|   | ||||
| @@ -47,7 +47,7 @@ private: | ||||
|     void tryAutoLogin(); | ||||
|     void normalAuth(); | ||||
|     void samlAuth(); | ||||
|     void fetchConfig(QString username, QString password, QString preloginCookie = ""); | ||||
|     void fetchConfig(QString username, QString password, QString preloginCookie = "", QString userAuthCookie = ""); | ||||
|     void emitFail(const QString& msg = ""); | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -59,11 +59,19 @@ void SAMLLoginWindow::onResponseReceived(QJsonObject params) | ||||
|  | ||||
|     const QString username = headers.value("saml-username").toString(); | ||||
|     const QString preloginCookie = headers.value("prelogin-cookie").toString(); | ||||
|     const QString userAuthCookie = headers.value("portal-userauthcookie").toString(); | ||||
|  | ||||
|     if (!username.isEmpty() && !preloginCookie.isEmpty()) { | ||||
|     if (!username.isEmpty()) { | ||||
|         samlResult.insert("username", username); | ||||
|     } | ||||
|  | ||||
|     if (!preloginCookie.isEmpty()) { | ||||
|         samlResult.insert("preloginCookie", preloginCookie); | ||||
|     } | ||||
|  | ||||
|     if (!userAuthCookie.isEmpty()) { | ||||
|         samlResult.insert("userAuthCookie", userAuthCookie); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void SAMLLoginWindow::onLoadFinished() | ||||
| @@ -71,7 +79,8 @@ void SAMLLoginWindow::onLoadFinished() | ||||
|      LOGI << "Load finished " << this->webView->page()->url().toString(); | ||||
|  | ||||
|     // Check the SAML result | ||||
|     if (!samlResult.value("username").isEmpty() && !samlResult.value("preloginCookie").isEmpty()) { | ||||
|     if (samlResult.contains("username") | ||||
|             && (samlResult.contains("preloginCookie") || samlResult.contains("userAuthCookie"))) { | ||||
|         emit success(samlResult); | ||||
|         accept(); | ||||
|     } else { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user