159 lines
3.8 KiB
C++
159 lines
3.8 KiB
C++
// ImprtDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "keyring.h"
|
|
#include "ImprtDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CImportDialog dialog
|
|
|
|
|
|
CImportDialog::CImportDialog(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CImportDialog::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CImportDialog)
|
|
m_cstring_CertFile = _T("");
|
|
m_cstring_PrivateFile = _T("");
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CImportDialog::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CImportDialog)
|
|
DDX_Control(pDX, IDC_PRIVATE_FILE, m_cedit_Private);
|
|
DDX_Control(pDX, IDC_CERT_FILE, m_cedit_Cert);
|
|
DDX_Text(pDX, IDC_CERT_FILE, m_cstring_CertFile);
|
|
DDX_Text(pDX, IDC_PRIVATE_FILE, m_cstring_PrivateFile);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CImportDialog, CDialog)
|
|
//{{AFX_MSG_MAP(CImportDialog)
|
|
ON_BN_CLICKED(IDC_BROWSE_CERT, OnBrowseCert)
|
|
ON_BN_CLICKED(IDC_BROWSE_PRIVATE, OnBrowsePrivate)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CImportDialog message handlers
|
|
|
|
//------------------------------------------------------------------------------
|
|
void CImportDialog::OnBrowseCert()
|
|
{
|
|
UpdateData(TRUE);
|
|
if ( FBrowseForAFile( m_cstring_CertFile, TRUE ) )
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void CImportDialog::OnBrowsePrivate()
|
|
{
|
|
UpdateData(TRUE);
|
|
if ( FBrowseForAFile( m_cstring_PrivateFile, FALSE ) )
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
// go browsing for a file
|
|
//------------------------------------------------------------------------------
|
|
BOOL CImportDialog::FBrowseForAFile( CString &szFile, BOOL fBrowseForCertificate )
|
|
{
|
|
CString szFilter;
|
|
CString szTitle;
|
|
CString szFileStart = szFile;
|
|
WORD i = 0;
|
|
LPSTR lpszBuffer;
|
|
BOOL fAnswer = FALSE;
|
|
|
|
// set up to look for either certs or private keys
|
|
if ( fBrowseForCertificate )
|
|
{
|
|
szFilter.LoadString( IDS_CERTIFICATE_FILTER );
|
|
szTitle.LoadString( IDS_OPEN_PUBLIC_KEY );
|
|
}
|
|
else
|
|
{
|
|
szFilter.LoadString( IDS_PRIVATE_FILE_TYPE );
|
|
szTitle.LoadString( IDS_OPEN_PRIVATE_KEY );
|
|
}
|
|
|
|
// prep the dialog
|
|
CFileDialog cfdlg(TRUE );
|
|
|
|
// replace the "!" characters with nulls
|
|
lpszBuffer = szFilter.GetBuffer(MAX_PATH+1);
|
|
while( lpszBuffer[i] )
|
|
{
|
|
if ( lpszBuffer[i] == _T('!') )
|
|
lpszBuffer[i] = _T('\0'); // yes, set \0 on purpose
|
|
i++;
|
|
}
|
|
cfdlg.m_ofn.lpstrFilter = lpszBuffer;
|
|
|
|
// finish prepping the title
|
|
cfdlg.m_ofn.lpstrTitle = szTitle.GetBuffer(MAX_PATH+1);
|
|
|
|
// finish prepping the starting location
|
|
cfdlg.m_ofn.lpstrFile = szFileStart.GetBuffer(MAX_PATH+1);
|
|
|
|
|
|
// run the dialog
|
|
if ( cfdlg.DoModal() == IDOK )
|
|
{
|
|
fAnswer = TRUE;
|
|
szFile = cfdlg.GetPathName();
|
|
}
|
|
|
|
// release the buffer in the filter string
|
|
szFilter.ReleaseBuffer();
|
|
szTitle.ReleaseBuffer();
|
|
szFileStart.ReleaseBuffer();
|
|
|
|
// return the answer
|
|
return fAnswer;
|
|
}
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
void CImportDialog::OnOK()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
// make sure the user has chosen two valid files
|
|
CFile cfile;
|
|
|
|
// test the private key file
|
|
if ( !cfile.Open( m_cstring_PrivateFile, CFile::modeRead|CFile::shareDenyNone ) )
|
|
{
|
|
// beep and select the bad field
|
|
MessageBeep(0);
|
|
m_cedit_Private.SetFocus();
|
|
m_cedit_Private.SetSel(0xFFFF0000);
|
|
return;
|
|
}
|
|
cfile.Close();
|
|
|
|
// test the certificate file
|
|
if ( !cfile.Open( m_cstring_CertFile, CFile::modeRead|CFile::shareDenyNone ) )
|
|
{
|
|
// beep and select the bad field
|
|
MessageBeep(0);
|
|
m_cedit_Cert.SetFocus();
|
|
m_cedit_Cert.SetSel(0xFFFF0000);
|
|
return;
|
|
}
|
|
cfile.Close();
|
|
|
|
// all is ok. do the normal ok
|
|
CDialog::OnOK();
|
|
}
|