/**************************************************************************** * @source : FrmLoginF.cpp * @description : »ç¿ëÀÚ ·Î±×ÀΠó¸® °øÅë¸ðµâ **************************************************************************** * DATE AUTHOR DESCRIPTION * -------------------------------------------------------------------------- * 2011/11/22 Á¤½ÂÈ£ ÃÖÃÊÀÛ¼º * ****************************************************************************/ //--------------------------------------------------------------------------- #include #include "ITSUtilF.h" #include "ITSDbF.h" #pragma hdrstop #include #include #include #include "FrmLoginF.h" #include "FrmPswdChngeF.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "cxButtons" #pragma link "cxContainer" #pragma link "cxControls" #pragma link "cxEdit" #pragma link "cxGraphics" #pragma link "cxLabel" #pragma link "cxLookAndFeelPainters" #pragma link "cxLookAndFeels" #pragma link "dxSkinBlack" #pragma link "dxSkinBlue" #pragma link "dxSkinCaramel" #pragma link "dxSkinCoffee" #pragma link "dxSkinDarkRoom" #pragma link "dxSkinDarkSide" #pragma link "dxSkinFoggy" #pragma link "dxSkinGlassOceans" #pragma link "dxSkiniMaginary" #pragma link "dxSkinLilian" #pragma link "dxSkinLiquidSky" #pragma link "dxSkinLondonLiquidSky" #pragma link "dxSkinMcSkin" #pragma link "dxSkinMoneyTwins" #pragma link "dxSkinOffice2007Black" #pragma link "dxSkinOffice2007Blue" #pragma link "dxSkinOffice2007Green" #pragma link "dxSkinOffice2007Pink" #pragma link "dxSkinOffice2007Silver" #pragma link "dxSkinOffice2010Black" #pragma link "dxSkinOffice2010Blue" #pragma link "dxSkinOffice2010Silver" #pragma link "dxSkinsCore" #pragma link "dxSkinSeven" #pragma link "dxSkinSharp" #pragma link "dxSkinSilver" #pragma link "dxSkinStardust" #pragma resource "*.dfm" TFRMLogin *FRMLogin = NULL; //--------------------------------------------------------------------------- __fastcall TFRMLogin::TFRMLogin(TComponent* Owner) : TForm(Owner) { //ITSSkin_Load(this); m_nLoginTryCnt = 0; m_sUserName = ""; //»ç¿ëÀÚ ¸í m_sUserID = ""; //»ç¿ëÀÚ ID m_sUserRightID = ""; //»ç¿ëÀÚ ±ÇÇÑ ID m_sUserRightName = ""; //»ç¿ëÀÚ ±ÇÇÑ ¸í m_sLoginTime = ""; m_bLogin = false; LbMessage->Caption = ""; } //--------------------------------------------------------------------------- void __fastcall TFRMLogin::BtnCloseClick(TObject *Sender) { ModalResult = mrCancel; Close(); } //--------------------------------------------------------------------------- void __fastcall TFRMLogin::BtnPswdChngeClick(TObject *Sender) { try { FRMPswdChnge = new TFRMPswdChnge(this); FRMPswdChnge->EdUserID->Text = EdUserID->Text; FRMPswdChnge->ShowModal(); EdUserID->Text = FRMPswdChnge->EdUserID->Text.Trim(); EdPswd->Text = FRMPswdChnge->EdCnfmNewPswd->Text.Trim(); delete FRMPswdChnge; FRMPswdChnge = NULL; } catch(...) { } } //--------------------------------------------------------------------------- void __fastcall TFRMLogin::BtnLoginClick(TObject *Sender) { String sUserID = Trim(EdUserID->Text); String sUserPswd = Trim(EdPswd->Text); //c4ca4238a0b923820dcc509a6f75849b == "1" if (sUserID.Compare("") == 0) { Application->NormalizeTopMosts(); Application->MessageBox(L"Please enter Use ID.", L"User ID Error", MB_OK|MB_ICONERROR); // ID¸¦ ÀÔ·ÂÇϼ¼¿ä. Application->RestoreTopMosts(); EdUserID->SetFocus(); return; } if (sUserPswd.Compare("") == 0) { Application->NormalizeTopMosts(); Application->MessageBox(L"Please enter User Password.", L"Password Error", MB_OK|MB_ICONERROR); // ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇϼ¼¿ä. Application->RestoreTopMosts(); EdPswd->SetFocus(); return; } int nRes = GetUserPassword(sUserID, sUserPswd); if (LOGIN_DB_ERR == nRes) { return; } if (LOGIN_OK == nRes) { m_bLogin = true; ModalResult = mrOk; //Close(); } else { String sErrMsg; m_bLogin = false; if (LOGIN_ID_ERR == nRes) { sErrMsg = "Unregistered user.";//"µî·ÏµÇÁö ¾ÊÀº »ç¿ëÀÚ ÀÔ´Ï´Ù."; Application->NormalizeTopMosts(); Application->MessageBox(sErrMsg.c_str(), L"Login Error", MB_OK|MB_ICONERROR); // µî·ÏµÇÁö ¾ÊÀº »ç¿ëÀÚ ÀÔ´Ï´Ù. Application->RestoreTopMosts(); EdUserID->SetFocus(); } if (LOGIN_PSWD_ERR == nRes) { sErrMsg = "The password is incorrect.";//"ºñ¹Ð¹øÈ£°¡ Á¤È®ÇÏÁö ¾Ê½À´Ï´Ù."; Application->NormalizeTopMosts(); Application->MessageBox(sErrMsg.c_str(), L"Login Error", MB_OK|MB_ICONERROR); // ºñ¹Ð¹øÈ£°¡ Á¤È®ÇÏÁö ¾Ê½À´Ï´Ù. Application->RestoreTopMosts(); EdPswd->SetFocus(); } m_nLoginTryCnt++; //LbMessage->Caption = sErrMsg + "\r\nÁ¢¼Ó½ÇÆÐ 3ȸ¸é ÇÁ·Î±×·¥ÀÌ Á¾·áµË´Ï´Ù.\r\nÇöÀç "+String(m_nLoginTryCnt) +" ȸ"; LbMessage->Caption = sErrMsg + "\r\nIf the connection fails 3 times, the program ends.\r\nCurrent "+String(m_nLoginTryCnt) +" Trys"; if (m_nLoginTryCnt >= USER_LOGIN_TRY_CNT) { Application->NormalizeTopMosts(); //Application->MessageBox(L"»ç¿ëÀÚ ·Î±×ÀÎ ¿À·ù Ƚ¼ö(3ȸ) Ãʰú ¿À·ùÀÔ´Ï´Ù.", L"·Î±×ÀÎ ¿À·ù", MB_OK|MB_ICONERROR); // »ç¿ëÀÚ ÀÎÁõ¿À·ùÀÔ´Ï´Ù. ÇÁ·Î±×·¥À» Á¾·áÇÕ´Ï´Ù. Application->MessageBox(L"Error exceeding user login failure count (3).", L"Login Error", MB_OK|MB_ICONERROR); // »ç¿ëÀÚ ÀÎÁõ¿À·ùÀÔ´Ï´Ù. ÇÁ·Î±×·¥À» Á¾·áÇÕ´Ï´Ù. Application->RestoreTopMosts(); ModalResult = mrCancel; //Close(); } } } //--------------------------------------------------------------------------- /* * ÀÔ·ÂµÈ ¾ÆÀ̵ð·Î ºñ¹Ð¹øÈ£¸¦ ¾ò¾î¿Â´Ù. * parameter * strUserID : »ç¿ëÀÚ ID * strPswd : Á¶È¸ÇÑ »ç¿ëÀÚ ºñ¹Ð¹øÈ£ * return * int : ¼º°øÀ̸é 1, ½ÇÆÐ¸é 0 */ int __fastcall TFRMLogin::GetUserPassword(String sUserID, String sPswd) { int nRes; String sTmpPswd; String sEncPswd; String sQry; nRes = LOGIN_OK; sTmpPswd = ""; if (!ITSDb_IsOpen()) { if (!ITSDb_Open()) { Application->NormalizeTopMosts(); //Application->MessageBox(L"µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áÇÒ ¼ö ¾ø½À´Ï´Ù.", L"µ¥ÀÌÅͺ£À̽º ¿¬°á ¿À·ù", MB_OK|MB_ICONERROR); // ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇϼ¼¿ä. Application->MessageBox(L"Unable to connect to database.", L"Database Connect Error", MB_OK|MB_ICONERROR); // ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇϼ¼¿ä. Application->RestoreTopMosts(); EdPswd->SetFocus(); return LOGIN_DB_ERR; } } if (!ITSDb_IsOpen()) { return LOGIN_DB_ERR; } sEncPswd = sPswd; // sEncPswd = GetPassword(sPswd); sQry = "SELECT a.*, \r\n" " a.NAME as levelname, \r\n" " a.PWD as passwordname, \r\n" " a.GROP_ID as RIGHTID, \r\n" " TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') as logintime \r\n" " FROM TB_USER_INFR a \r\n" " WHERE USER_ID = :p01 \r\n" " AND DEL_YN <> 'Y' \r\n"; TADOQuery *adoQry = NULL; try { try { adoQry = new TADOQuery(NULL); adoQry->Connection = ITSDb_GetConnection(); adoQry->Close(); adoQry->SQL->Text = sQry; adoQry->Parameters->ParamByName("p01")->Value = sUserID; adoQry->Open(); if (!adoQry->Eof) { adoQry->First(); sTmpPswd = adoQry->FieldByName("passwordname")->AsString; if (sTmpPswd != sEncPswd) { nRes = LOGIN_PSWD_ERR; } else { m_sUserID = adoQry->FieldByName("USER_ID")->AsString; m_sUserName = adoQry->FieldByName("NAME")->AsString; m_sUserRightID = adoQry->FieldByName("NAME")->AsString; m_sUserRightName = adoQry->FieldByName("levelname")->AsString; m_sLoginTime = adoQry->FieldByName("logintime")->AsString; } } else { nRes = LOGIN_ID_ERR; } adoQry->Close(); } catch(EDatabaseError &E) { nRes = LOGIN_DB_ERR; throw Exception(String(E.ClassName())+E.Message); } catch (Exception &exception) { nRes = LOGIN_DB_ERR; throw Exception(String(exception.ClassName())+exception.Message); } catch(...) { nRes = LOGIN_DB_ERR; throw Exception("Unknown Error Occured."); // ¾Ë¼ö¾ø´Â ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù. } } __finally { if (adoQry) { adoQry->Close(); delete adoQry; } } return nRes; } //--------------------------------------------------------------------------- String __fastcall TFRMLogin::GetPassword(String APswd) { int nRes; String sEncPswd = ""; String sQry; sQry = "SELECT SCP.HASH_B64('71', :p01) AS PWD FROM DUAL \r\n"; TADOQuery *adoQry = NULL; try { try { adoQry = new TADOQuery(NULL); adoQry->Connection = ITSDb_GetConnection(); adoQry->Close(); adoQry->SQL->Text = sQry; adoQry->Parameters->ParamByName("p01")->Value = APswd; adoQry->Open(); if (!adoQry->Eof) { adoQry->First(); sEncPswd = adoQry->FieldByName("PWD")->AsString; } adoQry->Close(); } catch(EDatabaseError &E) { nRes = LOGIN_DB_ERR; throw Exception(String(E.ClassName())+E.Message); } catch (Exception &exception) { nRes = LOGIN_DB_ERR; throw Exception(String(exception.ClassName())+exception.Message); } catch(...) { nRes = LOGIN_DB_ERR; throw Exception("Unknown Error Occured."); // ¾Ë¼ö¾ø´Â ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù. } } __finally { if (adoQry) { adoQry->Close(); delete adoQry; } } return sEncPswd; } //--------------------------------------------------------------------------- String __fastcall TFRMLogin::GetLocalIp() { char slocal[256]; WSAData wsaData; if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) return ""; if (gethostname(slocal, 256) == SOCKET_ERROR) return ""; hostent *hos = gethostbyname(slocal); if (hos == NULL) return ""; char *addr = *(hos->h_addr_list); String LocalIP = String((unsigned char)addr[0]) + '.' + String((unsigned char)addr[1]) + '.' + String((unsigned char)addr[2]) + '.' + String((unsigned char)addr[3]); WSACleanup(); return LocalIP; } //--------------------------------------------------------------------------- void __fastcall TFRMLogin::FormShow(TObject *Sender) { if (EdUserID->Text != "") { EdPswd->SetFocus(); } else { EdUserID->SetFocus(); } } //--------------------------------------------------------------------------- void __fastcall TFRMLogin::EdUserIDKeyPress(TObject *Sender, char &Key) { if (Key == 13) { EdPswd->SetFocus(); } } //--------------------------------------------------------------------------- void __fastcall TFRMLogin::EdPswdKeyPress(TObject *Sender, char &Key) { if (Key == 13) { BtnLoginClick(BtnLogin); } } //--------------------------------------------------------------------------- void __fastcall TFRMLogin::FormCreate(TObject *Sender) { /* * ½ºÅ² º¯°æ */ Application->ShowMainForm = false; try { Application->Icon->LoadFromResourceName(((unsigned int)HInstance), "MAINICON"); } catch(...) { ShowMessage("LoadFromResourceName failed"); } SetLocalSkin(); } //--------------------------------------------------------------------------- /* * °øÅëÀ¸·Î 󸮵ÇÁö ¾Ê´Â ½ºÅ²À» º¯°æÇÑ´Ù. * arguments * * return * void */ void __fastcall TFRMLogin::SetLocalSkin() { } //--------------------------------------------------------------------------- /* * ĸ¼ÇŸÀÔÆ² ¸¶¿ì½º Ŭ¸¯½Ã È­¸é À̵¿Çϱâ * arguments * * return * void */ void __fastcall TFRMLogin::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { ReleaseCapture(); SendMessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0); } //--------------------------------------------------------------------------- void __fastcall TFRMLogin::FormClose(TObject *Sender, TCloseAction &Action) { //Action = caFree; } //---------------------------------------------------------------------------