github.com/tuingking/flamingo@v0.0.0-20220403134817-2796ae0e84ca/handler/rest/middleware/satpam.go (about) 1 package middleware 2 3 import ( 4 "context" 5 "net/http" 6 7 "github.com/pkg/errors" 8 "github.com/sirupsen/logrus" 9 "github.com/tuingking/flamingo/infra/contextkey" 10 "github.com/tuingking/flamingo/internal/auth" 11 ) 12 13 var ( 14 ErrNoTokenFound = errors.New("no token found") 15 ErrUnauthorized = errors.New("token is unauthorized") 16 ErrAlgoInvalid = errors.New("algorithm mismatch") 17 ErrExpired = errors.New("token is expired") 18 ) 19 20 // Satpam is middleware to verify access token taken from `Authorization: Bearer ...` 21 func Satpam(authsvc auth.Service) func(http.Handler) http.Handler { 22 return func(next http.Handler) http.Handler { 23 fn := func(w http.ResponseWriter, r *http.Request) { 24 accessToken := r.Header.Get("Authorization") 25 claims, err := authsvc.VerifyAccessToken(accessToken) 26 if err != nil { 27 logrus.Error(errors.Wrap(err, "[SATPAM] VerifyAccessToken")) 28 http.Error(w, "Unauthorized", http.StatusUnauthorized) 29 return 30 } 31 32 ctx := context.WithValue(r.Context(), contextkey.Identity, claims) 33 34 next.ServeHTTP(w, r.WithContext(ctx)) 35 } 36 return http.HandlerFunc(fn) 37 } 38 }