using System; using System.Linq; using System.Net.Http; using System.Web.Http; using Newtonsoft.Json; using System.Collections.Generic; using FCOMMON; namespace Project.Web.Controllers { // 로그인 요청 모델 public class LoginRequest { public string Gcode { get; set; } public string UserId { get; set; } public string Password { get; set; } public bool RememberMe { get; set; } } // 로그인 응답 모델 public class LoginResponse { public bool Success { get; set; } public string Message { get; set; } public string RedirectUrl { get; set; } public object UserData { get; set; } } public class HomeController : BaseController { [HttpPost] public void Index([FromBody]string value) { } // PUT api/values/5 public void Put(int id, [FromBody]string value) { } // DELETE api/values/5 public void Delete(int id) { } [HttpGet] public string Test() { return "test"; } [HttpGet] public string TestLogin() { return "HomeController Login Test - 접근 성공!"; } [HttpPost] public HttpResponseMessage Login([FromBody] LoginRequest request) { var response = new LoginResponse(); try { // 입력값 검증 if (string.IsNullOrEmpty(request?.Gcode) || string.IsNullOrEmpty(request?.UserId) || string.IsNullOrEmpty(request?.Password)) { response.Success = false; response.Message = "그룹코드/사용자ID/비밀번호를 입력해주세요."; return CreateJsonResponse(response); } // TODO: 여기에 실제 데이터베이스 로그인 로직을 구현하세요 // 예시: 데이터베이스에서 사용자 정보 확인 bool isValidUser = ValidateUser(request.Gcode, request.UserId, request.Password); if (isValidUser) { // 로그인 성공 response.Success = true; response.Message = "로그인에 성공했습니다."; response.RedirectUrl = "/DashBoard"; // 사용자 정보 설정 (세션 또는 쿠키) SetUserSession(request.Gcode, request.UserId, request.RememberMe); // 사용자 데이터 반환 response.UserData = new { Gcode = request.Gcode, UserId = request.UserId, LoginTime = DateTime.Now, RememberMe = request.RememberMe }; } else { // 로그인 실패 response.Success = false; response.Message = "사용자 ID 또는 비밀번호가 올바르지 않습니다."; } } catch (Exception ex) { response.Success = false; response.Message = "로그인 처리 중 오류가 발생했습니다: " + ex.Message; } return CreateJsonResponse(response); } [HttpPost] public HttpResponseMessage Logout() { var response = new LoginResponse(); try { // TODO: 여기에 로그아웃 로직을 구현하세요 // 예시: 세션 정리, 쿠키 삭제 등 ClearUserSession(); response.Success = true; response.Message = "로그아웃되었습니다."; response.RedirectUrl = "/Login"; } catch (Exception ex) { response.Success = false; response.Message = "로그아웃 처리 중 오류가 발생했습니다: " + ex.Message; } return CreateJsonResponse(response); } [HttpGet] public HttpResponseMessage CheckLoginStatus() { var response = new LoginResponse(); try { // TODO: 여기에 로그인 상태 확인 로직을 구현하세요 // 예시: 세션 또는 쿠키에서 사용자 정보 확인 var currentUser = GetCurrentUser(); if (currentUser != null) { response.Success = true; response.Message = "로그인된 상태입니다."; response.UserData = currentUser; } else { response.Success = false; response.Message = "로그인되지 않은 상태입니다."; response.RedirectUrl = "/Login"; } } catch (Exception ex) { response.Success = false; response.Message = "로그인 상태 확인 중 오류가 발생했습니다: " + ex.Message; } return CreateJsonResponse(response); } // 헬퍼 메서드들 private bool ValidateUser(string gcode, string userId, string password) { // TODO: 실제 데이터베이스 검증 로직을 여기에 구현하세요 // 예시: 데이터베이스에서 사용자 정보 조회 및 비밀번호 검증 var encpass = Pub.MakePasswordEnc(password.Trim()); var GInfo = DBM.GetUserGroup(gcode); if (GInfo == null) return false; var UGInfo = DBM.GetGroupUser(gcode, userId); if (UGInfo == null) return false; var UInfo = DBM.GetUserInfo(userId); if (UInfo == null) return false; return UInfo.password.Equals(encpass); } private void SetUserSession(string gcode, string userId, bool rememberMe) { // TODO: 세션 또는 쿠키에 사용자 정보 저장 // 예시: HttpContext.Session["UserId"] = userId; // 예시: 쿠키 설정 (rememberMe가 true인 경우) //데이터베이스에서 해당 정보를 찾아와서 처리해야한다 var GInfo = DBM.GetUserGroup(gcode); var UGInfo = DBM.GetGroupUser(gcode, userId); var UInfo = DBM.GetUserInfo(userId); info.Login.no = userId; info.Login.nameK = UInfo.name; info.Login.dept = GInfo.name; info.Login.level = UGInfo.level; info.Login.email = UInfo.email; info.Login.hp = UInfo.hp; info.Login.tel = UInfo.tel; info.Login.title = GInfo.name + "(" + UInfo.grade + ")"; info.NotShowJobReportview = Pub.setting.NotShowJobreportPRewView; info.Login.gcode = gcode;// gcode; info.Login.process = UInfo.id == "dev" ? "개발자" : UGInfo.Process; info.Login.permission = UGInfo.level; info.Login.gpermission = GInfo.perm; info.ShowBuyerror = Pub.setting.Showbuyerror; //210625 //로그인기록저장 Pub.setting.lastid = userId;// tbID.Text.Trim(); Pub.setting.lastdpt = GInfo.name; Pub.setting.lastgcode = GInfo.gcode; Pub.setting.Save(); } private void ClearUserSession() { // TODO: 세션 또는 쿠키에서 사용자 정보 삭제 FCOMMON.info.Login.no = string.Empty; FCOMMON.info.Login.level = 0; FCOMMON.info.Login.gcode = string.Empty; FCOMMON.info.Login.permission = 0; FCOMMON.info.Login.gpermission = 0; Console.WriteLine("logout"); } private object GetCurrentUser() { // TODO: 현재 로그인된 사용자 정보 반환 // 예시: HttpContext.Session["UserId"]에서 사용자 정보 조회 if (string.IsNullOrEmpty(FCOMMON.info.Login.no)) return null; else return FCOMMON.info.Login; } private HttpResponseMessage CreateJsonResponse(object data) { var json = JsonConvert.SerializeObject(data, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); return new HttpResponseMessage() { Content = new StringContent( json, System.Text.Encoding.UTF8, "application/json") }; } [HttpGet] public HttpResponseMessage Login() { // 직접 파일을 읽어서 반환 var filePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Web", "wwwroot", "login.html"); var contents = string.Empty; if (System.IO.File.Exists(filePath)) { contents = System.IO.File.ReadAllText(filePath, System.Text.Encoding.UTF8); } else { // 파일이 없으면 404 에러 페이지 또는 기본 메시지 contents = "
The requested file was not found: " + filePath + "
"; } //공용값 적용 ApplyCommonValue(ref contents); var resp = new HttpResponseMessage() { Content = new StringContent( contents, System.Text.Encoding.UTF8, "text/html") }; return resp; } [HttpGet] public HttpResponseMessage Index() { // 직접 파일을 읽어서 반환 var filePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Web", "wwwroot", "index.html"); var contents = string.Empty; if (System.IO.File.Exists(filePath)) { contents = System.IO.File.ReadAllText(filePath, System.Text.Encoding.UTF8); } else { // 파일이 없으면 404 에러 페이지 또는 기본 메시지 contents = "The requested file was not found: " + filePath + "
"; } //공용값 적용 ApplyCommonValue(ref contents); var resp = new HttpResponseMessage() { Content = new StringContent( contents, System.Text.Encoding.UTF8, "text/html") }; return resp; } [HttpGet] public HttpResponseMessage GetPreviousLoginInfo() { try { // pub.setting에서 이전 로그인 정보 읽기 var previousLoginInfo = new { Gcode = Pub.setting.lastgcode ?? "", UserId = Pub.setting.lastid ?? "", Dept = Pub.setting.lastdpt ?? "", RememberMe = false // 기본값으로 설정 }; return CreateJsonResponse(new { Success = true, Data = previousLoginInfo }); } catch (Exception ex) { return CreateJsonResponse(new { Success = false, Message = "이전 로그인 정보를 가져오는 중 오류가 발생했습니다: " + ex.Message }); } } } }