rule.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package controllers
  2. import (
  3. "encoding/json"
  4. log "github.com/sirupsen/logrus"
  5. "io"
  6. "net/http"
  7. "pmail/db"
  8. "pmail/dto"
  9. "pmail/dto/response"
  10. "pmail/i18n"
  11. "pmail/services/rule"
  12. "pmail/utils/address"
  13. "pmail/utils/array"
  14. "pmail/utils/context"
  15. )
  16. func GetRule(ctx *context.Context, w http.ResponseWriter, req *http.Request) {
  17. res := rule.GetAllRules(ctx)
  18. response.NewSuccessResponse(res).FPrint(w)
  19. }
  20. func UpsertRule(ctx *context.Context, w http.ResponseWriter, req *http.Request) {
  21. requestBody, err := io.ReadAll(req.Body)
  22. if err != nil {
  23. log.WithContext(ctx).Errorf("ReadError:%v", err)
  24. return
  25. }
  26. var data *dto.Rule
  27. err = json.Unmarshal(requestBody, &data)
  28. if err != nil {
  29. response.NewErrorResponse(response.ParamsError, "params error", err).FPrint(w)
  30. return
  31. }
  32. if data.Action == dto.FORWARD && !address.IsValidEmailAddress(data.Params) {
  33. response.NewErrorResponse(response.ParamsError, "ParamsError error", i18n.GetText(ctx.Lang, "invalid_email_address")).FPrint(w)
  34. return
  35. }
  36. for _, r := range data.Rules {
  37. if !array.InArray(r.Field, []string{"From", "Subject", "To", "Cc", "Text", "Html", "Content"}) {
  38. response.NewErrorResponse(response.ParamsError, "ParamsError error", "params error! Rule Field Error!").FPrint(w)
  39. return
  40. }
  41. }
  42. err = data.Encode().Save(ctx)
  43. if err != nil {
  44. response.NewErrorResponse(response.ServerError, "server error", err).FPrint(w)
  45. return
  46. }
  47. response.NewSuccessResponse("succ").FPrint(w)
  48. }
  49. type delRuleReq struct {
  50. Id int `json:"id"`
  51. }
  52. func DelRule(ctx *context.Context, w http.ResponseWriter, req *http.Request) {
  53. requestBody, err := io.ReadAll(req.Body)
  54. if err != nil {
  55. log.WithContext(ctx).Errorf("ReadError:%v", err)
  56. return
  57. }
  58. var data delRuleReq
  59. err = json.Unmarshal(requestBody, &data)
  60. if err != nil {
  61. response.NewErrorResponse(response.ParamsError, "params error", err).FPrint(w)
  62. return
  63. }
  64. if data.Id <= 0 {
  65. response.NewErrorResponse(response.ParamsError, "params error", "id is empty").FPrint(w)
  66. return
  67. }
  68. _, err = db.Instance.Exec(db.WithContext(ctx, "delete from rule where id =? and user_id =?"), data.Id, ctx.UserID)
  69. if err != nil {
  70. response.NewErrorResponse(response.ServerError, "unknown error", err).FPrint(w)
  71. return
  72. }
  73. response.NewSuccessResponse("succ").FPrint(w)
  74. }