|
|
//
// CertContentsPages.cpp
//
#include "stdafx.h"
#include "resource.h"
#include "CertContentsPages.h"
#include "Certificat.h"
#include "CertUtil.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
////////////////////// Local helper functions ////////////////////////
static void AppendField(CString& str, UINT id, const CString& text) { CString strName; if (!text.IsEmpty()) { if (strName.LoadString(id)) { str += strName; str += _T("\t"); str += text; str += _T("\r\n"); } } }
static void FormatCertDescription(CERT_DESCRIPTION& desc, CString& str) { AppendField(str, IDS_ISSUED_TO, desc.m_CommonName); AppendField(str, IDS_ISSUED_BY, desc.m_CAName); AppendField(str, IDS_EXPIRATION_DATE, desc.m_ExpirationDate); AppendField(str, IDS_PURPOSE, desc.m_Usage); AppendField(str, IDS_FRIENDLY_NAME, desc.m_FriendlyName); AppendField(str, IDS_COUNTRY, desc.m_Country); AppendField(str, IDS_STATE, desc.m_State); AppendField(str, IDS_LOCALITY, desc.m_Locality); AppendField(str, IDS_ORGANIZATION, desc.m_Organization); AppendField(str, IDS_ORGANIZATION_UNIT, desc.m_OrganizationUnit); }
#if 0
static void FormatCertContactInfo(CCertificate * pCert, CString& str) { AppendField(str, IDS_CONTACT_NAME, pCert->m_ContactName); AppendField(str, IDS_CONTACT_ADDRESS, pCert->m_ContactAddress); CString strPhone = pCert->m_ContactPhone; if (!pCert->m_ContactPhoneExt.IsEmpty()) { strPhone += _T("x"); strPhone += pCert->m_ContactPhoneExt; } AppendField(str, IDS_CONTACT_PHONE, strPhone); } #endif
static BOOL ExtractDescription(CCertificate * pCert, CERT_DESCRIPTION& cd) { ASSERT(pCert != NULL); cd.m_CommonName = pCert->m_CommonName; cd.m_FriendlyName = pCert->m_FriendlyName; cd.m_Country = pCert->m_Country; cd.m_State = pCert->m_State; cd.m_Locality = pCert->m_Locality; cd.m_Organization = pCert->m_Organization; cd.m_OrganizationUnit = pCert->m_OrganizationUnit; return TRUE; }
/////////////////////////////////////////////////////////////////////////////
// CCertContentsPage base property page
IMPLEMENT_DYNCREATE(CCertContentsPage, CIISWizardPage)
CCertContentsPage::CCertContentsPage(UINT id, CCertificate * pCert) : CIISWizardPage(id, IDS_CERTWIZ, TRUE), m_pCert(pCert) { ASSERT(id != 0); }
CCertContentsPage::~CCertContentsPage() { }
void CCertContentsPage::DoDataExchange(CDataExchange* pDX) { CIISWizardPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCertContentsPage)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCertContentsPage, CIISWizardPage) //{{AFX_MSG_MAP(CCertContentsPage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// OnSetActive we format cert contents and put it to edit
// control with predefined ID. We should do it here, because
// if user will get back and reselect certificate, text should
// also be changed
//
BOOL CCertContentsPage::OnSetActive() { CERT_DESCRIPTION cd; if (CIISWizardPage::OnSetActive()) { // If page defines GetCertDescription() then it want this
// data to be displayed
if (GetCertDescription(cd)) { ASSERT(NULL != GetDlgItem(IDC_CERT_CONTENTS)); CString str; FormatCertDescription(cd, str); GetDlgItem(IDC_CERT_CONTENTS)->SetWindowText(str); } return TRUE; } return FALSE; }
BOOL CCertContentsPage::OnInitDialog() { ASSERT(m_pCert != NULL); CIISWizardPage::OnInitDialog(); ASSERT(NULL != GetDlgItem(IDC_CERT_CONTENTS)); CEdit * pEdit = (CEdit *)CWnd::FromHandle(GetDlgItem(IDC_CERT_CONTENTS)->m_hWnd); CRect rcEdit; pEdit->GetClientRect(&rcEdit); int baseunitX = LOWORD(GetDialogBaseUnits()); int width_units = MulDiv(rcEdit.Width(), 4, baseunitX); //pEdit->SetTabStops(MulDiv(45, width_units, 100));
pEdit->SetTabStops(width_units/2); return TRUE; }
////////////////////////////////////////////////////////////////////////////////////////
// CInstallCertPage
IMPLEMENT_DYNCREATE(CInstallCertPage, CCertContentsPage)
BOOL CInstallCertPage::GetCertDescription(CERT_DESCRIPTION& cd) { return GetCertificate()->GetSelectedCertDescription(cd); }
LRESULT CInstallCertPage::OnWizardNext() { GetCertificate()->InstallSelectedCert(); return IDD_PAGE_NEXT; }
////////////////////////////////////////////////////////////////////////////////////////
// CReplaceCertPage
IMPLEMENT_DYNCREATE(CReplaceCertPage, CCertContentsPage)
BOOL CReplaceCertPage::GetCertDescription(CERT_DESCRIPTION& cd) { return GetCertificate()->GetSelectedCertDescription(cd); }
LRESULT CReplaceCertPage::OnWizardNext() { GetCertificate()->InstallSelectedCert(); return IDD_PAGE_NEXT; }
////////////////////////////////////////////////////////////////////////////////////////
// CInstallKeyPage
IMPLEMENT_DYNCREATE(CInstallKeyPage, CCertContentsPage)
BOOL CInstallKeyPage::OnSetActive() { ASSERT(NULL != GetDlgItem(IDC_CERT_CONTENTS)); ASSERT(NULL != GetDlgItem(IDC_FILE_NAME)); if (CCertContentsPage::OnSetActive()) { CString strPath = GetCertificate()->m_KeyFileName; CompactPathToWidth(GetDlgItem(IDC_FILE_NAME), strPath); SetDlgItemText(IDC_FILE_NAME, strPath); return TRUE; } return FALSE; }
BOOL CInstallKeyPage::GetCertDescription(CERT_DESCRIPTION& cd) { return GetCertificate()->GetKeyCertDescription(cd); }
LRESULT CInstallKeyPage::OnWizardNext() { GetCertificate()->InstallKeyRingCert(); return IDD_PAGE_NEXT; }
////////////////////////////////////////////////////////////////////////////////////////
// CInstallImportPFXPage
IMPLEMENT_DYNCREATE(CInstallImportPFXPage, CCertContentsPage)
BOOL CInstallImportPFXPage::OnSetActive() { ASSERT(NULL != GetDlgItem(IDC_CERT_CONTENTS)); ASSERT(NULL != GetDlgItem(IDC_FILE_NAME)); if (CCertContentsPage::OnSetActive()) { CString strPath = GetCertificate()->m_KeyFileName; CompactPathToWidth(GetDlgItem(IDC_FILE_NAME), strPath); SetDlgItemText(IDC_FILE_NAME, strPath); return TRUE; } return FALSE; }
BOOL CInstallImportPFXPage::GetCertDescription(CERT_DESCRIPTION& cd) { return GetCertificate()->GetPFXFileCertDescription(cd); }
LRESULT CInstallImportPFXPage::OnWizardNext() { GetCertificate()->InstallImportPFXCert(); return IDD_PAGE_NEXT; }
////////////////////////////////////////////////////////////////////////////////////////
// CInstallExportPFXPage
IMPLEMENT_DYNCREATE(CInstallExportPFXPage, CCertContentsPage)
BOOL CInstallExportPFXPage::OnSetActive() { ASSERT(NULL != GetDlgItem(IDC_CERT_CONTENTS)); ASSERT(NULL != GetDlgItem(IDC_FILE_NAME)); if (CCertContentsPage::OnSetActive()) { CString strPath = GetCertificate()->m_KeyFileName; CompactPathToWidth(GetDlgItem(IDC_FILE_NAME), strPath); SetDlgItemText(IDC_FILE_NAME, strPath); return TRUE; } return FALSE; }
BOOL CInstallExportPFXPage::GetCertDescription(CERT_DESCRIPTION& cd) { //return GetCertificate()->GetKeyCertDescription(cd);
return GetCertificate()->GetInstalledCertDescription(cd); }
LRESULT CInstallExportPFXPage::OnWizardNext() { GetCertificate()->InstallExportPFXCert(); return IDD_PAGE_NEXT; }
////////////////////////////////////////////////////////////////////////////////////////
// CInstallRespPage
IMPLEMENT_DYNCREATE(CInstallRespPage, CCertContentsPage)
BOOL CInstallRespPage::OnSetActive() { ASSERT(NULL != GetDlgItem(IDC_CERT_CONTENTS)); ASSERT(NULL != GetDlgItem(IDC_FILE_NAME)); if (CCertContentsPage::OnSetActive()) { CString strPath = GetCertificate()->m_RespFileName; CompactPathToWidth(GetDlgItem(IDC_FILE_NAME), strPath); SetDlgItemText(IDC_FILE_NAME, strPath); return TRUE; } return FALSE; }
BOOL CInstallRespPage::GetCertDescription(CERT_DESCRIPTION& cd) { return GetCertificate()->GetResponseCertDescription(cd); }
LRESULT CInstallRespPage::OnWizardNext() { GetCertificate()->InstallResponseCert(); return IDD_PAGE_NEXT; }
////////////////////////////////////////////////////////////////////////////////////////
// CRemoveCertPage
IMPLEMENT_DYNCREATE(CRemoveCertPage, CCertContentsPage)
static BOOL AnswerIsYes2(UINT id, CString& file) { CString strMessage; AfxFormatString1(strMessage, id, file); return (IDYES == AfxMessageBox(strMessage, MB_ICONEXCLAMATION | MB_YESNO)); }
BOOL CRemoveCertPage::GetCertDescription(CERT_DESCRIPTION& cd) { CCertificate * pCert = GetCertificate(); ASSERT(NULL != pCert); return pCert->GetInstalledCertDescription(cd); }
LRESULT CRemoveCertPage::OnWizardNext() { CCertificate * pCert = GetCertificate(); ASSERT(NULL != pCert); int iReallyRemoveCert = FALSE; int iTheReturn = 1;
CStringList listNodesUsingThisCert;
// check if this cert is being used first...
IsCertUsedBySSLBelowMe(pCert->m_MachineName,pCert->m_WebSiteInstanceName,listNodesUsingThisCert); if (listNodesUsingThisCert.IsEmpty()) { iReallyRemoveCert = TRUE; } else { // if the cert is being used, then
// don't let them remove it
CString csStringCount; csStringCount.Format(_T("%d"), listNodesUsingThisCert.GetCount()); if (TRUE == AnswerIsYes2(IDS_CERT_BEING_USED, csStringCount)) { iReallyRemoveCert = TRUE; } else { iTheReturn = 1; } }
if (iReallyRemoveCert) { // go ahead and remove the cert
if ( FAILED(pCert->UninstallCert()) || FAILED(ShutdownSSL(pCert->m_MachineName, pCert->m_WebSiteInstanceName)) ) { GetCertificate()->SetBodyTextID(IDS_REMOVE_CERT_FAILED); } iTheReturn = IDD_PAGE_NEXT; }
return iTheReturn; }
////////////////////////////////////////////////////////////////////////////////////////
// CRequestCancelPage
IMPLEMENT_DYNCREATE(CRequestCancelPage, CCertContentsPage)
//
// In this case we should get request from the dummy cert in REQUEST store,
// because we dropping request without any connection to response.
//
BOOL CRequestCancelPage::GetCertDescription(CERT_DESCRIPTION& cd) { return FALSE; }
LRESULT CRequestCancelPage::OnWizardNext() { GetCertificate()->CancelRequest(); return IDD_PAGE_NEXT; }
/////////////////////////////////////////////////////////////////////////////
// CRequestToFilePage property page
IMPLEMENT_DYNCREATE(CRequestToFilePage, CCertContentsPage)
// This page prepares and shows contents itself
// We should format contact info first, then description
// default method could do only description
//
BOOL CRequestToFilePage::OnSetActive() { if (CCertContentsPage::OnSetActive()) { ASSERT(GetCertificate() != NULL); ASSERT(GetDlgItem(IDC_CERT_CONTENTS) != NULL); ASSERT(GetDlgItem(IDC_FILE_NAME) != NULL);
if (GetCertificate()->GetStatusCode() == CCertificate::REQUEST_RENEW_CERT) { GetCertificate()->LoadRenewalData(); } CString str; // FormatCertContactInfo(m_pCert, str);
CERT_DESCRIPTION cd; ExtractDescription(GetCertificate(), cd); FormatCertDescription(cd, str); SetDlgItemText(IDC_CERT_CONTENTS, str); CString strPath = m_pCert->m_ReqFileName; CompactPathToWidth(GetDlgItem(IDC_FILE_NAME), strPath); SetDlgItemText(IDC_FILE_NAME, strPath);
return TRUE; } return FALSE; }
LRESULT CRequestToFilePage::OnWizardNext() { GetCertificate()->PrepareRequest(); return IDD_PAGE_NEXT; }
/////////////////////////////////////////////////////////////////////////////
// CRequestToFilePageRenew property page
IMPLEMENT_DYNCREATE(CRequestToFilePageRenew, CCertContentsPage)
// This page prepares and shows contents itself
// We should format contact info first, then description
// default method could do only description
//
BOOL CRequestToFilePageRenew::OnSetActive() { if (CCertContentsPage::OnSetActive()) { ASSERT(GetCertificate() != NULL); ASSERT(GetDlgItem(IDC_CERT_CONTENTS) != NULL); ASSERT(GetDlgItem(IDC_FILE_NAME) != NULL);
if (GetCertificate()->GetStatusCode() == CCertificate::REQUEST_RENEW_CERT) { GetCertificate()->LoadRenewalData(); } CString str; // FormatCertContactInfo(m_pCert, str);
CERT_DESCRIPTION cd; ExtractDescription(GetCertificate(), cd); FormatCertDescription(cd, str); SetDlgItemText(IDC_CERT_CONTENTS, str); CString strPath = m_pCert->m_ReqFileName; CompactPathToWidth(GetDlgItem(IDC_FILE_NAME), strPath); SetDlgItemText(IDC_FILE_NAME, strPath);
return TRUE; } return FALSE; }
LRESULT CRequestToFilePageRenew::OnWizardNext() { GetCertificate()->PrepareRequest(); return IDD_PAGE_NEXT; }
/////////////////////////////////////////////////////////////////////////////
// COnlineRequestSubmit property page
IMPLEMENT_DYNCREATE(COnlineRequestSubmit, CCertContentsPage)
BOOL COnlineRequestSubmit::GetCertDescription(CERT_DESCRIPTION& cd) { // we have all data in CCertificate
return ExtractDescription(GetCertificate(), cd); }
LRESULT COnlineRequestSubmit::OnWizardNext() { LRESULT id = IDD_PAGE_NEXT; BeginWaitCursor(); if (GetCertificate()->GetStatusCode() == CCertificate::REQUEST_RENEW_CERT) GetCertificate()->SubmitRenewalRequest(); else if (m_pCert->GetStatusCode() == CCertificate::REQUEST_NEW_CERT) GetCertificate()->SubmitRequest(); else id = 1; EndWaitCursor(); return id; }
BOOL COnlineRequestSubmit::OnSetActive() { ASSERT(GetCertificate() != NULL); ASSERT(GetDlgItem(IDC_CA_NAME) != NULL); ASSERT(GetDlgItem(IDC_CA_NAME2) != NULL); if (CCertContentsPage::OnSetActive()) { CString csTemp1; // Make it look good
csTemp1 = GetCertificate()->m_ConfigCA; int iFind = csTemp1.Find(_T("\\")); if (iFind != -1) { int iLength = csTemp1.GetLength(); CString csTemp2;
csTemp2 = csTemp1.Left(iFind); SetDlgItemText(IDC_CA_NAME, csTemp2);
csTemp2 = csTemp1.Right(iLength - iFind - 1); SetDlgItemText(IDC_CA_NAME2, csTemp2); } else { SetDlgItemText(IDC_CA_NAME, csTemp1); }
return TRUE; } return FALSE; }
////////////////////////////////////////////////////////////////////////////////////////
// CInstallCopyFromRemotePage
IMPLEMENT_DYNCREATE(CInstallCopyFromRemotePage, CCertContentsPage)
BOOL CInstallCopyFromRemotePage::GetCertDescription(CERT_DESCRIPTION& cd) { return GetCertificate()->GetPFXFileCertDescription(cd); }
LRESULT CInstallCopyFromRemotePage::OnWizardNext() { GetCertificate()->InstallCopyMoveFromRemote(); return IDD_PAGE_NEXT; }
////////////////////////////////////////////////////////////////////////////////////////
// CInstallMoveFromRemotePage
IMPLEMENT_DYNCREATE(CInstallMoveFromRemotePage, CCertContentsPage)
BOOL CInstallMoveFromRemotePage::GetCertDescription(CERT_DESCRIPTION& cd) { return GetCertificate()->GetPFXFileCertDescription(cd); }
LRESULT CInstallMoveFromRemotePage::OnWizardNext() { GetCertificate()->InstallCopyMoveFromRemote(); return IDD_PAGE_NEXT; }
////////////////////////////////////////////////////////////////////////////////////////
// CInstallCopyFromRemotePage
IMPLEMENT_DYNCREATE(CInstallCopyToRemotePage, CCertContentsPage)
BOOL CInstallCopyToRemotePage::GetCertDescription(CERT_DESCRIPTION& cd) { return GetCertificate()->GetInstalledCertDescription(cd); }
LRESULT CInstallCopyToRemotePage::OnWizardNext() { GetCertificate()->InstallCopyMoveToRemote(); return IDD_PAGE_NEXT; }
////////////////////////////////////////////////////////////////////////////////////////
// CInstallMoveFromRemotePage
IMPLEMENT_DYNCREATE(CInstallMoveToRemotePage, CCertContentsPage)
BOOL CInstallMoveToRemotePage::GetCertDescription(CERT_DESCRIPTION& cd) { return GetCertificate()->GetInstalledCertDescription(cd); }
LRESULT CInstallMoveToRemotePage::OnWizardNext() { GetCertificate()->InstallCopyMoveToRemote(); return IDD_PAGE_NEXT; }
|