#include <wx/filefn.h>
#include <wx/fileconf.h>
+#if defined(__WIN32__)
+#include <cryptuiapi.h>
+#include "common/win32ssl.h"
+#endif
+
#include "carddav/carddav.h"
#include "common/dirs.h"
#include "common/svrblist.h"
UseSSL);
CardDAVConn.SetupResultBools(&ServerResult, &ServerAction);
+#if defined(__WIN32__)
+
+ BOOL ModifiedCertificateData = FALSE;
+
+#endif
+
// Verify SSL trust first before doing anything.
if (UseSSL == TRUE){
// SSL certificate message.
// Setup the data to be sent in the wxPostEvent command.
-
+
int SSLResult;
+
+#if defined(__APPLE__)
+
+ SSLResult = DisplayTrustPanel(&CardDAVConn);
+
+ if (SSLResult != NSOKButton){
+
+ lblServerConnResult->SetLabel(_("Failed"));
+ lblServerResponse->SetLabel(_("Not applicable"));
+ lblServerSSLResult->SetLabel(_("Used"));
+ lblServerSSLValid->SetLabel(_("No"));
+ lblConnectionResultText->SetLabel(_("An error occured whilst connnecting: ") + CardDAVConn.GetErrorMessage() + wxString::Format(wxT(" (%i)\n%s"), sslcode, CardDAVConn.GetErrorBuffer().mb_str()));
+ return;
+
+ } else {
+
+ // Evalulate the trust object.
+
+ SecTrustResultType EvalResult = ProcessResultType(&CardDAVConn);
+
+ switch(EvalResult){
+ case kSecTrustResultProceed:
+ lblServerSSLValid->SetLabel(_("Verified"));
+ break;
+ case kSecTrustResultConfirm:
+ lblServerSSLValid->SetLabel(_("Verified (user)"));
+ break;
+ default:
+ lblServerSSLValid->SetLabel(_("Unable to verify"));
+ }
+
+ lblServerResponse->SetLabel(_("Not applicable"));
+ lblServerSSLResult->SetLabel(_("Used"));
+
+ if (EvalResult != kSecTrustResultProceed){
+ return;
+ }
+
+ }
+
+#elif defined(__WIN32__)
+
+ CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(&CardDAVConn, (HWND)this->GetHandle());
+
+ if (!CryptUIDlgViewCertificate(&CertificateData, &ModifiedCertificateData)){
+ wxMessageBox(_("An error occured while trying to open the certificate dialog."), _("Error opening Certificate Information dialog"));
+ }
+
+ if (ModifiedCertificateData == FALSE){
+
+ lblServerConnResult->SetLabel(_("Failed"));
+ lblServerResponse->SetLabel(_("Not applicable"));
+ lblServerSSLResult->SetLabel(_("Used"));
+ lblServerSSLValid->SetLabel(_("No"));
+ lblConnectionResultText->SetLabel(_("An error occured whilst connnecting: ") + CardDAVConn.GetErrorMessage() + wxString::Format(wxT(" (%i)\n%s"), sslcode, CardDAVConn.GetErrorBuffer().mb_str()));
+ return;
+
+ }
+
+#else
frmInvalidSSLCertificate *frmICPtr = new frmInvalidSSLCertificate(this);
return;
}
+
+#endif
} else {
// Something else happened. Stop the process and
// display an error message instead.
+ CURLcode sslcode = CardDAVConn.SSLVerifyTest();
+
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();
-
+
+#if defined(__WIN32__)
+ if (ServerResult == FALSE && ModifiedCertificateData == FALSE){
+#else
if (ServerResult == FALSE){
+#endif
lblServerConnResult->SetLabel(_("Failed"));
+ lblConnectionResultText->SetLabel(_("An error occured whilst connnecting: ") + CardDAVConn.GetErrorMessage());
return;
-
+
} else {
lblServerConnResult->SetLabel(_("Connected"));
}
-
+
if (CardDAVConn.CanDoSSL() == TRUE){
-
+
lblServerSSLResult->SetLabel(_("Used"));
-
+
} else {
lblServerSSLResult->SetLabel(_("Not Used"));
lblServerSSLValid->SetLabel(_("Not Applicable"));
}
-
+
+#if defined(__APPLE__)
+
+ // Evalulate the trust object.
+
+ SecTrustResultType EvalResult = ProcessResultType(&CardDAVConn);
+
+ switch(EvalResult){
+ case kSecTrustResultProceed:
+ lblServerSSLValid->SetLabel(_("Verified"));
+ break;
+ case kSecTrustResultConfirm:
+ lblServerSSLValid->SetLabel(_("Verified (user)"));
+ break;
+ default:
+ lblServerSSLValid->SetLabel(_("Unable to verify"));
+ }
+
+#elif defined(__WIN32__)
+
+ if (ModifiedCertificateData == TRUE){
+ lblServerSSLValid->SetLabel(_("Verified (user)"));
+ } else {
+ lblServerSSLValid->SetLabel(_("Verified"));
+ }
+
+#else
+
if (CardDAVConn.SSLVerify() == TRUE && CardDAVConn.CanDoSSL() == TRUE){
lblServerSSLValid->SetLabel(_("Verified"));
lblServerSSLValid->SetLabel(_("Unable to verify"));
- }
-
+ }
+
+#endif
+
if (CardDAVConn.CanDoCardDAV() == TRUE){
lblCardDAVSupportResult->SetLabel(_("Supported"));
} else {
lblCardDAVSupportResult->SetLabel(_("Unsupported"));
+ SetErrorMessageLabel();
+ return;
}
} else {
lblAbleToLoginResult->SetLabel(_("No"));
+ SetErrorMessageLabel();
+ return;
}
} else {
lblServerResponse->SetLabel(_("No"));
+ SetErrorMessageLabel();
+ return;
}
} else {
- lblConnectionResultText->SetLabel(_("A problem has occured whilst connecting to the CardDAV server.\nPlease review the above information and change the server details if needed.\nIf there are still problems, please speak to your system administrator(s)."));
+ SetErrorMessageLabel();
}
ReloadAccountConfig = ReloadAccountInc;
+}
+
+void frmNewAccount::SetErrorMessageLabel(){
+
+ lblConnectionResultText->SetLabel(_("A problem has occured whilst connecting to the CardDAV server.\nPlease review the above information and change the server details if needed.\nIf there are still problems, please speak to your system administrator(s)."));
+
}
\ No newline at end of file