mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
324 lines
8.2 KiB
324 lines
8.2 KiB
// KeyDView.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "KeyRing.h"
|
|
#include "MainFrm.h"
|
|
#include "keyobjs.h"
|
|
#include "KeyDView.h"
|
|
|
|
#include "machine.h"
|
|
#include "KRDoc.h"
|
|
#include "KRView.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
extern CKeyRingView* g_pTreeView;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CKeyDataView
|
|
|
|
IMPLEMENT_DYNCREATE(CKeyDataView, CFormView)
|
|
|
|
CKeyDataView::CKeyDataView()
|
|
: CFormView(CKeyDataView::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CKeyDataView)
|
|
m_szBits = _T("");
|
|
m_szCountry = _T("");
|
|
m_szName = _T("");
|
|
m_szDNNetAddress = _T("");
|
|
m_szOrganization = _T("");
|
|
m_szStatus = _T("");
|
|
m_szUnit = _T("");
|
|
m_szState = _T("");
|
|
m_szLocality = _T("");
|
|
m_szExpires = _T("");
|
|
m_szStarts = _T("");
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CKeyDataView::~CKeyDataView()
|
|
{
|
|
}
|
|
|
|
void CKeyDataView::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CFormView::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CKeyDataView)
|
|
DDX_Control(pDX, IDC_GROUP_DN, m_ctrlGroupDN);
|
|
DDX_Control(pDX, IDC_STATIC_STARTS, m_ctrlStarts);
|
|
DDX_Control(pDX, IDC_STATIC_EXPIRES, m_ctrlExpires);
|
|
DDX_Control(pDX, IDC_STATIC_STATEPROVICE, m_ctrlState);
|
|
DDX_Control(pDX, IDC_STATIC_LOCALITY, m_ctrlLocality);
|
|
DDX_Control(pDX, IDC_STATIC_UNIT, m_ctrlUnit);
|
|
DDX_Control(pDX, IDC_STATIC_ORG, m_ctrlOrg);
|
|
DDX_Control(pDX, IDC_STATIC_NETADDR, m_ctrlNetAddr);
|
|
DDX_Control(pDX, IDC_STATIC_NAME, m_ctrlStaticName);
|
|
DDX_Control(pDX, IDC_STATIC_COUNTRY, m_ctrlCountry);
|
|
DDX_Control(pDX, IDC_STATIC_BITS, m_ctrlBits);
|
|
DDX_Control(pDX, IDC_VIEWKEY_NAME, m_ctrlName);
|
|
DDX_Text(pDX, IDC_VIEWKEY_BITS, m_szBits);
|
|
DDX_Text(pDX, IDC_VIEWKEY_COUNTRY, m_szCountry);
|
|
DDX_Text(pDX, IDC_VIEWKEY_NAME, m_szName);
|
|
DDX_Text(pDX, IDC_VIEWKEY_NETADDR, m_szDNNetAddress);
|
|
DDX_Text(pDX, IDC_VIEWKEY_ORG, m_szOrganization);
|
|
DDX_Text(pDX, IDC_VIEWKEY_STATUS, m_szStatus);
|
|
DDX_Text(pDX, IDC_VIEWKEY_UNIT, m_szUnit);
|
|
DDX_Text(pDX, IDC_VIEWKEY_STATEPROVINCE, m_szState);
|
|
DDX_Text(pDX, IDC_VIEWKEY_LOCALITY, m_szLocality);
|
|
DDX_Text(pDX, IDC_VIEWKEY_EXPIRES, m_szExpires);
|
|
DDX_Text(pDX, IDC_VIEWKEY_STARTS, m_szStarts);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CKeyDataView, CFormView)
|
|
//{{AFX_MSG_MAP(CKeyDataView)
|
|
ON_EN_CHANGE(IDC_VIEWKEY_NAME, OnChangeViewkeyName)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CKeyDataView diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CKeyDataView::AssertValid() const
|
|
{
|
|
CFormView::AssertValid();
|
|
}
|
|
|
|
void CKeyDataView::Dump(CDumpContext& dc) const
|
|
{
|
|
CFormView::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CKeyDataView message handlers
|
|
|
|
//----------------------------------------------------------------------------
|
|
void CKeyDataView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
|
|
{
|
|
CKey* pKey = (CKey*)g_pTreeView->PGetSelectedItem();
|
|
|
|
// we only work on selection changes an "none" hints
|
|
switch ( lHint )
|
|
{
|
|
case HINT_None:
|
|
case HINT_ChangeSelection:
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
// if there is no selected key, bail
|
|
if ( !pKey || !pKey->IsKindOf(RUNTIME_CLASS(CKey)) )
|
|
{
|
|
EnableDataView( FALSE, FALSE );
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
EnableDataView( TRUE, TRUE );
|
|
}
|
|
|
|
// put all the string stuff into a try/catch to get mem errors
|
|
try
|
|
{
|
|
ASSERT( pKey );
|
|
ASSERT( pKey->IsKindOf(RUNTIME_CLASS(CKey)) );
|
|
|
|
// set the character strings
|
|
m_szName = pKey->GetName();
|
|
|
|
// get certificate specific info directly out of the certifiect
|
|
FillInCrackedInfo( pKey );
|
|
|
|
// if this key is not completed, disable the button altogether
|
|
if ( !pKey->m_pCertificate )
|
|
// the item is not completed
|
|
{
|
|
EnableDataView( FALSE, TRUE );
|
|
m_szStatus.LoadString(IDS_KEY_STATUS_INCOMPLETE);
|
|
}
|
|
|
|
// set the data into the form
|
|
UpdateData( FALSE );
|
|
}
|
|
catch( CException e )
|
|
{
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void CKeyDataView::OnChangeViewkeyName()
|
|
{
|
|
CKey* pKey = (CKey*)g_pTreeView->PGetSelectedItem();
|
|
if ( !pKey || !pKey->IsKindOf(RUNTIME_CLASS(CKey)) )
|
|
{
|
|
ASSERT( FALSE );
|
|
return;
|
|
}
|
|
|
|
// get the data from the form
|
|
UpdateData( TRUE );
|
|
pKey->SetName( m_szName );
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void CKeyDataView::EnableDataView( BOOL fEnable, BOOL fEnableName )
|
|
{
|
|
// enable the name seperately from the rest
|
|
if ( fEnableName )
|
|
{
|
|
m_ctrlName.EnableWindow( TRUE );
|
|
m_ctrlStaticName.EnableWindow( TRUE );
|
|
}
|
|
else
|
|
{
|
|
m_szName.Empty();
|
|
m_ctrlName.EnableWindow( FALSE );
|
|
m_ctrlStaticName.EnableWindow( FALSE );
|
|
}
|
|
|
|
// do the right thing. (wasn't a bad movie)
|
|
if ( fEnable )
|
|
{
|
|
// enable what needs to be enabled. The DoUpdate routine takes care of the rest
|
|
m_ctrlGroupDN.EnableWindow( TRUE );
|
|
m_ctrlUnit.EnableWindow( TRUE );
|
|
m_ctrlUnit.EnableWindow( TRUE );
|
|
m_ctrlNetAddr.EnableWindow( TRUE );
|
|
m_ctrlCountry.EnableWindow( TRUE );
|
|
m_ctrlState.EnableWindow( TRUE );
|
|
m_ctrlLocality.EnableWindow( TRUE );
|
|
m_ctrlBits.EnableWindow( TRUE );
|
|
m_ctrlOrg.EnableWindow( TRUE );
|
|
m_ctrlExpires.EnableWindow( TRUE );
|
|
m_ctrlStarts.EnableWindow( TRUE );
|
|
}
|
|
else
|
|
// disabling the window
|
|
{
|
|
// empty the information strings
|
|
m_szCountry.Empty();
|
|
m_szState.Empty();
|
|
m_szLocality.Empty();
|
|
m_szDNNetAddress.Empty();
|
|
m_szOrganization.Empty();
|
|
m_szUnit.Empty();
|
|
m_szBits.Empty();
|
|
m_szExpires.Empty();
|
|
m_szStarts.Empty();
|
|
|
|
// set the status string
|
|
m_szStatus.LoadString(IDS_MACHINE_SELECTED);
|
|
|
|
// set the data into the form
|
|
UpdateData( FALSE );
|
|
|
|
// disable everything
|
|
m_ctrlGroupDN.EnableWindow( FALSE );
|
|
m_ctrlUnit.EnableWindow( FALSE );
|
|
m_ctrlOrg.EnableWindow( FALSE );
|
|
m_ctrlNetAddr.EnableWindow( FALSE );
|
|
m_ctrlCountry.EnableWindow( FALSE );
|
|
m_ctrlState.EnableWindow( FALSE );
|
|
m_ctrlLocality.EnableWindow( FALSE );
|
|
m_ctrlBits.EnableWindow( FALSE );
|
|
m_ctrlExpires.EnableWindow( FALSE );
|
|
m_ctrlStarts.EnableWindow( FALSE );
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void CKeyDataView::FillInCrackedInfo( CKey* pKey )
|
|
{
|
|
CKeyCrackedData cracker;
|
|
|
|
// crack the key
|
|
if ( !cracker.CrackKey(pKey) )
|
|
return;
|
|
|
|
// fill in the distinguishing information
|
|
cracker.GetDNCountry( m_szCountry );
|
|
cracker.GetDNState( m_szState );
|
|
cracker.GetDNLocality( m_szLocality );
|
|
cracker.GetDNNetAddress( m_szDNNetAddress );
|
|
cracker.GetDNOrganization( m_szOrganization );
|
|
cracker.GetDNUnit( m_szUnit );
|
|
|
|
// set the bit length
|
|
DWORD nBits = cracker.GetBitLength();
|
|
if ( nBits )
|
|
m_szBits.Format( "%d", nBits );
|
|
else
|
|
m_szBits.LoadString( IDS_KEY_UNKNOWN );
|
|
|
|
// get the dates
|
|
FILETIME timeStart = cracker.GetValidFrom();
|
|
FILETIME timeEnd = cracker.GetValidUntil();
|
|
|
|
// set the start date string
|
|
CTime ctimeStart( timeStart );
|
|
m_szStarts = ctimeStart.Format( IDS_EXPIRETIME_FORMAT );
|
|
|
|
// set the end date string
|
|
CTime ctimeEnd( timeEnd );
|
|
m_szExpires = ctimeEnd.Format( IDS_EXPIRETIME_FORMAT );
|
|
|
|
// get the current time
|
|
CTime ctimeCurrent = CTime::GetCurrentTime();
|
|
|
|
#ifdef _DEBUG
|
|
CString szTest = ctimeCurrent.Format( IDS_EXPIRETIME_FORMAT );
|
|
#endif
|
|
|
|
// get the expire soon test time - current time plus two weeks
|
|
CTimeSpan ctsSoonSpan(14,0,0,0); // two weeks
|
|
CTime ctimeSoon = ctimeCurrent + ctsSoonSpan;
|
|
|
|
#ifdef _DEBUG
|
|
szTest = ctimeSoon.Format( IDS_EXPIRETIME_FORMAT );
|
|
#endif
|
|
|
|
// test if it has expired first
|
|
if ( ctimeCurrent > ctimeEnd )
|
|
{
|
|
m_szStatus.LoadString(IDS_KEY_STATUS_EXPIRED);
|
|
}
|
|
else if ( ctimeSoon > ctimeEnd )
|
|
{
|
|
// well then does it expire soon?
|
|
m_szStatus.LoadString(IDS_KEY_STATUS_EXPIRES_SOON);
|
|
}
|
|
else
|
|
{
|
|
// that must mean it is ok
|
|
m_szStatus.LoadString(IDS_KEY_STATUS_COMPLETE);
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
BOOL CKeyDataView::PreTranslateMessage(MSG* pMsg)
|
|
{
|
|
// The user pushes the tab button, send the focus back to the tree view
|
|
if ( pMsg->message == WM_KEYDOWN )
|
|
{
|
|
int nVirtKey = (int) pMsg->wParam;
|
|
if ( nVirtKey == VK_TAB )
|
|
{
|
|
// get the parental frame window
|
|
CMainFrame* pFrame = (CMainFrame*)GetParentFrame();
|
|
// give the data view the focus
|
|
pFrame->SetActiveView( g_pTreeView );
|
|
return TRUE;
|
|
}
|
|
}
|
|
return CFormView::PreTranslateMessage(pMsg);
|
|
}
|