webhook_middleware.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package middleware
  2. import (
  3. "encoding/json"
  4. "eta/eta_mini_ht_api/common/component/config"
  5. logger "eta/eta_mini_ht_api/common/component/log"
  6. "eta/eta_mini_ht_api/common/contants"
  7. "eta/eta_mini_ht_api/common/utils/auth"
  8. "fmt"
  9. "github.com/beego/beego/v2/server/web"
  10. "github.com/beego/beego/v2/server/web/context"
  11. )
  12. var (
  13. htConfig = config.GetConfig(contants.HT).(*config.HTBizConfig)
  14. )
  15. func WebHookAuthMiddleware() web.FilterFunc {
  16. return func(ctx *context.Context) {
  17. body := ctx.Input.RequestBody
  18. webhookRequest := new(WebhookRequest)
  19. err := json.Unmarshal(body, &webhookRequest)
  20. if err != nil {
  21. rep := webhookUnauthorized("请求参数异常")
  22. logger.Error("WebhookRequest解析失败: %v", err)
  23. _ = ctx.JSONResp(rep)
  24. return
  25. }
  26. privateKey, err := auth.ParsePrivateKey(htConfig.GetWebhookPrivateKey())
  27. if err != nil {
  28. rep := webhookUnauthorized("系统异常")
  29. logger.Error("解析私钥失败: %v", err)
  30. _ = ctx.JSONResp(rep)
  31. return
  32. }
  33. logger.Info("解码请求: %v", webhookRequest.Data)
  34. decodeData, err := auth.DecryptWithRSA(privateKey, webhookRequest.Data)
  35. if err != nil {
  36. rep := webhookUnauthorized("解密请求体失败")
  37. logger.Error("解密请求体失败: %v", err)
  38. _ = ctx.JSONResp(rep)
  39. return
  40. }
  41. fmt.Printf("解密后的请求: %v", string(decodeData))
  42. ctx.Input.RequestBody = decodeData
  43. return
  44. }
  45. }
  46. type WebhookRequest struct {
  47. Data string `json:"data"`
  48. //EncryptKey string `json:"encryptKey"`
  49. }