mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
	
	
		
			63 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|  | #include "Network/NetworkAccessManager.hpp"
 | ||
|  | 
 | ||
|  | #include <QString>
 | ||
|  | #include <QNetworkReply>
 | ||
|  | 
 | ||
|  | #include "moc_NetworkAccessManager.cpp"
 | ||
|  | 
 | ||
|  | NetworkAccessManager::NetworkAccessManager (QWidget * parent) | ||
|  |   : QNetworkAccessManager (parent) | ||
|  |   , parent_widget_ {parent} | ||
|  | { | ||
|  |   // handle SSL errors that have not been cached as allowed
 | ||
|  |   // exceptions and offer them to the user to add to the ignored
 | ||
|  |   // exception cache
 | ||
|  |   connect (this, &QNetworkAccessManager::sslErrors, this, &NetworkAccessManager::filter_SSL_errors); | ||
|  | } | ||
|  | 
 | ||
|  | void NetworkAccessManager::filter_SSL_errors (QNetworkReply * reply, QList<QSslError> const& errors) | ||
|  | { | ||
|  |   QString message; | ||
|  |   QList<QSslError> new_errors; | ||
|  |   for (auto const& error: errors) | ||
|  |     { | ||
|  |       if (!allowed_ssl_errors_.contains (error)) | ||
|  |         { | ||
|  |           new_errors << error; | ||
|  |           message += '\n' + reply->request ().url ().toDisplayString () + ": " + error.errorString (); | ||
|  |         } | ||
|  |     } | ||
|  |   if (new_errors.size ()) | ||
|  |     { | ||
|  |       QString certs; | ||
|  |       for (auto const& cert : reply->sslConfiguration ().peerCertificateChain ()) | ||
|  |         { | ||
|  |           certs += cert.toText () + '\n'; | ||
|  |         } | ||
|  |       if (MessageBox::Ignore == MessageBox::query_message (parent_widget_ | ||
|  |                                                            , tr ("Network SSL/TLS Errors") | ||
|  |                                                            , message, certs | ||
|  |                                                            , MessageBox::Abort | MessageBox::Ignore)) | ||
|  |         { | ||
|  |           // accumulate new SSL error exceptions that have been allowed
 | ||
|  |           allowed_ssl_errors_.append (new_errors); | ||
|  |           reply->ignoreSslErrors (allowed_ssl_errors_); | ||
|  |         } | ||
|  |     } | ||
|  |   else | ||
|  |     { | ||
|  |       // no new exceptions so silently ignore the ones already allowed
 | ||
|  |       reply->ignoreSslErrors (allowed_ssl_errors_); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | QNetworkReply * NetworkAccessManager::createRequest (Operation operation, QNetworkRequest const& request | ||
|  |                                                      , QIODevice * outgoing_data) | ||
|  | { | ||
|  |   auto reply = QNetworkAccessManager::createRequest (operation, request, outgoing_data); | ||
|  |   // errors are usually certificate specific so passing all cached
 | ||
|  |   // exceptions here is ok
 | ||
|  |   reply->ignoreSslErrors (allowed_ssl_errors_); | ||
|  |   return reply; | ||
|  | } |