Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
319 lines
8.6 KiB
C++
319 lines
8.6 KiB
C++
// AuthGamaDlg.cpp : ±¸Çö ÆÄÀÏ
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "AuthGama.h"
|
||
#include "AuthGamaDlg.h"
|
||
#include <Utility/Setup/ServerSetup.h>
|
||
#include <Log/ServerLog.h>
|
||
#include <DB/DBComponent.h>
|
||
#include <DB/AuthDBComponent.h>
|
||
|
||
extern "C"
|
||
{
|
||
#include <MD5/global.h>
|
||
#include <MD5/md5.h>
|
||
#include ".\authgamadlg.h"
|
||
}
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#endif
|
||
|
||
|
||
// CAuthGamaDlg ´ëÈ »óÀÚ
|
||
static void MD5Print (unsigned char digest[16], char *szOutput)
|
||
{
|
||
for (unsigned int i = 0; i < 16; i++)
|
||
{
|
||
sprintf (szOutput + i * 2, "%02x", digest[i]);
|
||
}
|
||
}
|
||
|
||
static void MD5String (char *szString, char* szOutput)
|
||
{
|
||
MD5_CTX context;
|
||
unsigned char digest[16];
|
||
unsigned int len = static_cast<unsigned int>(strlen(szString));
|
||
|
||
MD5Init (&context);
|
||
MD5Update (&context, reinterpret_cast<unsigned char*>(szString), len);
|
||
MD5Final (digest, &context);
|
||
MD5Print (digest, szOutput);
|
||
}
|
||
|
||
|
||
CAuthGamaDlg::CAuthGamaDlg(CWnd* pParent /*=NULL*/)
|
||
: CDialog(CAuthGamaDlg::IDD, pParent)
|
||
, m_szAuthAccount(_T(""))
|
||
, m_szAuthPassword(_T(""))
|
||
, m_szAuthResult(_T(""))
|
||
, m_szMD5Password(_T(""))
|
||
, m_szMD5HashVal(_T(""))
|
||
, m_szFindUID(_T(""))
|
||
, m_szFindAccount(_T(""))
|
||
, m_szFoundUID(_T(""))
|
||
, m_szFoundAccount(_T(""))
|
||
{
|
||
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
||
}
|
||
|
||
void CAuthGamaDlg::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CDialog::DoDataExchange(pDX);
|
||
DDX_Text(pDX, IDC_AUTH_USER, m_szAuthAccount);
|
||
DDX_Text(pDX, IDC_AUTH_PASSWD, m_szAuthPassword);
|
||
DDX_Text(pDX, IDC_AUTH_RESULT, m_szAuthResult);
|
||
DDX_Text(pDX, IDC_MD5_PASSWORD, m_szMD5Password);
|
||
DDX_Text(pDX, IDC_MD5_HASHVAL, m_szMD5HashVal);
|
||
DDX_Text(pDX, IDC_UID_IN, m_szFindUID);
|
||
DDX_Text(pDX, IDC_ACCOUNT_IN, m_szFindAccount);
|
||
DDX_Text(pDX, IDC_UID_OUT, m_szFoundUID);
|
||
DDX_Text(pDX, IDC_ACCOUNT_OUT, m_szFoundAccount);
|
||
DDX_Control(pDX, IDC_AUTH_BTN, m_btnAuth);
|
||
DDX_Control(pDX, IDC_MD5_CONVERT_BTN, m_btnMD5);
|
||
DDX_Control(pDX, IDC_FIND_BTN, m_btnFind);
|
||
}
|
||
|
||
BEGIN_MESSAGE_MAP(CAuthGamaDlg, CDialog)
|
||
ON_WM_PAINT()
|
||
ON_WM_QUERYDRAGICON()
|
||
//}}AFX_MSG_MAP
|
||
ON_BN_CLICKED(IDC_DB_CONNECT, OnBnClickedDbConnect)
|
||
ON_BN_CLICKED(IDC_AUTH_BTN, OnBnClickedAuthBtn)
|
||
ON_BN_CLICKED(IDC_MD5_CONVERT_BTN, OnBnClickedMd5ConvertBtn)
|
||
ON_BN_CLICKED(IDC_FIND_BTN, OnBnClickedFindBtn)
|
||
ON_EN_CHANGE(IDC_ACCOUNT_IN, OnEnChangeAccountIn)
|
||
ON_EN_CHANGE(IDC_UID_IN, OnEnChangeUidIn)
|
||
END_MESSAGE_MAP()
|
||
|
||
|
||
// CAuthGamaDlg ¸Þ½ÃÁö 󸮱â
|
||
|
||
BOOL CAuthGamaDlg::OnInitDialog()
|
||
{
|
||
CDialog::OnInitDialog();
|
||
|
||
// ÀÌ ´ëÈ »óÀÚÀÇ ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ Ã¢ÀÌ ´ëÈ »óÀÚ°¡ ¾Æ´Ò °æ¿ì¿¡´Â
|
||
// ÇÁ·¹ÀÓ¿öÅ©°¡ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù.
|
||
SetIcon(m_hIcon, TRUE); // Å« ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù.
|
||
SetIcon(m_hIcon, FALSE); // ÀÛÀº ¾ÆÀÌÄÜÀ» ¼³Á¤ÇÕ´Ï´Ù.
|
||
|
||
// DB¿¡ ¿¬°áµÇ±â Àü±îÁö ¹öưÀ» ´©¸¦ ¼ö ¾øµµ·Ï ÇÕ´Ï´Ù.
|
||
m_btnAuth.EnableWindow(FALSE);
|
||
//m_btnMD5.EnableWindow(FALSE); // MD5 º¯È¯±â´ÉÀº DB¿¬°á¿¡ »ó°ü¾øÀÌ »ç¿ë°¡´ÉÇϵµ·Ï º¯°æ(by zun!)
|
||
m_btnFind.EnableWindow(FALSE);
|
||
|
||
// ·Î±×¸¦ ³²±âÁö ¾Ê½À´Ï´Ù.
|
||
g_Log.Disable(0xFFFFFFFF);
|
||
g_SessionLog.Disable(0xFFFFFFFF);
|
||
|
||
return TRUE; // ÄÁÆ®·Ñ¿¡ ´ëÇÑ Æ÷Ä¿½º¸¦ ¼³Á¤ÇÏÁö ¾ÊÀ» °æ¿ì TRUE¸¦ ¹ÝȯÇÕ´Ï´Ù.
|
||
}
|
||
|
||
// ´ëÈ »óÀÚ¿¡ ÃÖ¼ÒÈ ´ÜÃ߸¦ Ãß°¡ÇÒ °æ¿ì ¾ÆÀÌÄÜÀ» ±×¸®·Á¸é
|
||
// ¾Æ·¡ Äڵ尡 ÇÊ¿äÇÕ´Ï´Ù. ¹®¼/ºä ¸ðµ¨À» »ç¿ëÇÏ´Â MFC ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â
|
||
// ÇÁ·¹ÀÓ¿öÅ©¿¡¼ ÀÌ ÀÛ¾÷À» ÀÚµ¿À¸·Î ¼öÇàÇÕ´Ï´Ù.
|
||
|
||
void CAuthGamaDlg::OnPaint()
|
||
{
|
||
if (IsIconic())
|
||
{
|
||
CPaintDC dc(this); // ±×¸®±â¸¦ À§ÇÑ µð¹ÙÀ̽º ÄÁÅØ½ºÆ®
|
||
|
||
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
|
||
|
||
// Ŭ¶óÀÌ¾ðÆ® »ç°¢Çü¿¡¼ ¾ÆÀÌÄÜÀ» °¡¿îµ¥¿¡ ¸ÂÃä´Ï´Ù.
|
||
int cxIcon = GetSystemMetrics(SM_CXICON);
|
||
int cyIcon = GetSystemMetrics(SM_CYICON);
|
||
CRect rect;
|
||
GetClientRect(&rect);
|
||
int x = (rect.Width() - cxIcon + 1) / 2;
|
||
int y = (rect.Height() - cyIcon + 1) / 2;
|
||
|
||
// ¾ÆÀÌÄÜÀ» ±×¸³´Ï´Ù.
|
||
dc.DrawIcon(x, y, m_hIcon);
|
||
}
|
||
else
|
||
{
|
||
CDialog::OnPaint();
|
||
}
|
||
}
|
||
|
||
// »ç¿ëÀÚ°¡ ÃÖ¼ÒÈµÈ Ã¢À» ²ô´Â µ¿¾È¿¡ Ä¿¼°¡ Ç¥½ÃµÇµµ·Ï ½Ã½ºÅÛ¿¡¼
|
||
// ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù.
|
||
HCURSOR CAuthGamaDlg::OnQueryDragIcon()
|
||
{
|
||
return static_cast<HCURSOR>(m_hIcon);
|
||
}
|
||
|
||
void CAuthGamaDlg::OnBnClickedDbConnect()
|
||
{
|
||
// ¼¹ö¼Â¾÷¿¡¼ ¼Â¾÷À» Àоî¿À°í, ÀÎÁõDB·Î ¿¬°áÀ» ÇÕ´Ï´Ù.
|
||
CString szError;
|
||
CDBComponent& DBComponent = CDBSingleObject::GetInstance();
|
||
|
||
if (!CServerSetup::GetInstance().Initialize(CServerSetup::AuthServer))
|
||
{
|
||
// ÀÎÁõ¼¹ö Á¤º¸¸¦ Àд µ¥ ½ÇÆÐÇß½À´Ï´Ù.
|
||
szError.Format("Read AuthServer info failed");
|
||
}
|
||
else if (!DBComponent.Connect(CDBComponent::Class_AuthDB))
|
||
{
|
||
// ¿¬°á¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.
|
||
szError.Format("Connect DB failed : %s ", DBComponent.GetErrorString());
|
||
}
|
||
else
|
||
{
|
||
// ¿¬°á¿¡ ¼º°øÇÏ¿´½À´Ï´Ù.
|
||
m_btnAuth.EnableWindow(TRUE);
|
||
m_btnMD5.EnableWindow(TRUE);
|
||
m_btnFind.EnableWindow(TRUE);
|
||
|
||
SetWindowText(_T("AuthGama : AuthDB Connect Succeeded"));
|
||
}
|
||
|
||
if (!szError.IsEmpty())
|
||
{
|
||
AfxMessageBox(szError, MB_OK | MB_ICONERROR);
|
||
}
|
||
}
|
||
|
||
void CAuthGamaDlg::OnBnClickedAuthBtn()
|
||
{
|
||
// TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
|
||
UpdateData(TRUE);
|
||
|
||
DWORD dwUID = 0;
|
||
CDBComponent& DBComponent = CDBSingleObject::GetInstance();
|
||
|
||
char szPassword[33];
|
||
char szMD5String[33];
|
||
|
||
_snprintf(szPassword, 33, m_szAuthPassword);
|
||
szPassword[32] = 0;
|
||
|
||
MD5String(szPassword, szMD5String);
|
||
szMD5String[32] = 0;
|
||
|
||
if (!DBComponent::AuthDB::LoginAuthGama(DBComponent,
|
||
m_szAuthAccount, szMD5String, dwUID))
|
||
{
|
||
m_szAuthResult.Format(_T("DB Error : %s"), DBComponent.GetErrorString());
|
||
}
|
||
else if (dwUID < 100)
|
||
{
|
||
switch(dwUID)
|
||
{
|
||
case 1: m_szAuthResult.Format(_T("Invalid password")); break;
|
||
case 2: m_szAuthResult.Format(_T("Unknown Account")); break;
|
||
case 5: m_szAuthResult.Format(_T("Password failed more than 3")); break;
|
||
default: m_szAuthResult.Format(_T("Unknown Error")); break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
m_szAuthResult.Format(_T("%d"), dwUID);
|
||
}
|
||
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void CAuthGamaDlg::OnBnClickedMd5ConvertBtn()
|
||
{
|
||
// TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
|
||
UpdateData(TRUE);
|
||
|
||
char szPassword[33];
|
||
char szMD5String[33];
|
||
|
||
_snprintf(szPassword, 33, m_szMD5Password);
|
||
szPassword[32] = 0;
|
||
|
||
MD5String(szPassword, szMD5String);
|
||
szMD5String[32] = 0;
|
||
|
||
m_szMD5HashVal.SetString(szMD5String);
|
||
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void CAuthGamaDlg::OnBnClickedFindBtn()
|
||
{
|
||
// TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
|
||
UpdateData(TRUE);
|
||
|
||
const int MAX_BUFFER = 64;
|
||
CString szError;
|
||
|
||
CDBComponent& DBComponent = CDBSingleObject::GetInstance();
|
||
|
||
unsigned long dwUID = 0;
|
||
if (!m_szFindUID.IsEmpty() && (0 != (dwUID = atol(m_szFindUID))))
|
||
{
|
||
char szAccount[MAX_BUFFER];
|
||
if (DBComponent::AuthDB::GetGamaAccountByUID(DBComponent, dwUID, szAccount, MAX_BUFFER))
|
||
{
|
||
m_szFoundUID.Format(_T("%d"), dwUID);
|
||
m_szFoundAccount.SetString(szAccount);
|
||
}
|
||
else
|
||
{
|
||
szError.Format(_T("DB Error : %s"), DBComponent.GetErrorString());
|
||
}
|
||
}
|
||
else if (!m_szFindAccount.IsEmpty())
|
||
{
|
||
if (DBComponent::AuthDB::GetGamaUIDByAccount(DBComponent, m_szFindAccount, dwUID))
|
||
{
|
||
m_szFoundUID.Format(_T("%d"), dwUID);
|
||
m_szFoundAccount.SetString(m_szFindAccount);
|
||
}
|
||
else
|
||
{
|
||
szError.Format(_T("DB Error : %s"), DBComponent.GetErrorString());
|
||
}
|
||
}
|
||
|
||
if (!szError.IsEmpty())
|
||
{
|
||
AfxMessageBox(szError, MB_OK | MB_ICONERROR);
|
||
}
|
||
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void CAuthGamaDlg::OnOK()
|
||
{
|
||
// TODO: ¿©±â¿¡ Ư¼öÈµÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù.
|
||
|
||
// CDialog::OnOK();
|
||
}
|
||
|
||
void CAuthGamaDlg::OnEnChangeAccountIn()
|
||
{
|
||
// TODO: RICHEDIT ÄÁÆ®·ÑÀÎ °æ¿ì ÀÌ ÄÁÆ®·ÑÀº
|
||
// CDialog::¸¶½ºÅ©¿¡ OR ¿¬»êÇÏ¿© ¼³Á¤µÈ ENM_CHANGE Ç÷¡±×¸¦ ÁöÁ¤ÇÏ¿©
|
||
// CRichEditCtrl().SetEventMask()¸¦ È£ÃâÇϵµ·Ï OnInitDialog() ÇÔ¼ö¸¦ ÀçÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é
|
||
// ÀÌ ¾Ë¸²À» º¸³»Áö ¾Ê½À´Ï´Ù.
|
||
|
||
// TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
|
||
|
||
UpdateData(TRUE);
|
||
m_szFindUID.Empty();
|
||
UpdateData(FALSE);
|
||
}
|
||
|
||
void CAuthGamaDlg::OnEnChangeUidIn()
|
||
{
|
||
// TODO: RICHEDIT ÄÁÆ®·ÑÀÎ °æ¿ì ÀÌ ÄÁÆ®·ÑÀº
|
||
// CDialog::¸¶½ºÅ©¿¡ OR ¿¬»êÇÏ¿© ¼³Á¤µÈ ENM_CHANGE Ç÷¡±×¸¦ ÁöÁ¤ÇÏ¿©
|
||
// CRichEditCtrl().SetEventMask()¸¦ È£ÃâÇϵµ·Ï OnInitDialog() ÇÔ¼ö¸¦ ÀçÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é
|
||
// ÀÌ ¾Ë¸²À» º¸³»Áö ¾Ê½À´Ï´Ù.
|
||
|
||
// TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
|
||
UpdateData(TRUE);
|
||
m_szFindAccount.Empty();
|
||
UpdateData(FALSE);
|
||
}
|