webhook_middleware.go 1.6 KB

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