X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2FfrmNewAccount.cpp;h=a28eefdca63d90e9a40d77cf3cb5388528371ac0;hb=f465aa76237915dfa58983da02e2ea0707ef0d07;hp=1681134eac33410c3e4fa1ef391d879ea865143a;hpb=969329975a0af9d346c76dc34e9ff9cd54cc61ee;p=xestiaab%2F.git diff --git a/source/frmNewAccount.cpp b/source/frmNewAccount.cpp index 1681134..a28eefd 100644 --- a/source/frmNewAccount.cpp +++ b/source/frmNewAccount.cpp @@ -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 && @@ -245,6 +338,7 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event ) // Finished. wxString XestiaABPrefDirectory; + wxString XestiaABDirectory; wxString AccountSettingsFile; //wxFile ASFile; wxString RandomNumberSuffix = wxString::Format(wxT("%i"), rand() % 32767); @@ -256,8 +350,9 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event ) #elif defined(__WIN32__) - XestiaABPrefDirectory = GetUserDir(); - + XestiaABPrefDirectory = GetUserPrefDir(); + XestiaABDirectory = GetUserDir(); + AccountSettingsFile = XestiaABPrefDirectory + wxT("accounts"); // Open the file for writing. @@ -292,7 +387,7 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event ) wxString DirectoryName = txtAccountName->GetValue().Mid(0, 30) + RandomNumberSuffix; - if (wxMkdir(XestiaABPrefDirectory + wxT("/accounts/") + DirectoryName + wxT(".carddav"), 0740) == TRUE){ + if (wxMkdir(XestiaABDirectory + wxT("\\accounts\\") + DirectoryName + wxT(".carddav"), 0740) == TRUE){ DirectoryCreated = TRUE; @@ -315,7 +410,7 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event ) wxString DirectoryName = txtAccountName->GetValue().Mid(0, 30) + RandomNumberSuffix; - if (wxMkdir(XestiaABPrefDirectory + wxT("/accounts/") + DirectoryName + wxT(".local"), 0740) == TRUE){ + if (wxMkdir(XestiaABDirectory + wxT("\\accounts\\") + DirectoryName + wxT(".local"), 0740) == TRUE){ DirectoryCreated = TRUE; @@ -341,9 +436,10 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event ) #else - XestiaABPrefDirectory = GetUserDir(); + XestiaABPrefDirectory = GetUserPrefDir(); + XestiaABDirectory = GetUserDir(); - AccountSettingsFile = GetUserPrefDir() + wxT("accounts"); + AccountSettingsFile = XestiaABPrefDirectory + wxT("accounts"); // Open the file for writing. @@ -377,7 +473,7 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event ) wxString DirectoryName = txtAccountName->GetValue().Mid(0, 30) + RandomNumberSuffix; - if (wxMkdir(XestiaABPrefDirectory + wxT("/accounts/") + DirectoryName + wxT(".carddav"), 0740) == TRUE){ + if (wxMkdir(XestiaABDirectory + wxT("/accounts/") + DirectoryName + wxT(".carddav"), 0740) == TRUE){ DirectoryCreated = TRUE; @@ -400,7 +496,7 @@ void frmNewAccount::ProcessNext( wxCommandEvent& event ) wxString DirectoryName = txtAccountName->GetValue().Mid(0, 30) + RandomNumberSuffix; - if (wxMkdir(XestiaABPrefDirectory + wxT("/accounts/") + DirectoryName + wxT(".local"), 0740) == TRUE){ + if (wxMkdir(XestiaABDirectory + wxT("/accounts/") + DirectoryName + wxT(".local"), 0740) == TRUE){ DirectoryCreated = TRUE;