diff --git a/cmd/headscale/cli/nodes.go b/cmd/headscale/cli/nodes.go index 58890cb0..4de7b969 100644 --- a/cmd/headscale/cli/nodes.go +++ b/cmd/headscale/cli/nodes.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "net/netip" + "slices" "strconv" "strings" "time" @@ -617,14 +618,14 @@ func nodesToPtables( forcedTags = strings.TrimLeft(forcedTags, ",") var invalidTags string for _, tag := range node.GetInvalidTags() { - if !contains(node.GetForcedTags(), tag) { + if !slices.Contains(node.GetForcedTags(), tag) { invalidTags += "," + pterm.LightRed(tag) } } invalidTags = strings.TrimLeft(invalidTags, ",") var validTags string for _, tag := range node.GetValidTags() { - if !contains(node.GetForcedTags(), tag) { + if !slices.Contains(node.GetForcedTags(), tag) { validTags += "," + pterm.LightGreen(tag) } } diff --git a/cmd/headscale/cli/utils.go b/cmd/headscale/cli/utils.go index 8a91c5c6..e4fef807 100644 --- a/cmd/headscale/cli/utils.go +++ b/cmd/headscale/cli/utils.go @@ -6,7 +6,6 @@ import ( "encoding/json" "fmt" "os" - "reflect" "github.com/rs/zerolog/log" "google.golang.org/grpc" @@ -197,13 +196,3 @@ func (t tokenAuth) GetRequestMetadata( func (tokenAuth) RequireTransportSecurity() bool { return true } - -func contains[T string](ts []T, t T) bool { - for _, v := range ts { - if reflect.DeepEqual(v, t) { - return true - } - } - - return false -} diff --git a/hscontrol/oidc.go b/hscontrol/oidc.go index b728a6d0..bb836a06 100644 --- a/hscontrol/oidc.go +++ b/hscontrol/oidc.go @@ -10,6 +10,7 @@ import ( "fmt" "html/template" "net/http" + "slices" "strings" "time" @@ -365,7 +366,7 @@ func validateOIDCAllowedDomains( ) error { if len(allowedDomains) > 0 { if at := strings.LastIndex(claims.Email, "@"); at < 0 || - !util.IsStringInSlice(allowedDomains, claims.Email[at+1:]) { + !slices.Contains(allowedDomains, claims.Email[at+1:]) { log.Trace().Msg("authenticated principal does not match any allowed domain") writer.Header().Set("Content-Type", "text/plain; charset=utf-8") @@ -393,7 +394,7 @@ func validateOIDCAllowedGroups( ) error { if len(allowedGroups) > 0 { for _, group := range allowedGroups { - if util.IsStringInSlice(claims.Groups, group) { + if slices.Contains(claims.Groups, group) { return nil } } @@ -420,7 +421,7 @@ func validateOIDCAllowedUsers( claims *IDTokenClaims, ) error { if len(allowedUsers) > 0 && - !util.IsStringInSlice(allowedUsers, claims.Email) { + !slices.Contains(allowedUsers, claims.Email) { log.Trace().Msg("authenticated principal does not match any allowed user") writer.Header().Set("Content-Type", "text/plain; charset=utf-8") writer.WriteHeader(http.StatusBadRequest) diff --git a/hscontrol/util/string.go b/hscontrol/util/string.go index 6f018aff..ce38b82e 100644 --- a/hscontrol/util/string.go +++ b/hscontrol/util/string.go @@ -56,16 +56,6 @@ func GenerateRandomStringDNSSafe(size int) (string, error) { return str[:size], nil } -func IsStringInSlice(slice []string, str string) bool { - for _, s := range slice { - if s == str { - return true - } - } - - return false -} - func TailNodesToString(nodes []*tailcfg.Node) string { temp := make([]string, len(nodes))