X-Git-Url: http://Server1/repobrowser/?p=xestiaab%2F.git;a=blobdiff_plain;f=source%2FfrmSSLCertificate.cpp;h=a06c9fdb51daf4a35b7ff312bc7c45c681238e5a;hp=96614f543f81159d1ae67aa5ba921f5468e46fd8;hb=f69e09d827e06435ea94bb73aa71ab5f9d5c035b;hpb=9dda85fb380dbaa06e14a0263daad4723d231f6c diff --git a/source/frmSSLCertificate.cpp b/source/frmSSLCertificate.cpp index 96614f5..a06c9fd 100644 --- a/source/frmSSLCertificate.cpp +++ b/source/frmSSLCertificate.cpp @@ -1,6 +1,26 @@ +// frmSSLCertificate.cpp - SSL Certificate form. +// +// (c) 2012-2015 Xestia Software Development. +// +// This file is part of Xestia Address Book. +// +// Xestia Address Book is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by the +// Free Software Foundation, version 3 of the license. +// +// Xestia Address Book is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with Xestia Address Book. If not, see + #include "frmSSLCertificate.h" #include +using namespace std; + frmSSLCertificate::frmSSLCertificate( wxWindow* parent ) : frmSSLCertificateADT( parent ) @@ -11,7 +31,7 @@ frmSSLCertificateADT( parent ) void frmSSLCertificate::SetupCerts(SSLCertCollection SSLCertsInc) { - /*// Grab the certificates, start from the one requested and show. + // Grab the certificates, start from the one requested and show. lblValidityStatus->Hide(); @@ -69,13 +89,13 @@ void frmSSLCertificate::SetupCerts(SSLCertCollection SSLCertsInc) wxListItem ColumnDataName; ColumnDataName.SetId(0); - ColumnDataName.SetText(wxT("Name")); + ColumnDataName.SetText(_("Name")); ColumnDataName.SetWidth(115); lstValues->InsertColumn(0, ColumnDataName); wxListItem ColumnDataValue; ColumnDataValue.SetId(0); - ColumnDataValue.SetText(wxT("Value")); + ColumnDataValue.SetText(_("Value")); ColumnDataValue.SetWidth(115); lstValues->InsertColumn(0, ColumnDataValue); @@ -137,15 +157,150 @@ void frmSSLCertificate::SetupCerts(SSLCertCollection SSLCertsInc) treHierarchy->ExpandAll(); - SSLCertData = SSLCertsInc;*/ + SSLCertData = SSLCertsInc; + +} + +void frmSSLCertificate::SetupCertsString(SSLCertCollectionString SSLCertsInc) +{ + + // Grab the certificates, start from the one requested and show. + + lblValidityStatus->Hide(); + + std::map::iterator SCDIter; + SCDIter = SSLCertsInc.SSLCollection.find(StartFrom); + + // Setup the summary tab. + + // Split the subject data down. + + std::map::iterator SDIter = SCDIter->second.CertData.find("Subject"); + std::map SubjectData = GetSubjectData(SDIter->second); + + // Get the common name (CN). + + std::map::iterator CNiter = SubjectData.find("CN"); + + lblCertName->SetLabel(CNiter->second); + + // Split the issuer data down. + + // Attempt to grab the organisation name first then + // the common name if it doesn't exist. + + if (SubjectData.find("O") != SubjectData.end()){ + + std::map::iterator Oiter = SubjectData.find("O"); + lblIssuedToData->SetLabel(Oiter->second); + + } else { + + lblIssuedToData->SetLabel(CNiter->second); + + } + + // Setup the valid from date. + + std::map::iterator Validiter = SCDIter->second.CertData.find("Start date"); + + wxDateTime ValidFromDate; + ValidFromDate.ParseDate(Validiter->second); + + lblValidFromData->SetLabel(ValidFromDate.FormatDate()); + + // Setup the expiry date. + + std::map::iterator Expiryiter = SCDIter->second.CertData.find("Expire date"); + + wxDateTime ExpiryDate; + ExpiryDate.ParseDate(Expiryiter->second); + + lblValidUntilData->SetLabel(ExpiryDate.FormatDate()); + + // Setup the detail tab. + + wxListItem ColumnDataName; + ColumnDataName.SetId(0); + ColumnDataName.SetText(_("Name")); + ColumnDataName.SetWidth(115); + lstValues->InsertColumn(0, ColumnDataName); + + wxListItem ColumnDataValue; + ColumnDataValue.SetId(0); + ColumnDataValue.SetText(_("Value")); + ColumnDataValue.SetWidth(115); + lstValues->InsertColumn(0, ColumnDataValue); + + int SSLIndex = 0; + + for (std::map::iterator iter = SCDIter->second.CertData.begin(); + iter != SCDIter->second.CertData.end(); ++iter){ + + // Ignore certificate data. + + if (iter->first == wxT("Cert")){ + + continue; + + } + + wxListItem SSLInfo; + + SSLInfo.SetId(0); + SSLInfo.SetText(_("Mooo")); + SSLIndex = lstValues->InsertItem(SSLInfo); + + lstValues->SetItem(SSLIndex, 0, iter->first); + lstValues->SetItem(SSLIndex, 1, iter->second); + + } + + // Setup the hierachy tab. + + wxTreeItemId CertTreeId; + wxTreeItemId PrevCertTreeId; + + for (std::map::reverse_iterator iter = SSLCertsInc.SSLCollection.rbegin(); + iter != SSLCertsInc.SSLCollection.rend(); ++iter){ + + if (iter->first < StartFrom){ + + continue; + + } + + // Get the common name of the certificate. (Fetch subject). + + std::map::iterator CSDIter = iter->second.CertData.find("Subject"); + std::map CertSubjectData = GetSubjectData(CSDIter->second); + + // Get the common name (CN). + + std::map::iterator CertCNiter = CertSubjectData.find("CN"); + + // Add to the hierachy. + + SSLCertItemData *SSLCertID = new SSLCertItemData((iter->first + 1)); + + CertTreeId = treHierarchy->AppendItem(PrevCertTreeId, CertCNiter->second, 0, -1, SSLCertID); + PrevCertTreeId = CertTreeId; + + } + + treHierarchy->ExpandAll(); + + SSLCertDataString = SSLCertsInc; } std::map frmSSLCertificate::GetSubjectData(wxString SubjectData) { + // Get the subject data and put into a map + std::map SubjectDataFinal; - wxStringTokenizer SubjectDataToken(SubjectData, wxT(";")); + wxStringTokenizer SubjectDataToken(SubjectData, wxT(",")); wxString StringData; wxString SettingName; wxString SettingValue; @@ -182,6 +337,49 @@ std::map frmSSLCertificate::GetSubjectData(wxString SubjectDa } +std::map frmSSLCertificate::GetSubjectData(std::string SubjectData) +{ + + // Get the subject data and put into a map + + std::map SubjectDataFinal; + wxStringTokenizer SubjectDataToken(wxString(SubjectData.c_str(), wxConvUTF8), wxT(",")); + wxString StringData; + wxString SettingName; + wxString SettingValue; + + while(SubjectDataToken.HasMoreTokens()) + { + + StringData = SubjectDataToken.GetNextToken(); + + // Split the data down between the equals sign. + + wxStringTokenizer DataSplitToken(StringData, wxT("=")); + + while (DataSplitToken.HasMoreTokens()){ + + SettingName = DataSplitToken.GetNextToken(); + SettingValue = DataSplitToken.GetNextToken(); + SettingName.Trim(TRUE); + SettingName.Trim(FALSE); + SettingValue.Trim(TRUE); + SettingValue.Trim(FALSE); + + SubjectDataFinal.insert(std::make_pair(SettingName.ToStdString(), SettingValue.ToStdString())); + + } + + StringData.Clear(); + SettingName.Clear(); + SettingValue.Clear(); + + } + + return SubjectDataFinal; + +} + void frmSSLCertificate::LoadValueData( wxListEvent& event ) { @@ -226,15 +424,24 @@ void frmSSLCertificate::ViewCertificate( wxCommandEvent& event ) void frmSSLCertificate::CloseWindow( wxCommandEvent& event ) { + + // Close this window. + this->Close(); } void frmSSLCertificate::StartCertFrom(int StartFromInc){ + + // Start the certificate chain from the specified + // certificate number. + StartFrom = StartFromInc; } void frmSSLCertificate::CheckCertificate( wxTreeEvent& event ){ + // Check the certificate. + wxTreeItemId SelectedChild = treHierarchy->GetSelection(); SSLCertItemData *ActiveSSLData = (SSLCertItemData*)treHierarchy->GetItemData(SelectedChild);