From c5bc76b6a1301ce594a0949f02855a6bc2190094 Mon Sep 17 00:00:00 2001
From: Steve Brokenshire <sbrokenshire@xestia.co.uk>
Date: Sun, 4 Oct 2015 16:15:34 +0100
Subject: [PATCH] Improved invalid SSL/self-signed checking when creating a new
 account.

---
 source/frmNewAccount.cpp | 95 ++++++++++++++++++++++++++++++++--------
 1 file changed, 77 insertions(+), 18 deletions(-)

diff --git a/source/frmNewAccount.cpp b/source/frmNewAccount.cpp
index 4eb1259..3df7781 100644
--- a/source/frmNewAccount.cpp
+++ b/source/frmNewAccount.cpp
@@ -152,10 +152,68 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event )
 				// expired certificate so display the invalid
 				// SSL certificate message.
 
-				frmInvalidSSLCertificate *frmICPtr = new frmInvalidSSLCertificate(this);
+				// Setup the data to be sent in the wxPostEvent command.
+
+				//SSLInvalidCertNotifObj SSLICNProcData;
+
+				//bool *PauseMode = new bool;
+				int SSLResult;
+				//QRNotif qrn;
+
+				//*PauseMode = TRUE;		
+				//qrn.QResponse = &SSLResult;
+				//qrn.PausePtr = PauseMode;
+				
+				//SSLICNProcData.CertCollection = CardDAVConn.GetSSLVerifyResults();
+				//SSLICNProcData.QRNotifData = &qrn;
+				//SSLICNProcData.AccountName = _("New account");
+			
+    				frmInvalidSSLCertificate *frmICPtr = new frmInvalidSSLCertificate(this);
 
 				frmICPtr->LoadDataNew(CardDAVConn.GetSSLVerifyResults(), txtServerAddress->GetValue());
 				frmICPtr->ShowModal();
+			
+				//wxCommandEvent event(INVALIDSSLCERT);
+				//event.SetClientData(&SSLICNProcData);
+				//wxPostEvent(this->GetParent(), event);
+	
+				/*timespec n1, n2;
+		
+				// Fall asleep until we get an response.
+		
+				n1.tv_sec = 0;
+				n1.tv_nsec = 250000000L;*/
+					
+				SSLResult = frmICPtr->GetResult();
+							
+				// Clean up before processing response.
+				
+				delete frmICPtr;
+				frmICPtr = NULL;
+							
+				// Process the response from the user.
+							
+				if (SSLResult == 1){
+								
+					// Accept the Certificate.
+
+					CardDAVConn.AllowSelfSignTest(TRUE);
+								
+				} else if (SSLResult == 2){
+								
+					// Reject the certificate, abort the task and mark as failed.
+
+					lblServerConnResult->SetLabel(_("Failed"));
+					lblConnectionResultText->SetLabel(_("An error occured whilst connnecting: ") + CardDAVConn.GetErrorMessage() + wxString::Format(wxT(" (%i)\n%s"), sslcode, CardDAVConn.GetErrorBuffer().mb_str()));
+					return;
+								
+				}
+
+				//frmInvalidSSLCertificate *frmICPtr = new frmInvalidSSLCertificate(this);
+
+				//frmICPtr->LoadDataNew(CardDAVConn.GetSSLVerifyResults(), txtServerAddress->GetValue());
+				//frmICPtr->ShowModal();
+				
 
 			} else {
 
@@ -177,7 +235,6 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event )
         if (ServerResult == FALSE){
             
             lblServerConnResult->SetLabel(_("Failed"));
-            wxMessageBox(CardDAVConn.GetErrorMessage());
             return;
             
         } else {
@@ -186,19 +243,9 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event )
             
         }
         
-        if (CardDAVConn.HasValidResponse() == TRUE){
-            
-            lblServerResponse->SetLabel(_("Yes"));
-            
-        } else {
-            
-            lblServerResponse->SetLabel(_("No"));
-            
-        }
-        
         if (CardDAVConn.CanDoSSL() == TRUE){
             
-            lblCardDAVSupportResult->SetLabel(_("Used"));
+	    lblServerSSLResult->SetLabel(_("Used"));
             
         } else {
             
@@ -209,13 +256,17 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event )
         
         if (CardDAVConn.SSLVerify() == TRUE && CardDAVConn.CanDoSSL() == TRUE){
             
-            lblCardDAVSupportResult->SetLabel(_("Verified"));
+            lblServerSSLValid->SetLabel(_("Verified"));
             
-        } else if (CardDAVConn.SSLVerify() == FALSE && CardDAVConn.CanDoSSL() == TRUE) {
+        } else if (CardDAVConn.SSLVerify() == FALSE && CardDAVConn.CanDoSSL() == TRUE && CardDAVConn.IsSelfSigned() == TRUE){
+	
+            lblServerSSLValid->SetLabel(_("Verified (user)"));
+	
+	} else if (CardDAVConn.SSLVerify() == FALSE && CardDAVConn.CanDoSSL() == TRUE) {
             
-            lblServerSSLResult->SetLabel(_("Unable to verify"));
+            lblServerSSLValid->SetLabel(_("Unable to verify"));
             
-        }
+        }	
         
         if (CardDAVConn.CanDoCardDAV() == TRUE){
             
@@ -241,7 +292,15 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event )
         
         ServerPrefix = CardDAVConn.GetDefaultAddressBookURL();
         
-        wxMessageBox(ServerPrefix);
+	if (CardDAVConn.HasValidResponse() == TRUE){
+            
+            lblServerResponse->SetLabel(_("Yes"));
+            
+        } else {
+            
+            lblServerResponse->SetLabel(_("No"));
+            
+        }
         
         if (ServerResult == TRUE && CardDAVConn.HasValidResponse() == TRUE &&
             //CardDAVConn.CanDoSSL() == TRUE && CardDAVConn.SSLVerify() == TRUE &&
-- 
2.39.5