refactor: mark pkg/strings as deprecated in favor of stdlib (#680)
* refactor: mark pkg/strings as deprecated in favor of stdlib * format: reword deprecate notice and use doc links
This commit is contained in:
parent
1464268851
commit
6d20928028
6 changed files with 19 additions and 22 deletions
|
@ -7,12 +7,11 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
jose "github.com/go-jose/go-jose/v4"
|
jose "github.com/go-jose/go-jose/v4"
|
||||||
|
|
||||||
str "github.com/zitadel/oidc/v3/pkg/strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Claims interface {
|
type Claims interface {
|
||||||
|
@ -84,7 +83,7 @@ type ACRVerifier func(string) error
|
||||||
// if none of the provided values matches the acr claim
|
// if none of the provided values matches the acr claim
|
||||||
func DefaultACRVerifier(possibleValues []string) ACRVerifier {
|
func DefaultACRVerifier(possibleValues []string) ACRVerifier {
|
||||||
return func(acr string) error {
|
return func(acr string) error {
|
||||||
if !str.Contains(possibleValues, acr) {
|
if !slices.Contains(possibleValues, acr) {
|
||||||
return fmt.Errorf("expected one of: %v, got: %q", possibleValues, acr)
|
return fmt.Errorf("expected one of: %v, got: %q", possibleValues, acr)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -123,7 +122,7 @@ func CheckIssuer(claims Claims, issuer string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func CheckAudience(claims Claims, clientID string) error {
|
func CheckAudience(claims Claims, clientID string) error {
|
||||||
if !str.Contains(claims.GetAudience(), clientID) {
|
if !slices.Contains(claims.GetAudience(), clientID) {
|
||||||
return fmt.Errorf("%w: Audience must contain client_id %q", ErrAudience, clientID)
|
return fmt.Errorf("%w: Audience must contain client_id %q", ErrAudience, clientID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@ import (
|
||||||
"github.com/bmatcuk/doublestar/v4"
|
"github.com/bmatcuk/doublestar/v4"
|
||||||
httphelper "github.com/zitadel/oidc/v3/pkg/http"
|
httphelper "github.com/zitadel/oidc/v3/pkg/http"
|
||||||
"github.com/zitadel/oidc/v3/pkg/oidc"
|
"github.com/zitadel/oidc/v3/pkg/oidc"
|
||||||
str "github.com/zitadel/oidc/v3/pkg/strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type AuthRequest interface {
|
type AuthRequest interface {
|
||||||
|
@ -156,7 +155,7 @@ func ParseRequestObject(ctx context.Context, authReq *oidc.AuthRequest, storage
|
||||||
if requestObject.Issuer != requestObject.ClientID {
|
if requestObject.Issuer != requestObject.ClientID {
|
||||||
return oidc.ErrInvalidRequest().WithDescription("missing or wrong issuer in request")
|
return oidc.ErrInvalidRequest().WithDescription("missing or wrong issuer in request")
|
||||||
}
|
}
|
||||||
if !str.Contains(requestObject.Audience, issuer) {
|
if !slices.Contains(requestObject.Audience, issuer) {
|
||||||
return oidc.ErrInvalidRequest().WithDescription("issuer missing in audience")
|
return oidc.ErrInvalidRequest().WithDescription("issuer missing in audience")
|
||||||
}
|
}
|
||||||
keySet := &jwtProfileKeySet{storage: storage, clientID: requestObject.Issuer}
|
keySet := &jwtProfileKeySet{storage: storage, clientID: requestObject.Issuer}
|
||||||
|
@ -170,7 +169,7 @@ func ParseRequestObject(ctx context.Context, authReq *oidc.AuthRequest, storage
|
||||||
// CopyRequestObjectToAuthRequest overwrites present values from the Request Object into the auth request
|
// CopyRequestObjectToAuthRequest overwrites present values from the Request Object into the auth request
|
||||||
// and clears the `RequestParam` of the auth request
|
// and clears the `RequestParam` of the auth request
|
||||||
func CopyRequestObjectToAuthRequest(authReq *oidc.AuthRequest, requestObject *oidc.RequestObject) {
|
func CopyRequestObjectToAuthRequest(authReq *oidc.AuthRequest, requestObject *oidc.RequestObject) {
|
||||||
if str.Contains(authReq.Scopes, oidc.ScopeOpenID) && len(requestObject.Scopes) > 0 {
|
if slices.Contains(authReq.Scopes, oidc.ScopeOpenID) && len(requestObject.Scopes) > 0 {
|
||||||
authReq.Scopes = requestObject.Scopes
|
authReq.Scopes = requestObject.Scopes
|
||||||
}
|
}
|
||||||
if requestObject.RedirectURI != "" {
|
if requestObject.RedirectURI != "" {
|
||||||
|
@ -288,7 +287,7 @@ func ValidateAuthReqScopes(client Client, scopes []string) ([]string, error) {
|
||||||
// checkURIAgainstRedirects just checks aginst the valid redirect URIs and ignores
|
// checkURIAgainstRedirects just checks aginst the valid redirect URIs and ignores
|
||||||
// other factors.
|
// other factors.
|
||||||
func checkURIAgainstRedirects(client Client, uri string) error {
|
func checkURIAgainstRedirects(client Client, uri string) error {
|
||||||
if str.Contains(client.RedirectURIs(), uri) {
|
if slices.Contains(client.RedirectURIs(), uri) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if globClient, ok := client.(HasRedirectGlobs); ok {
|
if globClient, ok := client.(HasRedirectGlobs); ok {
|
||||||
|
|
|
@ -9,12 +9,12 @@ import (
|
||||||
"math/big"
|
"math/big"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
httphelper "github.com/zitadel/oidc/v3/pkg/http"
|
httphelper "github.com/zitadel/oidc/v3/pkg/http"
|
||||||
"github.com/zitadel/oidc/v3/pkg/oidc"
|
"github.com/zitadel/oidc/v3/pkg/oidc"
|
||||||
strs "github.com/zitadel/oidc/v3/pkg/strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type DeviceAuthorizationConfig struct {
|
type DeviceAuthorizationConfig struct {
|
||||||
|
@ -276,7 +276,7 @@ func (r *DeviceAuthorizationState) GetAMR() []string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *DeviceAuthorizationState) GetAudience() []string {
|
func (r *DeviceAuthorizationState) GetAudience() []string {
|
||||||
if !strs.Contains(r.Audience, r.ClientID) {
|
if !slices.Contains(r.Audience, r.ClientID) {
|
||||||
r.Audience = append(r.Audience, r.ClientID)
|
r.Audience = append(r.Audience, r.ClientID)
|
||||||
}
|
}
|
||||||
return r.Audience
|
return r.Audience
|
||||||
|
@ -348,7 +348,7 @@ func CreateDeviceTokenResponse(ctx context.Context, tokenRequest TokenRequest, c
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(v4): remove type assertion
|
// TODO(v4): remove type assertion
|
||||||
if idTokenRequest, ok := tokenRequest.(IDTokenRequest); ok && strs.Contains(tokenRequest.GetScopes(), oidc.ScopeOpenID) {
|
if idTokenRequest, ok := tokenRequest.(IDTokenRequest); ok && slices.Contains(tokenRequest.GetScopes(), oidc.ScopeOpenID) {
|
||||||
response.IDToken, err = CreateIDToken(ctx, IssuerFromContext(ctx), idTokenRequest, client.IDTokenLifetime(), accessToken, "", creator.Storage(), client)
|
response.IDToken, err = CreateIDToken(ctx, IssuerFromContext(ctx), idTokenRequest, client.IDTokenLifetime(), accessToken, "", creator.Storage(), client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -2,11 +2,11 @@ package op
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"slices"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/zitadel/oidc/v3/pkg/crypto"
|
"github.com/zitadel/oidc/v3/pkg/crypto"
|
||||||
"github.com/zitadel/oidc/v3/pkg/oidc"
|
"github.com/zitadel/oidc/v3/pkg/oidc"
|
||||||
"github.com/zitadel/oidc/v3/pkg/strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type TokenCreator interface {
|
type TokenCreator interface {
|
||||||
|
@ -83,13 +83,13 @@ func createTokens(ctx context.Context, tokenRequest TokenRequest, storage Storag
|
||||||
func needsRefreshToken(tokenRequest TokenRequest, client AccessTokenClient) bool {
|
func needsRefreshToken(tokenRequest TokenRequest, client AccessTokenClient) bool {
|
||||||
switch req := tokenRequest.(type) {
|
switch req := tokenRequest.(type) {
|
||||||
case AuthRequest:
|
case AuthRequest:
|
||||||
return strings.Contains(req.GetScopes(), oidc.ScopeOfflineAccess) && req.GetResponseType() == oidc.ResponseTypeCode && ValidateGrantType(client, oidc.GrantTypeRefreshToken)
|
return slices.Contains(req.GetScopes(), oidc.ScopeOfflineAccess) && req.GetResponseType() == oidc.ResponseTypeCode && ValidateGrantType(client, oidc.GrantTypeRefreshToken)
|
||||||
case TokenExchangeRequest:
|
case TokenExchangeRequest:
|
||||||
return req.GetRequestedTokenType() == oidc.RefreshTokenType
|
return req.GetRequestedTokenType() == oidc.RefreshTokenType
|
||||||
case RefreshTokenRequest:
|
case RefreshTokenRequest:
|
||||||
return true
|
return true
|
||||||
case *DeviceAuthorizationState:
|
case *DeviceAuthorizationState:
|
||||||
return strings.Contains(req.GetScopes(), oidc.ScopeOfflineAccess) && ValidateGrantType(client, oidc.GrantTypeRefreshToken)
|
return slices.Contains(req.GetScopes(), oidc.ScopeOfflineAccess) && ValidateGrantType(client, oidc.GrantTypeRefreshToken)
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,11 +4,11 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"slices"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
httphelper "github.com/zitadel/oidc/v3/pkg/http"
|
httphelper "github.com/zitadel/oidc/v3/pkg/http"
|
||||||
"github.com/zitadel/oidc/v3/pkg/oidc"
|
"github.com/zitadel/oidc/v3/pkg/oidc"
|
||||||
"github.com/zitadel/oidc/v3/pkg/strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type RefreshTokenRequest interface {
|
type RefreshTokenRequest interface {
|
||||||
|
@ -85,7 +85,7 @@ func ValidateRefreshTokenScopes(requestedScopes []string, authRequest RefreshTok
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
for _, scope := range requestedScopes {
|
for _, scope := range requestedScopes {
|
||||||
if !strings.Contains(authRequest.GetScopes(), scope) {
|
if !slices.Contains(authRequest.GetScopes(), scope) {
|
||||||
return oidc.ErrInvalidScope()
|
return oidc.ErrInvalidScope()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
package strings
|
package strings
|
||||||
|
|
||||||
|
import "slices"
|
||||||
|
|
||||||
|
// Deprecated: Use standard library [slices.Contains] instead.
|
||||||
func Contains(list []string, needle string) bool {
|
func Contains(list []string, needle string) bool {
|
||||||
for _, item := range list {
|
// TODO(v4): remove package.
|
||||||
if item == needle {
|
return slices.Contains(list, needle)
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue