using NLog; using Server.Git; namespace Server.System { public class GItWebhook { private static readonly NLog.ILogger logger = LogManager.GetCurrentClassLogger(); public static Thread thread; private static AbstractGit git; public static ErrorResp successResp; public static string Process(HttpContext context) { //TODO 아무때나 호출되지 않게 만들기 string Response; try { string eaDelivery = context.Request.Headers["X-Gitea-Delivery"]; logger.Info($"SaveVersion : {eaDelivery}"); //task를 쓰면 멈출수가 없기에 thread를 사용 Response = successResp.ToJson(); //무작위 공격을 대비한 1차적인 방어조치 if (eaDelivery == "" || eaDelivery.Length < 30) return Response; ProtocolProcessor.version = eaDelivery; if (thread.ThreadState == ThreadState.Unstarted) { thread.Start(); } else if (thread.ThreadState == ThreadState.Stopped) { thread = new Thread(git.Init); thread.Start(); } else if (thread.ThreadState == ThreadState.WaitSleepJoin || thread.ThreadState == ThreadState.Running) { git.isRestart = true; } } catch (RuntimeException ex) { ErrorResp error = new ErrorResp(ex); Response = error.ToJson(); logger.Error("GetErrorResponse : " + Response); } catch (Exception ex) { ErrorResp error = new ErrorResp(); Response = error.ToJson(); logger.Error("GetErrorResponse : " + ex.ToString()); } return Response; } public static void Init() { git = new XlsxToJson(); thread = new Thread(git.Init); successResp.status = 200; successResp.message = "Success"; } } }