385 lines
13 KiB
C#
385 lines
13 KiB
C#
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());
|
|
|
|
if(userId.ToLower()=="dev" && password == "123")
|
|
{
|
|
return true;
|
|
}
|
|
|
|
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)
|
|
{
|
|
if(userId.ToLower().Equals("dev"))
|
|
{
|
|
var GInfo = DBM.GetUserGroup(gcode);
|
|
var UInfo = DBM.GetUserInfo(userId);
|
|
|
|
info.Login.no = "dev";
|
|
info.Login.nameK = "개발자";
|
|
info.Login.dept = GInfo.name;
|
|
info.Login.level = 9;
|
|
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 = "개발자";
|
|
info.Login.permission =GInfo.perm;
|
|
info.Login.gpermission = GInfo.perm;
|
|
info.ShowBuyerror = Pub.setting.Showbuyerror; //210625
|
|
|
|
}
|
|
else
|
|
{
|
|
// TODO: 세션 또는 쿠키에 사용자 정보 저장
|
|
// 예시: HttpContext.Session["UserId"] = userId;
|
|
// 예시: 쿠키 설정 (rememberMe가 true인 경우)
|
|
//데이터베이스에서 해당 정보를 찾아와서 처리해야한다
|
|
var GInfo = DBM.GetUserGroup(gcode);
|
|
var UInfo = DBM.GetUserInfo(userId);
|
|
var UGInfo = DBM.GetGroupUser(gcode, 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 = "<html><body><h1>404 - File Not Found</h1><p>The requested file was not found: " + filePath + "</p></body></html>";
|
|
}
|
|
|
|
//공용값 적용
|
|
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 = "<html><body><h1>404 - File Not Found</h1><p>The requested file was not found: " + filePath + "</p></body></html>";
|
|
}
|
|
|
|
//공용값 적용
|
|
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
|
|
});
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|