github.com/hellofresh/janus@v0.0.0-20230925145208-ce8de8183c67/pkg/jwt/provider/verifier.go (about) 1 package provider 2 3 import ( 4 "fmt" 5 "net/http" 6 ) 7 8 // Verifier contains the methods for verification of providers 9 type Verifier interface { 10 Verify(r *http.Request, httpClient *http.Client) (bool, error) 11 } 12 13 // VerifierBasket acts as a collection of verifier 14 type VerifierBasket struct { 15 verifiers []Verifier 16 } 17 18 //NewVerifierBasket creates a new instace of VerifierBasket 19 func NewVerifierBasket(verifiers ...Verifier) *VerifierBasket { 20 return &VerifierBasket{verifiers: verifiers} 21 } 22 23 // Verify checks is the provider is valid 24 func (vb *VerifierBasket) Verify(r *http.Request, httpClient *http.Client) (bool, error) { 25 var wrappedErrors error 26 27 for _, verifier := range vb.verifiers { 28 verified, err := verifier.Verify(r, httpClient) 29 if err != nil { 30 wrappedErrors = fmt.Errorf("verification failed: %w", err) 31 continue 32 } 33 if verified { 34 return true, nil 35 } 36 } 37 38 return false, wrappedErrors 39 }