diff --git a/internal/http/request.go b/internal/http/request.go index 6549e22..74f1030 100644 --- a/internal/http/request.go +++ b/internal/http/request.go @@ -3,6 +3,7 @@ package http import ( "net/http" "net/url" + "slices" "strings" "github.com/nais/wonderwall/pkg/cookie" @@ -34,15 +35,13 @@ func Accepts(r *http.Request, accepted ...string) bool { // iterate over all Accept headers for _, header := range r.Header.Values("Accept") { // iterate over all comma-separated values in a single Accept header - for _, v := range strings.Split(header, ",") { + for v := range strings.SplitSeq(header, ",") { v = strings.ToLower(v) v = strings.TrimSpace(v) v = strings.Split(v, ";")[0] - for _, accept := range accepted { - if v == accept { - return true - } + if slices.Contains(accepted, v) { + return true } } } diff --git a/pkg/handler/error_test.go b/pkg/handler/error_test.go index 826b352..6f5324f 100644 --- a/pkg/handler/error_test.go +++ b/pkg/handler/error_test.go @@ -48,7 +48,7 @@ func TestHandler_Error(t *testing.T) { r := idp.GetRequest(idp.RelyingPartyServer.URL) // should be automatically redirected to the retry URI until maximum attempts are exhausted - for i := 0; i < errorhandler.MaxAutoRetryAttempts; i++ { + for range errorhandler.MaxAutoRetryAttempts { w := httptest.NewRecorder() test.fn(w, r, fmt.Errorf("some error")) diff --git a/pkg/middleware/logentry.go b/pkg/middleware/logentry.go index 313b98d..0ec00e5 100644 --- a/pkg/middleware/logentry.go +++ b/pkg/middleware/logentry.go @@ -85,7 +85,7 @@ func (l *logEntryAdapter) Write(status, bytes int, _ http.Header, elapsed time.D Debugf("response: %d %s", status, http.StatusText(status)) } -func (l *logEntryAdapter) Panic(v interface{}, _ []byte) { +func (l *logEntryAdapter) Panic(v any, _ []byte) { stacktrace := "#" fields := log.Fields{ diff --git a/pkg/mock/openid.go b/pkg/mock/openid.go index d249100..57e507b 100644 --- a/pkg/mock/openid.go +++ b/pkg/mock/openid.go @@ -7,6 +7,7 @@ import ( "net/http/cookiejar" "net/http/httptest" "net/url" + "slices" "strings" "time" @@ -309,13 +310,7 @@ func (ip *IdentityProviderHandler) parseAuthorizationRequest(query url.Values) ( for param, allowed := range allowedParamValues { paramValue := query.Get(param) - found := false - for _, allowedValue := range allowed { - if paramValue == allowedValue { - found = true - break - } - } + found := slices.Contains(allowed, paramValue) if !found { return nil, fmt.Errorf("%q is an invalid value for %q, must be %q", paramValue, param, allowed) diff --git a/pkg/openid/acr/acr.go b/pkg/openid/acr/acr.go index 9f2ee18..2d483a4 100644 --- a/pkg/openid/acr/acr.go +++ b/pkg/openid/acr/acr.go @@ -2,6 +2,7 @@ package acr import ( "fmt" + "slices" ) const ( @@ -40,10 +41,8 @@ func Validate(expected, actual string) error { return fmt.Errorf("invalid acr: got %q, expected %q", actual, expected) } - for _, accepted := range acceptedValues { - if actual == accepted { - return nil - } + if slices.Contains(acceptedValues, actual) { + return nil } return fmt.Errorf("invalid acr: got %q, must be one of %s", actual, acceptedValues) diff --git a/pkg/openid/config/provider.go b/pkg/openid/config/provider.go index 56b03fe..7ec6df0 100644 --- a/pkg/openid/config/provider.go +++ b/pkg/openid/config/provider.go @@ -5,6 +5,7 @@ import ( "fmt" "net/http" "net/url" + "slices" "github.com/lestrrat-go/jwx/v3/jwa" log "github.com/sirupsen/logrus" @@ -192,10 +193,8 @@ func (c *ProviderMetadata) validateLocaleValues(locale string) error { } func (c *ProviderMetadata) validateIDTokenSigningAlg(algorithm string) error { - for _, alg := range c.IDTokenSigningAlgValuesSupported { - if alg == algorithm { - return nil - } + if slices.Contains(c.IDTokenSigningAlgValuesSupported, algorithm) { + return nil } return fmt.Errorf("identity provider does not support '%s=%s', must be one of %s", config.OpenIDIDTokenSigningAlg, algorithm, c.IDTokenSigningAlgValuesSupported) @@ -204,10 +203,5 @@ func (c *ProviderMetadata) validateIDTokenSigningAlg(algorithm string) error { type Supported []string func (in Supported) Contains(value string) bool { - for _, allowed := range in { - if allowed == value { - return true - } - } - return false + return slices.Contains(in, value) } diff --git a/pkg/openid/oauth2.go b/pkg/openid/oauth2.go index 92ab9ac..7908abf 100644 --- a/pkg/openid/oauth2.go +++ b/pkg/openid/oauth2.go @@ -2,6 +2,7 @@ package openid import ( "fmt" + "maps" "net/url" "github.com/nais/wonderwall/pkg/openid/scopes" @@ -119,9 +120,7 @@ func (a RequestParams) URLValues() url.Values { // With returns a new RequestParams with the given RequestParams added. // Conflicting keys are overridden by the given RequestParams. func (a RequestParams) With(other RequestParams) RequestParams { - for key, val := range other { - a[key] = val - } + maps.Copy(a, other) return a } diff --git a/pkg/openid/tokens.go b/pkg/openid/tokens.go index 34ad8a7..43b5073 100644 --- a/pkg/openid/tokens.go +++ b/pkg/openid/tokens.go @@ -240,7 +240,7 @@ func (in *IDToken) StringSliceClaim(claim string) ([]string, error) { } // the claim is a slice of interfaces... - claimValues, ok := gotClaim.([]interface{}) + claimValues, ok := gotClaim.([]any) if !ok { return nil, fmt.Errorf("'%s' claim is not a slice", claim) }