all: adopt strings, errors, and os helpers

This commit is contained in:
Kristoffer Dalby
2026-06-16 08:51:58 +00:00
parent 27468f944b
commit 4f4e95fc80
7 changed files with 19 additions and 44 deletions
+8 -11
View File
@@ -3,6 +3,7 @@ package cli
import (
"context"
"encoding/json"
"errors"
"fmt"
"net"
"net/http"
@@ -16,19 +17,15 @@ import (
"github.com/spf13/cobra"
)
// Error is used to compare errors as per https://dave.cheney.net/2016/04/07/constant-errors
type Error string
func (e Error) Error() string { return string(e) }
const (
errMockOidcClientIDNotDefined = Error("MOCKOIDC_CLIENT_ID not defined")
errMockOidcClientSecretNotDefined = Error("MOCKOIDC_CLIENT_SECRET not defined")
errMockOidcPortNotDefined = Error("MOCKOIDC_PORT not defined")
errMockOidcUsersNotDefined = Error("MOCKOIDC_USERS not defined")
refreshTTL = 60 * time.Minute
var (
errMockOidcClientIDNotDefined = errors.New("MOCKOIDC_CLIENT_ID not defined")
errMockOidcClientSecretNotDefined = errors.New("MOCKOIDC_CLIENT_SECRET not defined")
errMockOidcPortNotDefined = errors.New("MOCKOIDC_PORT not defined")
errMockOidcUsersNotDefined = errors.New("MOCKOIDC_USERS not defined")
)
const refreshTTL = 60 * time.Minute
var accessTTL = 2 * time.Minute
func init() {
+1 -7
View File
@@ -384,13 +384,7 @@ func nodesToPtables(nodes []*v1.Node) (pterm.TableData, error) {
expired = pterm.LightGreen("no")
}
var tagsBuilder strings.Builder
for _, tag := range node.GetTags() {
tagsBuilder.WriteString("\n" + tag)
}
tags := strings.TrimLeft(tagsBuilder.String(), "\n")
tags := strings.Join(node.GetTags(), "\n")
var user string
if node.GetUser() != nil {
+3 -4
View File
@@ -5,6 +5,7 @@ import (
"errors"
"fmt"
"log"
"os"
"os/exec"
"strings"
@@ -283,7 +284,7 @@ func checkGitRepository(ctx context.Context) DoctorResult {
}
// checkRequiredFiles verifies required files exist.
func checkRequiredFiles(ctx context.Context) DoctorResult {
func checkRequiredFiles(_ context.Context) DoctorResult {
requiredFiles := []string{
"go.mod",
"integration/",
@@ -293,9 +294,7 @@ func checkRequiredFiles(ctx context.Context) DoctorResult {
var missingFiles []string
for _, file := range requiredFiles {
cmd := exec.CommandContext(ctx, "test", "-e", file)
err := cmd.Run()
_, err := os.Stat(file)
if err != nil {
missingFiles = append(missingFiles, file)
}
+1 -8
View File
@@ -22,19 +22,12 @@ import (
)
func loadDERPMapFromPath(path string) (*tailcfg.DERPMap, error) {
derpFile, err := os.Open(path)
b, err := os.ReadFile(path)
if err != nil {
return nil, err
}
defer derpFile.Close()
var derpMap tailcfg.DERPMap
b, err := io.ReadAll(derpFile)
if err != nil {
return nil, err
}
err = yaml.Unmarshal(b, &derpMap)
return &derpMap, err
+2 -2
View File
@@ -420,7 +420,7 @@ func (api headscaleV1APIServer) SetApprovedRoutes(
}
func validateTag(tag string) error {
if strings.Index(tag, "tag:") != 0 {
if !strings.HasPrefix(tag, "tag:") {
return errors.New("tag must start with the string 'tag:'")
}
if strings.ToLower(tag) != tag {
@@ -935,7 +935,7 @@ func (api headscaleV1APIServer) AuthReject(
}
authReq.FinishAuth(types.AuthVerdict{
Err: fmt.Errorf("auth request rejected"),
Err: errors.New("auth request rejected"),
})
return &v1.AuthRejectResponse{}, nil
+1 -9
View File
@@ -5,7 +5,6 @@ import (
"fmt"
"net/netip"
"slices"
"strconv"
"strings"
"time"
@@ -597,14 +596,7 @@ func groupSourcesByUser(
// filterRuleKey generates a unique key for merging based on [tailcfg.FilterRule.SrcIPs]
// and [tailcfg.FilterRule.IPProto].
func filterRuleKey(rule tailcfg.FilterRule) string {
srcKey := strings.Join(rule.SrcIPs, ",")
protoStrs := make([]string, len(rule.IPProto))
for i, p := range rule.IPProto {
protoStrs[i] = strconv.Itoa(p)
}
return srcKey + "|" + strings.Join(protoStrs, ",")
return fmt.Sprintf("%s|%v", strings.Join(rule.SrcIPs, ","), rule.IPProto)
}
// mergeFilterRules merges rules with identical [tailcfg.FilterRule.SrcIPs] and
+3 -3
View File
@@ -162,10 +162,10 @@ func credentialsFromConfig() (string, string, bool) {
return "", "", false
}
parts := strings.SplitN(string(decoded), ":", 2)
if len(parts) != 2 {
user, pass, ok := strings.Cut(string(decoded), ":")
if !ok {
return "", "", false
}
return parts[0], parts[1], true
return user, pass, true
}