Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Improved invalid SSL/self-signed checking when creating a new account.
[xestiaab/.git] / source / frmNewAccount.cpp
index 1681134..3df7781 100644 (file)
@@ -6,6 +6,7 @@
 
 #include "carddav/carddav.h"
 #include "common/dirs.h"
+#include "frmInvalidSSLCertificate.h"
 
 frmNewAccount::frmNewAccount( wxWindow* parent )
 :
@@ -128,7 +129,6 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event )
         lblServerConnResult->SetLabel(_("Testing..."));
         
         UseSSL = chkUseSSL->GetValue();
-        
         CardDAVConn.SetupConnection(txtServerAddress->GetValue(),
                                     wxAtoi(txtServerPort->GetValue()),
                                     txtUsername->GetValue(),
@@ -136,6 +136,98 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event )
                                     UseSSL);
         CardDAVConn.SetupResultBools(&ServerResult, &ServerAction);
         
+               // Verify SSL trust first before doing anything.
+
+               if (UseSSL == TRUE){
+
+                       CURLcode sslcode = CardDAVConn.SSLVerifyTest();
+
+                       if (sslcode == CURLE_OK){
+                               
+
+
+                       } else if (sslcode == CURLE_SSL_CACERT || sslcode == CURLE_SSL_CONNECT_ERROR){
+
+                               // Certificate is more than likely a self-signed or
+                               // expired certificate so display the invalid
+                               // SSL certificate message.
+
+                               // 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 {
+
+                               // Something else happened. Stop the process and
+                               // display an error message instead.
+
+                               lblServerConnResult->SetLabel(_("Failed"));
+                               lblConnectionResultText->SetLabel(_("An error occured whilst connnecting: ") + CardDAVConn.GetErrorMessage() + wxString::Format(wxT(" (%i)\n%s"), sslcode, CardDAVConn.GetErrorBuffer().mb_str()));
+                               return;
+
+                       }
+
+               }
+
         std::thread ConnTest(&CardDAV::Connect, &CardDAVConn);
         
         ConnTest.join();
@@ -143,7 +235,6 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event )
         if (ServerResult == FALSE){
             
             lblServerConnResult->SetLabel(_("Failed"));
-            wxMessageBox(CardDAVConn.GetErrorMessage());
             return;
             
         } else {
@@ -152,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 {
             
@@ -175,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){
             
@@ -207,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 &&
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy