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  }