handler.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package pathrule
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strconv"
  6. "github.com/google/uuid"
  7. "imuslab.com/zoraxy/mod/utils"
  8. )
  9. /*
  10. handler.go
  11. This script handles pathblock api
  12. */
  13. func (h *Handler) HandleListBlockingPath(w http.ResponseWriter, r *http.Request) {
  14. js, _ := json.Marshal(h.BlockingPaths)
  15. utils.SendJSONResponse(w, string(js))
  16. }
  17. func (h *Handler) HandleAddBlockingPath(w http.ResponseWriter, r *http.Request) {
  18. matchingPath, err := utils.PostPara(r, "matchingPath")
  19. if err != nil {
  20. utils.SendErrorResponse(w, "invalid matching path given")
  21. return
  22. }
  23. exactMatch, err := utils.PostPara(r, "exactMatch")
  24. if err != nil {
  25. utils.SendErrorResponse(w, "invalid exact match value given")
  26. return
  27. }
  28. statusCodeString, err := utils.PostPara(r, "statusCode")
  29. if err != nil {
  30. utils.SendErrorResponse(w, "invalid status code given")
  31. return
  32. }
  33. statusCode, err := strconv.Atoi(statusCodeString)
  34. if err != nil {
  35. utils.SendErrorResponse(w, "invalid status code given")
  36. return
  37. }
  38. enabled, err := utils.PostPara(r, "enabled")
  39. if err != nil {
  40. utils.SendErrorResponse(w, "invalid enabled value given")
  41. return
  42. }
  43. caseSensitive, err := utils.PostPara(r, "caseSensitive")
  44. if err != nil {
  45. utils.SendErrorResponse(w, "invalid case sensitive value given")
  46. return
  47. }
  48. targetBlockingPath := BlockingPath{
  49. UUID: uuid.New().String(),
  50. MatchingPath: matchingPath,
  51. ExactMatch: exactMatch == "true",
  52. StatusCode: statusCode,
  53. CustomHeaders: http.Header{},
  54. CustomHTML: []byte(""),
  55. Enabled: enabled == "true",
  56. CaseSenitive: caseSensitive == "true",
  57. }
  58. err = h.AddBlockingPath(&targetBlockingPath)
  59. if err != nil {
  60. utils.SendErrorResponse(w, err.Error())
  61. return
  62. }
  63. utils.SendOK(w)
  64. }
  65. func (h *Handler) HandleRemoveBlockingPath(w http.ResponseWriter, r *http.Request) {
  66. blockerUUID, err := utils.PostPara(r, "uuid")
  67. if err != nil {
  68. utils.SendErrorResponse(w, "invalid uuid given")
  69. return
  70. }
  71. targetRule := h.GetPathBlockerFromUUID(blockerUUID)
  72. if targetRule == nil {
  73. //Not found
  74. utils.SendErrorResponse(w, "target path blocker not found")
  75. return
  76. }
  77. err = h.RemoveBlockingPathByUUID(blockerUUID)
  78. if err != nil {
  79. utils.SendErrorResponse(w, err.Error())
  80. return
  81. }
  82. utils.SendOK(w)
  83. }