sign_auth.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. package middleware
  2. import (
  3. "app/commons/core"
  4. "fmt"
  5. "github.com/gin-gonic/gin"
  6. "net/http"
  7. )
  8. const SignKey = "sign"
  9. func ExtendAuthWithName() gin.HandlerFunc {
  10. return func(c *gin.Context) {
  11. sign := c.GetHeader(SignKey)
  12. if sign == "" {
  13. c.AbortWithStatusJSON(http.StatusUnauthorized, core.ResponseSignError.SetMsg(fmt.Sprintf("GetHeader :%s is null", SignKey)))
  14. return
  15. }
  16. // 获取所有支持的系统前缀
  17. sysName, err := core.GetSignSysName(sign)
  18. if err != nil {
  19. c.AbortWithStatusJSON(http.StatusUnauthorized, core.ResponseSignError.SetMsg(fmt.Sprintf("SignerBySysName err:%s", err.Error())))
  20. return
  21. }
  22. signer, err := core.SignerBySysName(sysName)
  23. if err != nil {
  24. c.AbortWithStatusJSON(http.StatusUnauthorized, core.ResponseSignError.SetMsg(fmt.Sprintf("SignerBySysName err:%s", err.Error())))
  25. return
  26. }
  27. core.Log.Infof("sign:%s \n sign sys:%s address:%s", sign, sysName, signer.SysAddress)
  28. if err := signer.VerifySignature(sign); err != nil {
  29. c.AbortWithStatusJSON(http.StatusUnauthorized, core.ResponseSignError.SetMsg(fmt.Sprintf("VerifySignature err:%s", err.Error())))
  30. return
  31. }
  32. c.Next()
  33. }
  34. }