Instance.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using DaJiaoYan.Utils;
  2. using System.Net;
  3. using System.Text.RegularExpressions;
  4. using System.Threading;
  5. namespace DaJiaoYan.Services
  6. {
  7. internal class Instance
  8. {
  9. public static void Run()
  10. {
  11. Functions.UUIDBackgroundFunc();
  12. FileExts.CheckDirectory(Variables.Const.TMP_PATH, true);
  13. InitHttpServer();
  14. }
  15. public static void InitHttpServer()
  16. {
  17. AsyncHttpServer httpServer = new AsyncHttpServer(Variables.Const.TMP_PATH);
  18. httpServer.RegisterMiddleware((HttpListenerRequest request, HttpListenerResponse response) =>
  19. {
  20. // cors middleware
  21. string origin = request.Headers.Get("origin");
  22. //string referer = request.Headers.Get("referer");
  23. if (!string.IsNullOrEmpty(origin))
  24. {
  25. var m = Regex.Match(origin, @"(https?:\/\/([^/]*\.dajiaoyan.com|dajiaoyan.com))", RegexOptions.IgnoreCase);
  26. if (m.Success)
  27. {
  28. response.Headers.Add("Access-Control-Allow-Credentials", "true");
  29. response.Headers.Add("Access-Control-Allow-Origin", origin);
  30. }
  31. }
  32. return true;
  33. });
  34. httpServer.RegisterMiddleware((HttpListenerRequest request, HttpListenerResponse response) =>
  35. {
  36. // options middleware
  37. response.StatusCode = 200;
  38. if (string.Equals(request.HttpMethod, "OPTIONS", System.StringComparison.OrdinalIgnoreCase))
  39. {
  40. response.Headers.Add("Access-Control-Allow-Methods", "GET, POST, PATCH, OPTIONS, PUT, DELETE");
  41. response.Headers.Add("Access-Control-Allow-Headers", "AppName,AppVersion,Authorization,Platform");
  42. return false;
  43. }
  44. return true;
  45. });
  46. httpServer.RegisterPrefix("/ping", new PingHandler(httpServer));
  47. httpServer.RegisterPrefix("/scanners", new ScannerHandler(httpServer));
  48. httpServer.RegisterPrefix("/scan", new ScanHandler(httpServer));
  49. httpServer.RegisterPrefix("/upload", new UploadHandler(httpServer));
  50. new Thread(State => { _ = httpServer.StartAsync(); })
  51. {
  52. IsBackground = true
  53. }.Start();
  54. }
  55. }
  56. }