using DaJiaoYan.Utils; using System.Net; using System.Text.RegularExpressions; using System.Threading; namespace DaJiaoYan.Services { internal class Instance { public static void Run() { Functions.UUIDBackgroundFunc(); FileExts.CheckDirectory(Variables.Const.TMP_PATH, true); InitHttpServer(); } public static void InitHttpServer() { AsyncHttpServer httpServer = new AsyncHttpServer(Variables.Const.TMP_PATH); httpServer.RegisterMiddleware((HttpListenerRequest request, HttpListenerResponse response) => { // cors middleware string origin = request.Headers.Get("origin"); //string referer = request.Headers.Get("referer"); if (!string.IsNullOrEmpty(origin)) { var m = Regex.Match(origin, @"(https?:\/\/([^/]*\.dajiaoyan.com|dajiaoyan.com))", RegexOptions.IgnoreCase); if (m.Success) { response.Headers.Add("Access-Control-Allow-Credentials", "true"); response.Headers.Add("Access-Control-Allow-Origin", origin); } } return true; }); httpServer.RegisterMiddleware((HttpListenerRequest request, HttpListenerResponse response) => { // options middleware response.StatusCode = 200; if (string.Equals(request.HttpMethod, "OPTIONS", System.StringComparison.OrdinalIgnoreCase)) { response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PATCH, OPTIONS, PUT, DELETE"); response.Headers.Add("Access-Control-Allow-Headers", "AppName,AppVersion,Authorization,Platform"); return false; } return true; }); httpServer.RegisterPrefix("/ping", new PingHandler(httpServer)); httpServer.RegisterPrefix("/scanners", new ScannerHandler(httpServer)); httpServer.RegisterPrefix("/scan", new ScanHandler(httpServer)); httpServer.RegisterPrefix("/upload", new UploadHandler(httpServer)); new Thread(State => { _ = httpServer.StartAsync(); }) { IsBackground = true }.Start(); } } }