sso.go 982 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package middleware
  2. import (
  3. "kpt-tmr-group/pkg/apierr"
  4. "kpt-tmr-group/pkg/jwt"
  5. commonPb "kpt-tmr-group/proto/go/backend/common"
  6. "net/http"
  7. "strings"
  8. "github.com/gin-gonic/gin"
  9. )
  10. const (
  11. Authorization = "Authorization"
  12. ToKenPrefix = "Bearer "
  13. UserName = "userName"
  14. )
  15. func GetToken(c *gin.Context) string {
  16. value := c.Request.Header.Get(Authorization)
  17. if value != "" && strings.HasPrefix(value, ToKenPrefix) {
  18. return strings.TrimPrefix(value, ToKenPrefix)
  19. }
  20. return ""
  21. }
  22. func unauthorized(c *gin.Context) {
  23. c.AbortWithStatusJSON(http.StatusBadRequest, apierr.WithContext(c, commonPb.Error_UNAUTHORIZED))
  24. }
  25. // RequireAdmin ...
  26. func RequireAdmin() gin.HandlerFunc {
  27. return func(c *gin.Context) {
  28. token := GetToken(c)
  29. if token == "" {
  30. unauthorized(c)
  31. return
  32. }
  33. claims, err := jwt.ParseToken(token)
  34. if err != nil || claims == nil || claims.Username == "" {
  35. unauthorized(c)
  36. return
  37. }
  38. c.Set(UserName, claims.Username)
  39. c.Next()
  40. }
  41. }