using KDCS.Utils; using KMBIM.Revit.Tools.Properties; using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Globalization; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; namespace KMBIM.Revit.Tools.License { public partial class FormAuth : Form { private string _SN; private string _AC; public string strPWD { get; set; } private string permission_uuid; private bool _IsValid = false; private DateTime _dtStart; private DateTime _dtEnd; private int _nDaysLeft; // 남은 일수 private bool _IsUserRegistered; private bool _AuthState; private bool _HasAC; // 인증키를 가지고 있는가? private bool _Init; public FormAuth() { InitializeComponent(); _Init = false; } public bool IsValid() { return _IsValid; } private void button1_Click(object sender, EventArgs e) { } public void GetDate(string strDate, ref string strYear, ref string strMonth, ref string strDay, string strSeparator) { if (string.Compare(strDate, string.Empty, true) == 0 || string.Compare(strDate, "", true) == 0) return; if (string.Compare(strDate, strSeparator, true) == 0) { int nCount = 0; int nFind = strDate.IndexOf(strSeparator); while (nFind >= 0) { string strVal = strDate.Substring(1, nFind); if (nCount == 0) { strYear = strVal; }//end of if else if (nCount == 1) { strMonth = strVal; }//end of else if strVal = strDate.Substring(nFind + 1); nFind = strDate.IndexOf(strSeparator); }//end of while if (string.Compare(strDate, "", true) == 0) { strDay = strDate; }//end of if }//end of if return; } public bool IsAvailableIdCall(string lpszId) { string strParam = string.Empty; strParam = string.Format("{0}={1}|{2}={3}|", Define.STRING_ID_TAG, lpszId, Define.STRING_FUNCTION_TAG, "IsAvailableId"); List strArray = new List(); bool bOk = CommonFunc.CallAspx(strParam, ref strArray); // [ iknow 2012-5-29 ] string strMsg = CommonFunc.StrArrayValue(ref strArray, Define.STRING_MSG_TAG); if (!string.IsNullOrEmpty(strMsg)) { MessageBox.Show(strMsg); } return bOk; } public bool RequestLogoutCall(string lpszId, string lpszPass, string lpszDate, string lpszMac) { string strParam = string.Empty; strParam = string.Format("{0}={1}|{2}={3}|{4}={5}|{6}={7}|{8}={9}|{10}={11}|{12}={13}|{14}={15}|{16}={17}|", Define.STRING_PRODUCTNAME_TAG, "KMBIM", Define.STRING_CURVER_TAG, Properties.Resources.Version, Define.STRING_PLATFORM_TAG, "Windows", Define.STRING_ID_TAG, lpszId, Define.STRING_PASS_TAG, lpszPass, "strDate", lpszDate, "strMac", lpszMac, Define.STRING_FUNCTION_TAG, "InternetLogOut"); List strArray = new List(); bool bOk = CommonFunc.CallAspx(strParam, ref strArray); // [ iknow 2012-5-29 ] string strMsg = CommonFunc.StrArrayValue(ref strArray, Define.STRING_MSG_TAG); if (!string.IsNullOrEmpty(strMsg)) { MessageBox.Show(strMsg); } return bOk; } public bool RequestTrialCall(string lpszId, string lpszPass, string lpszBusiness, string lpszUserName, string lpszAddress, string lpszTel, string lpszFax, string lpszHel, string lpszMail, string lpszDate, string lpszMac) { string strParam = string.Empty; strParam = string.Format("{0}={1}|{2}={3}|{4}={5}|{6}={7}|{8}={9}|{10}={11}|{12}={13}|{14}={15}|{16}={17}|{18}={19}|{20}={21}|{22}={23}|{24}={25}|{26}={27}|{28}={29}|", Define.STRING_PRODUCTNAME_TAG, "KMBIM", Define.STRING_CURVER_TAG, "01", Define.STRING_PLATFORM_TAG, "Revit", Define.STRING_ID_TAG, lpszId, Define.STRING_PASS_TAG, lpszPass, "strBusiness", lpszBusiness, "strUserName", lpszUserName, "strAddress", lpszAddress, "strTel", lpszTel, "strFax", lpszFax, "strHp", lpszHel, "strMail", lpszMail, "strDate", lpszDate, "strMac", lpszMac, Define.STRING_FUNCTION_TAG, "RequestTrial"); List strArray = new List(); bool bOk = false; try { bOk = CommonFunc.CallAspx(strParam, ref strArray); // [ iknow 2012-5-29 ] string strMsg = CommonFunc.StrArrayValue(ref strArray, Define.STRING_MSG_TAG); if (!string.IsNullOrEmpty(strMsg)) { if (bOk) { MessageBox.Show("인증키(평가판) 신청이 완료되었습니다."); } else MessageBox.Show(strMsg, Resources.ProductName); } } catch (Exception ex) { string strErr = ex.Message; } return bOk; } public bool RegisterAuthenticationKey(string lpszId, string lpszPass, string authKey) { string strParam = string.Empty; strParam = string.Format("{0}={1}|{2}={3}|{4}={5}|{6}={7}|{8}={9}|{10}={11}|{12}={13}|", Define.STRING_PRODUCTNAME_TAG, "KMBIM", Define.STRING_CURVER_TAG, "01", Define.STRING_PLATFORM_TAG, "Revit", Define.STRING_ID_TAG, lpszId, Define.STRING_PASS_TAG, lpszPass, "strAuthenticationKey", authKey, Define.STRING_FUNCTION_TAG, "RegisterAuthenticationKey"); List strArray = new List(); bool bOk = false; try { bOk = CommonFunc.CallAspx(strParam, ref strArray); // [ iknow 2012-5-29 ] if (bOk) { // 인증키 등록 if (GetPermissionUser(_SN, strPWD)) { Reg.setReg("CDKEY", authKey.ToUpper()); _HasAC = true; Reg.setReg("AuthState", "1"); // 인증키 등록됨 _AuthState = true; UpdateCDKEY(); MessageBox.Show(Resources.RegisterAuthCodeSuccess); } } else { string strMsg = CommonFunc.StrArrayValue(ref strArray, Define.STRING_MSG_TAG); if (!string.IsNullOrEmpty(strMsg)) { MessageBox.Show(strMsg, Resources.ProductName); } } } catch (Exception ex) { bOk = false; string strErr = ex.Message; } return bOk; } public bool RemoveAuthenticationKey(string lpszId, string lpszPass, string authKey) { string strParam = string.Empty; strParam = string.Format("{0}={1}|{2}={3}|{4}={5}|{6}={7}|{8}={9}|{10}={11}|{12}={13}|", Define.STRING_PRODUCTNAME_TAG, "KMBIM", Define.STRING_CURVER_TAG, "01", Define.STRING_PLATFORM_TAG, "Revit", Define.STRING_ID_TAG, lpszId, Define.STRING_PASS_TAG, lpszPass, "strAuthenticationKey", authKey.ToLower(), Define.STRING_FUNCTION_TAG, "RemoveAuthenticationKey"); List strArray = new List(); bool bOk = false; try { bOk = CommonFunc.CallAspx(strParam, ref strArray); // [ iknow 2012-5-29 ] if (bOk) { WorkMain.GetInstance().IsValid = false; ClearKMBIM(); // 인증키 삭제 MessageBox.Show(Resources.RemoveAuthCodeSuccess); } else { string strMsg = CommonFunc.StrArrayValue(ref strArray, Define.STRING_MSG_TAG); if (!string.IsNullOrEmpty(strMsg)) { MessageBox.Show(strMsg, Resources.ProductName); } } } catch (Exception ex) { bOk = false; string strErr = ex.Message; } return bOk; } // 현재 등록된 퍼미션을 가져와 저장한다. public bool GetUserInfo(string user_id, string user_passwd) { string strParam = string.Empty; strParam = string.Format("{0}={1}|{2}={3}|{4}={5}|", Define.STRING_ID_TAG, user_id, // 사용자ID Define.STRING_PASS_TAG, user_passwd, // 사용자PWD Define.STRING_FUNCTION_TAG, "GetUserInfo"); List strArray = new List(); bool bOk = false; try { bOk = CommonFunc.CallAspx(strParam, ref strArray); // [ iknow 2012-5-29 ] if (bOk) { string user_uuid = CommonFunc.StrArrayValue(ref strArray, "user_uuid"); textBox_Business.Text = CommonFunc.StrArrayValue(ref strArray, "Company_name"); textBox_UserName.Text = CommonFunc.StrArrayValue(ref strArray, "userName"); textBox_TEL.Text = CommonFunc.StrArrayValue(ref strArray, "tel"); textBox_Email.Text = CommonFunc.StrArrayValue(ref strArray, "mail"); if (string.IsNullOrEmpty(user_uuid)) { bOk = false; } } } catch (Exception ex) { string strErr = ex.Message; } return bOk; } // 현재 등록된 퍼미션의 CD키(인증키)를 요청한다. public bool RequestCDKey(string user_id, string user_passwd) { string strParam = string.Empty; strParam = string.Format("{0}={1}|{2}={3}|{4}={5}|{6}={7}|{8}={9}|{10}={11}", Define.STRING_PRODUCTNAME_TAG, "KMBIM", Define.STRING_CURVER_TAG, "01", Define.STRING_PLATFORM_TAG, "Revit", Define.STRING_ID_TAG, user_id, // 사용자ID Define.STRING_PASS_TAG, user_passwd, // 사용자PWD Define.STRING_FUNCTION_TAG, "RequestCDKey"); List strArray = new List(); bool bOk = false; try { bOk = CommonFunc.CallAspx(strParam, ref strArray); // [ iknow 2012-5-29 ] } catch (Exception ex) { string strErr = ex.Message; } return bOk; } // 현재 등록된 퍼미션을 가져와 저장한다. public bool GetPermissionUser(string user_id, string user_passwd, bool UpdateControl = true) { string strParam = string.Empty; strParam = string.Format("{0}={1}|{2}={3}|{4}={5}|{6}={7}|{8}={9}|{10}={11}", Define.STRING_PRODUCTNAME_TAG, "KMBIM", Define.STRING_CURVER_TAG, "01", Define.STRING_PLATFORM_TAG, "Revit", Define.STRING_ID_TAG, user_id, // 사용자ID Define.STRING_PASS_TAG, user_passwd, // 사용자PWD Define.STRING_FUNCTION_TAG, "GetPermissionUser"); List strArray = new List(); bool bOk = false; try { bOk = CommonFunc.CallAspx(strParam, ref strArray); // [ iknow 2012-5-29 ] if (bOk) { string perm_uuid = CommonFunc.StrArrayValue(ref strArray, "permision_uuid"); string cdkey_certification = CommonFunc.StrArrayValue(ref strArray, "cdkey_certification"); string purchase_name = CommonFunc.StrArrayValue(ref strArray, "purchase_name"); permission_uuid = perm_uuid; string start_date = CommonFunc.StrArrayValue(ref strArray, "start_date"); string end_date = CommonFunc.StrArrayValue(ref strArray, "end_date"); _dtStart = new DateTime(); // 시작일 _dtEnd = new DateTime(); // 종료일 DateTime.TryParse(start_date, out _dtStart); DateTime.TryParse(end_date, out _dtEnd); // 일단 영구버전은 무시 //if (purchase_name == "LifeTime") //{ // _dtEnd = _dtStart.AddYears(120); // 120년 //} var dtDelta = _dtEnd - DateTime.Now; _nDaysLeft = dtDelta.Days; if (_nDaysLeft <= 0) // dtDelta.Days => 남은 일수 { _IsValid = false; } else _IsValid = true; WorkMain.GetInstance().IsValid = _IsValid; string st = _dtStart.ToBinary().ToString(); string et = _dtEnd.ToBinary().ToString(); string lt = st; // 등록 가능 InitKMBIM(user_passwd, st, et, lt, UpdateControl); } else { // 인증키가 승인되지 않은 경우 WorkMain.GetInstance().IsValid = _IsValid; // 레지스트리에 저장하지 않는다. string strMsg = CommonFunc.StrArrayValue(ref strArray, Define.STRING_MSG_TAG); if (!string.IsNullOrEmpty(strMsg)) { MessageBox.Show(strMsg, Resources.ProductName); } } } catch (Exception ex) { bOk = false; string strErr = ex.Message; } return bOk; } private void RegisterUser(string user_id, string user_passwd, string macAddress) { string strID = user_id; string strPWD = user_passwd; string strTel = textBox_TEL.Text; Guid guid = Guid.NewGuid(); string strErr = string.Empty; if (string.IsNullOrEmpty(strID)) strErr += "요청코드,"; if (string.IsNullOrEmpty(strPWD)) strErr += "인증키,"; if (string.IsNullOrEmpty(textBox_Business.Text)) strErr += "업체명,"; if (string.IsNullOrEmpty(textBox_UserName.Text)) strErr += "담당자명,"; if (string.IsNullOrEmpty(textBox_TEL.Text)) strErr += "전화번호,"; if (string.IsNullOrEmpty(textBox_Email.Text)) strErr += "이메일주소,"; if (strErr != "") { String strMsg; if (strErr.Substring(strErr.Length - 1, 1) == ",") strErr = strErr.TrimEnd(','); strMsg = string.Format("{0}가 없습니다.", strErr); MessageBox.Show(strMsg); return; }//end of if ////////////////////////////////////////////////////////////////////////////////// //2006-4-18 등록하는 날짜를 추가할 수 있도록 하자. //EntStr eStr; var st = DateTime.Now; List nArr = new List(); nArr.Add(st.Year);//;Year nArr.Add(st.Month);//;Month nArr.Add(st.Day);//;Day ////////////////////////////////////////////////////////////////////////////////// string[] strArrSeparator = new string[] { "_ ", "_ ", "" }; ////////////////////////////////////////////////////////////////////////////////// string strDate = string.Empty; string strTemp = string.Empty; int nLen = nArr.Count; for (int i = 0; i < nLen; i++) { strTemp = string.Format("{0}{1}", nArr[i], strArrSeparator[i]); strDate += strTemp; }//;end of for strDate.Replace(",", ""); ////////////////////////////////////////////////////////////////////////////////// bool bOk = RequestTrialCall(strID, strPWD, textBox_Business.Text, textBox_UserName.Text, "", strTel, "", "", textBox_Email.Text, strDate, _SN); if (bOk) { //RequestCDKey(strID, strPWD); // 인증키 발송 } } string DomainMapper(Match match) { // Use IdnMapping class to convert Unicode domain names. var idn = new IdnMapping(); // Pull out and process domain name (throws ArgumentException on invalid) string domainName = idn.GetAscii(match.Groups[2].Value); return match.Groups[1].Value + domainName; } public bool IsValidEmail(string email) { if (string.IsNullOrWhiteSpace(email)) return false; try { // Normalize the domain email = Regex.Replace(email, @"(@)(.+)$", DomainMapper, RegexOptions.None, TimeSpan.FromMilliseconds(200)); // Examines the domain part of the email and normalizes it. } catch (RegexMatchTimeoutException e) { return false; } catch (ArgumentException e) { return false; } try { return Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250)); } catch (RegexMatchTimeoutException) { return false; } return false; } private void btnAuthorization_Click(object sender, EventArgs e) { string strID = textBoxReqCode.Text; // 요청코드 string strPWD = "12345678"; // 인증키 Regex regex1 = new Regex("^[a-zA-Z]+[a-zA-Z0-9]+[[a-zA-Z0-9-_.!#$%'*+/=?^]{1,20}@[a-zA-Z0-9]{1,20}.[a-zA-Z]{2,3}$"); Reg.setReg("company", textBox_Business.Text); Reg.setReg("username", textBox_UserName.Text); Reg.setReg("tel", textBox_TEL.Text); Reg.setReg("email", textBox_Email.Text); if (!IsValidEmail(textBox_Email.Text)) { MessageBox.Show("E-mail 주소를 입력하십시오.", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } AuthKey auth = new AuthKey(); strPWD = auth.GetAuthCode(strID); if (this.GetUserInfo(strID, strPWD) == false) { this.RegisterUser(strID, strPWD, _SN); } return; } private void InitKMBIM(string strAC, string st, string et, string lt, bool UpdateControl) { try { byte[] k2 = Convert.FromBase64String("p0NGShDC/ONmkbHWMcNJaQ=="); AESEncryption aesenc = new AESEncryption(); byte[] baDpsKey = Convert.FromBase64String("ybpAFYG/XbjTG6gKJSJfHw=="); var strKey = aesenc.DecryptString(baDpsKey, null, k2); string tt = st + "|" + et + "|" + lt; byte[] abTT = aesenc.EncryptString(tt, null, k2); var strTTB64 = Convert.ToBase64String(abTT); string strTmp2 = strAC + "|" + strTTB64; Reg.SetAuthRegistry(Registry.CurrentUser, strKey, strTmp2); if (UpdateControl) { textBoxCDKey.Enabled = true; UpdateCDKEY(); } } catch (AccessViolationException e) { string strMsg = e.Message; } } private string GetKMBIM() { byte[] k2 = Convert.FromBase64String("p0NGShDC/ONmkbHWMcNJaQ=="); AESEncryption aesenc = new AESEncryption(); byte[] baDpsKey = Convert.FromBase64String("ybpAFYG/XbjTG6gKJSJfHw=="); var strKey = aesenc.DecryptString(baDpsKey, null, k2); return Reg.GetAuthRegistry(Registry.CurrentUser, strKey); } private void ClearKMBIM(bool bUpdateControl = true) { try { Reg.setReg("AuthState", "0"); // 인증키 제거됨 _AuthState = false; // 인증키 제거됨 byte[] k2 = Convert.FromBase64String("p0NGShDC/ONmkbHWMcNJaQ=="); AESEncryption aesenc = new AESEncryption(); byte[] baDpsKey = Convert.FromBase64String("ybpAFYG/XbjTG6gKJSJfHw=="); var strKey = aesenc.DecryptString(baDpsKey, null, k2); Reg.SetAuthRegistry(Registry.CurrentUser, strKey, ""); var strTmp2 = Reg.GetAuthRegistry(Registry.CurrentUser, strKey); string[] lstString = strTmp2.Split('|'); if (lstString.Length == 2) { btnRequestAC.Enabled = false; // 레지스트리에서 가져온 권한코드메타 string strAuthCodeReg = lstString[0]; var strTT = lstString[1]; var decTT = aesenc.DecryptString(Convert.FromBase64String(strTT), null, k2); var lstTT = decTT.Split('|'); if (lstTT.Length == 3) { var decST = lstTT[0]; var decET = lstTT[1]; var decLT = lstTT[2]; // 마지막 갱신일 long lTmp = 0; if (long.TryParse(decST, out lTmp)) { _dtStart = DateTime.FromBinary(lTmp); _dtEnd = _dtStart; string st = _dtStart.ToBinary().ToString(); string et = _dtEnd.ToBinary().ToString(); string lt = st; // 등록 가능 AuthKey auth = new AuthKey(); var user_passwd = auth.GetAuthCode(_SN); InitKMBIM(user_passwd, st, et, lt, bUpdateControl); } } } _IsValid = false; WorkMain.GetInstance().IsValid = _IsValid; _nDaysLeft = 0; // 남은일수 초기화 textBoxCDKey.Enabled = true; UpdateCDKEY(); } catch (AccessViolationException e) { string strMsg = e.Message; } } private void GetRegAuth(string strSerialNumber, ref string strAC, ref string strAuthCodeReg) { DateTime dtStart = DateTime.MinValue; DateTime dtEnd = DateTime.MinValue; DateTime dtLatest = DateTime.MinValue; AESEncryption aesenc = new AESEncryption(); byte[] k2 = Convert.FromBase64String("p0NGShDC/ONmkbHWMcNJaQ=="); byte[] baDpsKey = Convert.FromBase64String("ybpAFYG/XbjTG6gKJSJfHw=="); var strKey = aesenc.DecryptString(baDpsKey, null, k2); var strTmp2 = Reg.GetAuthRegistry(Registry.CurrentUser, strKey); string[] lstString = strTmp2.Split('|'); if (lstString.Length == 2) { btnRequestAC.Enabled = false; // 레지스트리에서 가져온 권한코드메타 strAuthCodeReg = lstString[0]; var strTT = lstString[1]; var decTT = aesenc.DecryptString(Convert.FromBase64String(strTT), null, k2); var lstTT = decTT.Split('|'); if (lstTT.Length == 3) { var decST = lstTT[0]; var decET = lstTT[1]; var decLT = lstTT[2]; // 마지막 갱신일 long lTmp = 0; if (long.TryParse(decST, out lTmp)) { dtStart = DateTime.FromBinary(lTmp); } if (long.TryParse(decET, out lTmp)) { dtEnd = DateTime.FromBinary(lTmp); } if (long.TryParse(decLT, out lTmp)) { dtLatest = DateTime.FromBinary(lTmp); } _dtStart = dtStart; _dtEnd = dtEnd; var dtDelta = dtEnd - DateTime.Now; _nDaysLeft = dtDelta.Days; _IsValid = true; if (_nDaysLeft <= 0) // dtDelta.Days => 남은 일수 { _IsValid = false; strAC = string.Empty; if (_AuthState == true) // 인증키가 등록된 상태에서만 표시 { MessageBox.Show("KMBIM 사용기간이 지났습니다."); } } // 오늘 날짜를 앞으로 옮겼다면 인증 취소 var dtDelta2 = DateTime.Today - dtLatest; if (dtDelta2.Days < 0) { _IsValid = false; strAC = string.Empty; } } else strAC = string.Empty; } else strAC = string.Empty; WorkMain.GetInstance().IsValid = _IsValid; // 인증완료 -> 최근접속일 기록 _SN = strSerialNumber; DateTime dtL = DateTime.Now; // 마지막 체크 일 string st = dtStart.ToBinary().ToString(); string et = dtEnd.ToBinary().ToString(); string lt = dtL.ToBinary().ToString(); // 마지막 체크일 string tt = st + "|" + et + "|" + lt; AESEncryption enc = new AESEncryption(); byte[] abTT = enc.EncryptString(tt, null, k2); var strTTB64 = Convert.ToBase64String(abTT); strTmp2 = strAuthCodeReg + "|" + strTTB64; Reg.SetAuthRegistry(Registry.CurrentUser, strKey, strTmp2); } public void Init(bool showDlg) { try { _Init = true; string strAuthCodeIn = string.Empty; _IsValid = false; _HasAC = false; var cdKey = Reg.getReg("CDKEY"); if (string.IsNullOrEmpty(cdKey) == false) { if (cdKey.Length > 30) _HasAC = true; } AuthKey auth = new AuthKey(); string strSerialNumber = string.Empty, strAuthCodeReg = string.Empty; string strAC = string.Empty; auth.GetSerialNumber(ref strSerialNumber); strAC = auth.GetAuthCode(strSerialNumber); if (strSerialNumber == "") { System.Windows.Forms.MessageBox.Show(Resources.AuthenticationFailed + "-1!"); return; } if (strSerialNumber.Length < 3) { System.Windows.Forms.MessageBox.Show(Resources.AuthenticationFailed + "-2!"); return; } // 레지스트리에 기록된 권한 확인 GetRegAuth(strSerialNumber, ref strAC, ref strAuthCodeReg); if (strAC.CompareTo(strAuthCodeReg) != 0 || string.IsNullOrEmpty(strAC) || string.IsNullOrEmpty(strAuthCodeReg)) { if (showDlg) { FormAuth dlg = new FormAuth(); // 3Q(대한기계설비건설협회) dlg.strPWD = auth.GetAuthCode(strSerialNumber); dlg.ShowDialog(); GetRegAuth(strSerialNumber, ref strAC, ref strAuthCodeReg); } } // 최종적으로 웹권한이 있는지 확인한다. // 인테넷 권한 확인이 필요한 제품만 여기서 진행한다. // 인터넷 연결 불가능한 제품은 인증키 제거 기능을 숨긴다. //---------------------------------------------- if (_IsValid) // 현재 사용 가능한 경우 { // 인터넷 접속하여 사용권한 재 확인 _IsValid = GetPermissionUser(strSerialNumber, strAC, false); WorkMain.GetInstance().IsValid = _IsValid; } } catch (Exception ex) { MessageBox.Show(ex.ToString(), "KMBIM.Revit.Tools"); } } private void pictureBox1_Click(object sender, EventArgs e) { } private void UpdateCDKEY() { buttonTestRequestCDKey.Visible = !_HasAC; textBoxReqCode.Enabled = !_IsUserRegistered; btnRequestAC.Enabled = !_IsUserRegistered; int nUsePeriod = _nDaysLeft - 1; if (nUsePeriod < 0) nUsePeriod = 0; labelDaysLeft.Text = string.Format(Resources.UsePeriodMsg, nUsePeriod); var cdkey = Reg.getReg("CDKEY"); textBoxCDKey.Text = cdkey; buttonRegisterAC.Enabled = !_AuthState; buttonRemoveAC.Enabled = _AuthState; } private void FormAuth_Load(object sender, EventArgs e) { textBox_Business.Text = Reg.getReg("company"); textBox_UserName.Text = Reg.getReg("username"); textBox_TEL.Text = Reg.getReg("tel"); textBox_Email.Text = Reg.getReg("email"); if (_Init == false) Init(false); string cdkey = string.Empty; textBoxReqCode.Text = _SN; AuthKey auth = new AuthKey(); strPWD = auth.GetAuthCode(_SN); var authState = Reg.getReg("AuthState"); if (authState == "1") _AuthState = true; // 키등록 else _AuthState = false; // 키제거 _IsUserRegistered = this.GetUserInfo(_SN, strPWD); UpdateCDKEY(); return; } /// /// 인증키 등록 /// /// /// private void buttonRegisterAC_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(textBoxCDKey.Text) == true) { return; } string cdkey = textBoxCDKey.Text.ToLower(); // 퍼미션 uuid // CDKEY를 이용하여 퍼미션 테이블에 userID(요청코드), userPWD(인증코드)를 등록한다. // 인증성공한 경우 string strErr = string.Empty; if (string.IsNullOrEmpty(_SN)) strErr += "요청코드,"; if (string.IsNullOrEmpty(strPWD)) strErr += "인증키,"; if (string.IsNullOrEmpty(cdkey)) strErr += "인증키"; if (strErr != "") { String strMsg; if (strErr.Substring(strErr.Length - 1, 1) == ",") strErr = strErr.TrimEnd(','); strMsg = string.Format("{0}가 없습니다.", strErr); MessageBox.Show(strMsg); return; }//end of if RegisterAuthenticationKey(_SN, strPWD, cdkey); } private void btnRemoveAC_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(textBoxCDKey.Text) == true) { return; } var resultAnswer = MessageBox.Show(this, Resources.YesNoDelAuthCode, Resources.ProductName, MessageBoxButtons.YesNo); if (resultAnswer != System.Windows.Forms.DialogResult.Yes) return; string cdkey = textBoxCDKey.Text.ToLower(); // 퍼미션 uuid // CDKEY를 이용하여 퍼미션 테이블에 userID(요청코드), userPWD(인증코드)를 등록한다. // 인증성공한 경우 string strErr = string.Empty; if (string.IsNullOrEmpty(_SN)) strErr += "아이디,"; if (string.IsNullOrEmpty(strPWD)) strErr += "비번,"; if (string.IsNullOrEmpty(cdkey)) strErr += "인증키"; if (strErr != "") { String strMsg; if (strErr.Substring(strErr.Length - 1, 1) == ",") strErr = strErr.TrimEnd(','); strMsg = string.Format("{0}가 없습니다.", strErr); MessageBox.Show(strMsg); return; }//end of if bool bOk = RemoveAuthenticationKey(_SN, strPWD, cdkey); if (bOk) { UpdateCDKEY(); } } private void buttonTestRequestCDKey_Click(object sender, EventArgs e) { AuthKey auth = new AuthKey(); string strSN = textBoxReqCode.Text; string strAC = auth.GetAuthCode(_SN); //RequestCDKey(_SN, auth.GetAuthCode(_SN)); string strParam = string.Empty; strParam = string.Format("{0}={1}|{2}={3}|{4}={5}|{6}={7}|{8}={9}|{10}={11}", Define.STRING_PRODUCTNAME_TAG, "KMBIM", Define.STRING_CURVER_TAG, "01", Define.STRING_PLATFORM_TAG, "Revit", Define.STRING_ID_TAG, strSN, // 사용자ID Define.STRING_PASS_TAG, strAC, // 사용자PWD Define.STRING_FUNCTION_TAG, "GetPermissionUser"); List strArray = new List(); bool bOk = false; try { // 처음 사용자에게 할당된 'user_uuid', 'CD키', '제폼', '버전번호', '플랫폼' 으로 퍼미션을 가져온다. // 만약 사용자가 퍼미션에서 인능키제거(user_uuid)를 삭제 // 여기서 한가지 문제점은 사용자가 CDKEY 코드를 bOk = CommonFunc.CallAspx(strParam, ref strArray); // [ iknow 2012-5-29 ] if (bOk) { string cdkey = CommonFunc.StrArrayValue(ref strArray, "cdkey"); string cdkey_certification = CommonFunc.StrArrayValue(ref strArray, "cdkey_certification"); if (cdkey_certification == "1") { textBoxCDKey.Text = cdkey.ToUpper(); } string start_date = CommonFunc.StrArrayValue(ref strArray, "start_date"); string end_date = CommonFunc.StrArrayValue(ref strArray, "end_date"); //DateTime dtS1 = new DateTime(); // 시작일 //DateTime dtE1 = new DateTime(); // 종료일 } else { string strMsg = CommonFunc.StrArrayValue(ref strArray, Define.STRING_MSG_TAG); if (!string.IsNullOrEmpty(strMsg)) { MessageBox.Show(strMsg, Resources.ProductName); } } } catch (Exception ex) { MessageBox.Show(ex.ToString(), "KMBIM.Revit.Tools"); } } } }