// ServerPage4.cpp : 実装ファイル
//

#include "stdafx.h"
#include "ServerController.h"
#include "ServerPage4.h"
#include "FileSelectDialog.h"
#include "KeyGenDialog.h"


// CServerPage4 ダイアログ

IMPLEMENT_DYNAMIC(CServerPage4, CPropertyPage)
CServerPage4::CServerPage4()
	: CPropertyPage(CServerPage4::IDD)
	, m_enable(FALSE)
	, m_port(0)
	, m_key(_T(""))
	, m_pass(_T(""))
	, m_ca(_T(""))
{
}

CServerPage4::~CServerPage4()
{
}

void CServerPage4::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	DDX_Check(pDX, IDC_ENABLE, m_enable);
	DDX_Text(pDX, IDC_PORT, m_port);
	DDV_MinMaxUInt(pDX, m_port, 0, 65535);
	DDX_Text(pDX, IDC_KEY, m_key);
	DDX_Text(pDX, IDC_PASS, m_pass);
	DDX_Text(pDX, IDC_CA, m_ca);
}


BEGIN_MESSAGE_MAP(CServerPage4, CPropertyPage)
	ON_BN_CLICKED(IDC_MAKE, OnBnClickedMake)
	ON_BN_CLICKED(IDC_BROWS1, OnBnClickedBrows1)
	ON_BN_CLICKED(IDC_BROWS2, OnBnClickedBrows2)
END_MESSAGE_MAP()


// CServerPage4 メッセージ ハンドラ

void CServerPage4::OnBnClickedMake()
{
	CKeyGenDialog	gen;
	gen.DoModal();
}

void CServerPage4::OnBnClickedBrows1()
{
	UpdateData();

	CFileSelectDialog	sel(m_hWnd);
	sel.AddExt("*.pem","PEMファイル (*.pem)");
	sel.AddExt("*.*","全てのファイル (*.*)");

	if(sel.OpenFile() == IDOK)
		m_key = sel.GetFilePath();

	UpdateData(FALSE);
}

void CServerPage4::OnBnClickedBrows2()
{
	UpdateData();

	CFileSelectDialog	sel(m_hWnd);
	sel.AddExt("*.crt","CRTファイル (*.crt)");
	sel.AddExt("*.pem","PEMファイル (*.pem)");
	sel.AddExt("*.*","全てのファイル (*.*)");

	if(sel.OpenFile() == IDOK)
		m_ca = sel.GetFilePath();

	UpdateData(FALSE);
}



BOOL CServerPage4::OnInitDialog()
{
	CPropertyPage::OnInitDialog();

	CWorkspaceAccess	basic = GET_APP()->m_setting.GetAccess("Basic");
	CWorkspaceAccess	ssl = GET_APP()->m_setting.GetAccess("SSL");

	m_enable = basic.GetConfig("EnableSSL",0);
	m_port = ssl.GetConfig("Port",443);
	m_key = ssl.GetConfig("PrivateKey","%ServerRoot%SSLKey\\04WebServer.pem");
	m_pass = ssl.GetConfig("Password","test");
	m_ca = ssl.GetConfig("Certificate","%ServerRoot%SSLKey\\04WebServer.crt");

	UpdateData(FALSE);

	return TRUE;  // return TRUE unless you set the focus to a control
	// 例外 : OCX プロパティ ページは必ず FALSE を返します。
}

BOOL CServerPage4::OnKillActive()
{
	CWorkspaceAccess	basic = GET_APP()->m_setting.GetAccess("Basic");
	CWorkspaceAccess	ssl = GET_APP()->m_setting.GetAccess("SSL");

	UpdateData(TRUE);
	basic.SetConfig("EnableSSL",m_enable);
	ssl.SetConfig("Port",m_port);
	ssl.SetConfig("PrivateKey",m_key);
	ssl.SetConfig("Password",m_pass);
	ssl.SetConfig("Certificate",m_ca);

	return CPropertyPage::OnKillActive();
}
