thewar_server/Server/System/GItWebhook.cs

72 lines
2.2 KiB
C#

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";
}
}
}