using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows.Forms; using Newtonsoft.Json; using FCOMMON; namespace Project.Web { public partial class MachineBridge { #region Login API /// /// 로그인 처리 (fLogin_WB.cs의 button1_Click 로직 참고) /// public string Login(string gcode, string id, string password, bool rememberMe) { var result = new LoginResult(); DateTime dt = DateTime.Now; try { if (string.IsNullOrEmpty(id)) { result.Success = false; result.Message = "사용자 ID를 입력하세요."; return JsonConvert.SerializeObject(result); } if (string.IsNullOrEmpty(password)) { result.Success = false; result.Message = "비밀번호를 입력하세요."; return JsonConvert.SerializeObject(result); } if (string.IsNullOrEmpty(gcode)) { result.Success = false; result.Message = "소속 부서를 선택하세요."; return JsonConvert.SerializeObject(result); } // 부서명 조회 var deptName = DBM.ExecuteScalar($"SELECT dept FROM UserGroup WHERE gcode = '{gcode}'") ?? ""; var encpass = Pub.MakePasswordEnc(password.Trim()); // 개발자 계정 처리 if (id.ToUpper().Equals("DEV")) { if (!password.Equals("123")) { result.Success = false; result.Message = "암호가 일치하지 않습니다."; return JsonConvert.SerializeObject(result); } SetDevLoginInfo(gcode, deptName); } else { // 일반 사용자 로그인 처리 var taGrpUser = new dsMSSQLTableAdapters.EETGW_GroupUserTableAdapter(); var drGrpUser = taGrpUser.GetbyID(gcode, id).FirstOrDefault(); if (drGrpUser == null) { result.Success = false; result.Message = $"입력한 사용자 계정이 존재하지 않습니다.\n\n담당부서명:{deptName}\n부서코드:{gcode}\n\n접속 부서를 확인하시고 관리자 문의 하세요"; return JsonConvert.SerializeObject(result); } if (drGrpUser.level == 0) { result.Success = false; result.Message = "해당 계정이 활성화되지 않았습니다.\n계정 담당자 문의하세요"; return JsonConvert.SerializeObject(result); } // 사용자 테이블에서 암호 확인 var taUser = new dsMSSQLTableAdapters.UsersTableAdapter(); var drUser = taUser.GetID(id).FirstOrDefault(); if (drUser == null) { result.Success = false; result.Message = $"입력한 사용자 계정이 존재하지 않습니다.\n\n담당부서명:{deptName}\n부서코드:{gcode}\n\n접속 부서를 확인하시고 관리자 문의 하세요"; return JsonConvert.SerializeObject(result); } if (!drUser.password.Equals(encpass)) { result.Success = false; result.Message = "암호가 일치하지 않습니다.\n암호를 분실했을 경우에는 계정담당자에 초기화를 요청 하세요"; return JsonConvert.SerializeObject(result); } // 버전 체크 var MaxVersion = DBM.GetMaxVersion(); if (!MaxVersion.isEmpty()) { var curversion = Application.ProductVersion; var verchk = curversion.CompareTo(MaxVersion); if (verchk < 0) { result.VersionWarning = "현재 구 버젼을 사용하고 있습니다.\n업데이트를 진행 하고 사용하시기 바랍니다"; } } // 로그인 정보 설정 var gperm = DBM.ExecuteScalar($"SELECT ISNULL(permission,0) FROM UserGroup WHERE gcode = '{gcode}'"); info.Login.no = drUser.id; info.Login.nameK = drUser.name; info.Login.dept = deptName; info.Login.level = drGrpUser.level; info.Login.email = drUser.email; info.Login.nameE = drUser.nameE; info.Login.hp = drUser.hp; info.Login.tel = drUser.tel; info.Login.title = drUser.dept + "(" + drUser.grade + ")"; info.NotShowJobReportview = Pub.setting.NotShowJobreportPRewView; info.Login.gcode = gcode; info.Login.process = drGrpUser.Process; info.Login.permission = 0; info.Login.gpermission = int.Parse(gperm); info.ShowBuyerror = Pub.setting.Showbuyerror; } // 설정 저장 (rememberMe 처리) if (rememberMe) { var idlist = new List { id.Trim() }; var vuserlist = ""; foreach (var item in idlist) vuserlist += ";" + item; Pub.setting.lastid = vuserlist; Pub.setting.lastdpt = deptName; Pub.setting.lastgcode = gcode; Pub.setting.Save(); } // 로그인 정보 기록 AddLoginInfo(); // 자동 업무일지 생성 Pub.MakeAutoJobReportbyLogin(); Pub.MakeAutoJobReportByAuto(); info.Login.loginusetime = (DateTime.Now - dt).TotalMilliseconds; // fMain의 로그인 완료 후처리 호출 CallMainFormLoginCompleted(); result.Success = true; result.Message = "로그인 성공"; result.RedirectUrl = "/DashBoard/index.html"; result.UserName = info.Login.nameK; } catch (Exception ex) { result.Success = false; result.Message = "데이터베이스 조회 실패. 다음 오류 메세지를 참고하세요.\n\n" + ex.Message; } return JsonConvert.SerializeObject(result); } /// /// fMain의 OnLoginCompleted() 호출 /// private void CallMainFormLoginCompleted() { try { // Application.OpenForms에서 fMain 인스턴스 찾기 foreach (Form form in Application.OpenForms) { if (form is fMain mainForm) { // UI 스레드에서 실행 if (mainForm.InvokeRequired) { mainForm.Invoke(new Action(() => mainForm.OnLoginCompleted())); } else { mainForm.OnLoginCompleted(); } break; } } } catch (Exception ex) { Console.WriteLine($"OnLoginCompleted 호출 오류: {ex.Message}"); } } /// /// 개발자 로그인 정보 설정 /// private void SetDevLoginInfo(string gcode, string deptName) { var gperm = DBM.ExecuteScalar($"SELECT ISNULL(permission,0) FROM UserGroup WHERE gcode = '{gcode}'"); info.Login.no = "dev"; info.Login.nameK = "개발자"; info.Login.dept = deptName; info.Login.level = 10; info.Login.email = ""; info.Login.nameE = "DEVELOPER"; info.Login.hp = ""; info.Login.tel = ""; info.Login.title = "업무일지 개발자"; info.NotShowJobReportview = Pub.setting.NotShowJobreportPRewView; info.Login.gcode = gcode; info.Login.process = "개발자"; info.Login.permission = 0; info.Login.gpermission = int.Parse(gperm); info.ShowBuyerror = Pub.setting.Showbuyerror; } /// /// 로그인 정보 기록 /// private void AddLoginInfo() { string ip = string.Empty; string hostname = Dns.GetHostName(); string fullname = Dns.GetHostEntry("").HostName; var host = Dns.GetHostEntry(hostname); foreach (IPAddress r in host.AddressList) { string str = r.ToString(); if (!string.IsNullOrEmpty(str) && str.StartsWith("10.")) { ip = str; break; } } if (string.IsNullOrEmpty(ip) || string.IsNullOrEmpty(hostname)) return; try { var ta = new dsMSSQLTableAdapters.EETGW_LoginInfoTableAdapter(); ta.Insert(info.Login.no, DateTime.Now, ip, fullname, info.Login.no, DateTime.Now); } catch (Exception ex) { Console.WriteLine(ex.Message); } } /// /// 그룹 목록 조회 /// public string GetUserGroups() { var dt = DBM.GetUserGroups(); return JsonConvert.SerializeObject(dt, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); } /// /// 이전 로그인 정보 조회 /// public string GetPreviousLoginInfo() { var result = new { Success = true, Data = new { LastGcode = Pub.setting.lastgcode ?? "", LastDept = Pub.setting.lastdpt ?? "", LastId = Pub.setting.lastid?.TrimStart(';').Split(';').FirstOrDefault() ?? "" } }; return JsonConvert.SerializeObject(result); } #endregion } }