service.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // 对外服务
  2. package main
  3. import (
  4. "crypto/tls"
  5. _ "embed"
  6. "encoding/json"
  7. "fmt"
  8. "log"
  9. "net/http"
  10. "github.com/wailsapp/wails/v2/pkg/runtime"
  11. )
  12. const (
  13. LISTEN_ADDR = ":8080"
  14. )
  15. type (
  16. SpiderConfigItem struct {
  17. Key string `json:"key"`
  18. Css string `json:"css"`
  19. }
  20. )
  21. var (
  22. //go:embed cert.pem
  23. certBytes []byte
  24. //go:embed key.pem
  25. keyBytes []byte
  26. )
  27. func runHttpServe() {
  28. // 设置HTTP服务器
  29. mux := http.NewServeMux()
  30. // 解析证书
  31. cert, err := tls.X509KeyPair(certBytes, keyBytes)
  32. if err != nil {
  33. log.Println(err.Error())
  34. return
  35. }
  36. // 创建一个TLS配置
  37. tlsConfig := &tls.Config{
  38. // 可以在这里添加其他TLS配置
  39. Certificates: []tls.Certificate{cert},
  40. ServerName: "localhost",
  41. InsecureSkipVerify: true,
  42. }
  43. server := &http.Server{
  44. Addr: LISTEN_ADDR,
  45. Handler: mux,
  46. TLSConfig: tlsConfig,
  47. }
  48. //这里注册HTTP服务
  49. mux.HandleFunc("/save", SaveSpiderConfig)
  50. mux.HandleFunc("/load", LoadSpiderConfig)
  51. //
  52. log.Println("Starting HTTPS server on ", LISTEN_ADDR)
  53. err = server.ListenAndServeTLS("", "")
  54. if err != nil {
  55. log.Println("Failed to start server: ", err.Error())
  56. return
  57. }
  58. }
  59. // LoadCurrentSpiderConfig,json处理
  60. func SaveSpiderConfig(w http.ResponseWriter, r *http.Request) {
  61. log.Println("保存设置")
  62. w.Header().Set("Access-Control-Allow-Origin", "*")
  63. w.Header().Set("Content-Type", "application/json")
  64. var req = new(SpiderConfigItem)
  65. err := json.NewDecoder(r.Body).Decode(req)
  66. if err != nil {
  67. log.Println("序列化失败")
  68. http.Error(w, err.Error(), http.StatusBadRequest)
  69. return
  70. }
  71. log.Println("CSS", req.Key, req.Css)
  72. //TODO 业务操作
  73. switch req.Key {
  74. case "listItemCss":
  75. currentSpiderConfig.ListItemCss = req.Css
  76. case "listLinkCss":
  77. currentSpiderConfig.ListLinkCss = req.Css
  78. case "listPublishTimeCss":
  79. currentSpiderConfig.ListPubtimeCss = req.Css
  80. case "listNextPageCss":
  81. currentSpiderConfig.ListNextPageCss = req.Css
  82. case "titleCss":
  83. currentSpiderConfig.TitleCss = req.Css
  84. case "publishUnitCss":
  85. currentSpiderConfig.PublishUnitCss = req.Css
  86. case "publishTimeCss":
  87. currentSpiderConfig.PublishTimeCss = req.Css
  88. case "contentCss":
  89. currentSpiderConfig.ContentCss = req.Css
  90. case "attachCss":
  91. currentSpiderConfig.AttachCss = req.Css
  92. }
  93. fmt.Fprint(w, "{'code':200}")
  94. db.SaveOrUpdate(currentSpiderConfig)
  95. //TODO 通知开发工具端,CSS选择器有变动
  96. runtime.EventsEmit(app.ctx, "spiderConfigChange", currentSpiderConfig)
  97. }
  98. // LoadCurrentSpiderConfig,加载,返回当前配置项
  99. func LoadSpiderConfig(w http.ResponseWriter, r *http.Request) {
  100. log.Println("加载当前配置项")
  101. w.Header().Set("Access-Control-Allow-Origin", "*")
  102. w.Header().Set("Content-Type", "application/json")
  103. err := json.NewEncoder(w).Encode(currentSpiderConfig)
  104. if err != nil {
  105. log.Println("反向序列化失败")
  106. http.Error(w, err.Error(), http.StatusBadRequest)
  107. return
  108. }
  109. }