1
0
mirror of https://github.com/juanfont/headscale.git synced 2025-08-19 13:48:20 +02:00

Fixed errors in files according to golangci-lint rules

This commit is contained in:
hopleus 2024-10-17 13:40:59 +03:00
parent d3661204e7
commit 898150b368
11 changed files with 47 additions and 36 deletions

View File

@ -19,12 +19,12 @@ jobs:
- TestACLNamedHostsCanReach - TestACLNamedHostsCanReach
- TestACLDevice1CanAccessDevice2 - TestACLDevice1CanAccessDevice2
- TestPolicyUpdateWhileRunningWithCLIInDatabase - TestPolicyUpdateWhileRunningWithCLIInDatabase
- TestAuthNodeApproval
- TestOIDCAuthenticationPingAll - TestOIDCAuthenticationPingAll
- TestOIDCExpireNodesBasedOnTokenExpiry - TestOIDCExpireNodesBasedOnTokenExpiry
- TestOIDC024UserCreation - TestOIDC024UserCreation
- TestAuthWebFlowAuthenticationPingAll - TestAuthWebFlowAuthenticationPingAll
- TestAuthWebFlowLogoutAndRelogin - TestAuthWebFlowLogoutAndRelogin
- TestAuthNodeApproval
- TestUserCommand - TestUserCommand
- TestPreAuthKeyCommand - TestPreAuthKeyCommand
- TestPreAuthKeyCommandWithoutExpiry - TestPreAuthKeyCommandWithoutExpiry

View File

@ -51,7 +51,7 @@ func init() {
approveNodeCmd.Flags().Uint64P("identifier", "i", 0, "Node identifier (ID)") approveNodeCmd.Flags().Uint64P("identifier", "i", 0, "Node identifier (ID)")
err = approveNodeCmd.MarkFlagRequired("identifier") err = approveNodeCmd.MarkFlagRequired("identifier")
if err != nil { if err != nil {
log.Fatalf(err.Error()) log.Fatalf("%v", err)
} }
nodeCmd.AddCommand(approveNodeCmd) nodeCmd.AddCommand(approveNodeCmd)
@ -226,6 +226,7 @@ var approveNodeCmd = &cobra.Command{
fmt.Sprintf("Error converting ID to integer: %s", err), fmt.Sprintf("Error converting ID to integer: %s", err),
output, output,
) )
return return
} }
ctx, client, conn, cancel := newHeadscaleCLIWithConfig() ctx, client, conn, cancel := newHeadscaleCLIWithConfig()
@ -244,6 +245,7 @@ var approveNodeCmd = &cobra.Command{
), ),
output, output,
) )
return return
} }
SuccessOutput(response.GetNode(), "Node approved", output) SuccessOutput(response.GetNode(), "Node approved", output)

View File

@ -313,7 +313,7 @@ func (h *Headscale) handleAuthKey(
node.AuthKeyID = ptr.To(pak.ID) node.AuthKeyID = ptr.To(pak.ID)
} }
if node.Approved == false { if !node.Approved {
node.Approved = nodeApproved node.Approved = nodeApproved
} }

View File

@ -29,7 +29,10 @@ func init() {
schema.RegisterSerializer("text", TextSerialiser{}) schema.RegisterSerializer("text", TextSerialiser{})
} }
var errDatabaseNotSupported = errors.New("database type not supported") var (
errDatabaseNotSupported = errors.New("database type not supported")
errNoNodeApprovedColumnInDatabase = errors.New("no node approved column in database")
)
// KV is a key-value store in a psql table. For future use... // KV is a key-value store in a psql table. For future use...
// TODO(kradalby): Is this used for anything? // TODO(kradalby): Is this used for anything?
@ -525,26 +528,26 @@ func NewHeadscaleDatabase(
}, },
{ {
ID: "202410071005", ID: "202410071005",
Migrate: func(tx *gorm.DB) error { Migrate: func(db *gorm.DB) error {
err = tx.AutoMigrate(&types.PreAuthKey{}) err = db.AutoMigrate(&types.PreAuthKey{})
if err != nil { if err != nil {
return err return err
} }
err = tx.AutoMigrate(&types.Node{}) err = db.AutoMigrate(&types.Node{})
if err != nil { if err != nil {
return err return err
} }
if tx.Migrator().HasColumn(&types.Node{}, "approved") { if db.Migrator().HasColumn(&types.Node{}, "approved") {
nodes := types.Nodes{} nodes := types.Nodes{}
if err := tx.Find(&nodes).Error; err != nil { if err := db.Find(&nodes).Error; err != nil {
log.Error().Err(err).Msg("Error accessing db") log.Error().Err(err).Msg("Error accessing db")
} }
for item, node := range nodes { for item, node := range nodes {
if node.IsApproved() == false { if !node.IsApproved() {
err = tx.Model(nodes[item]).Updates(types.Node{ err = db.Model(nodes[item]).Updates(types.Node{
Approved: true, Approved: true,
}).Error }).Error
if err != nil { if err != nil {
@ -561,7 +564,7 @@ func NewHeadscaleDatabase(
return nil return nil
} }
return fmt.Errorf("no node approved column in DB") return errNoNodeApprovedColumnInDatabase
}, },
Rollback: func(db *gorm.DB) error { return nil }, Rollback: func(db *gorm.DB) error { return nil },
}, },

View File

@ -265,17 +265,17 @@ func isTailscaleReservedIP(ip netip.Addr) bool {
// it will be added. // it will be added.
// If a prefix type has been removed (IPv4 or IPv6), it // If a prefix type has been removed (IPv4 or IPv6), it
// will remove the IPs in that family from the node. // will remove the IPs in that family from the node.
func (hsdb *HSDatabase) BackfillNodeIPs(i *IPAllocator) ([]string, error) { func (hsdb *HSDatabase) BackfillNodeIPs(ip *IPAllocator) ([]string, error) {
var err error var err error
var ret []string var ret []string
err = hsdb.Write(func(tx *gorm.DB) error { err = hsdb.Write(func(db *gorm.DB) error {
if i == nil { if ip == nil {
return errors.New("backfilling IPs: ip allocator was nil") return errors.New("backfilling IPs: ip allocator was nil")
} }
log.Trace().Msgf("starting to backfill IPs") log.Trace().Msgf("starting to backfill IPs")
nodes, err := ListNodes(tx) nodes, err := ListNodes(db)
if err != nil { if err != nil {
return fmt.Errorf("listing nodes to backfill IPs: %w", err) return fmt.Errorf("listing nodes to backfill IPs: %w", err)
} }
@ -285,8 +285,8 @@ func (hsdb *HSDatabase) BackfillNodeIPs(i *IPAllocator) ([]string, error) {
changed := false changed := false
// IPv4 prefix is set, but node ip is missing, alloc // IPv4 prefix is set, but node ip is missing, alloc
if i.prefix4 != nil && node.IPv4 == nil { if ip.prefix4 != nil && node.IPv4 == nil {
ret4, err := i.nextLocked(i.prev4, i.prefix4) ret4, err := ip.nextLocked(ip.prev4, ip.prefix4)
if err != nil { if err != nil {
return fmt.Errorf("failed to allocate ipv4 for node(%d): %w", node.ID, err) return fmt.Errorf("failed to allocate ipv4 for node(%d): %w", node.ID, err)
} }
@ -297,8 +297,8 @@ func (hsdb *HSDatabase) BackfillNodeIPs(i *IPAllocator) ([]string, error) {
} }
// IPv6 prefix is set, but node ip is missing, alloc // IPv6 prefix is set, but node ip is missing, alloc
if i.prefix6 != nil && node.IPv6 == nil { if ip.prefix6 != nil && node.IPv6 == nil {
ret6, err := i.nextLocked(i.prev6, i.prefix6) ret6, err := ip.nextLocked(ip.prev6, ip.prefix6)
if err != nil { if err != nil {
return fmt.Errorf("failed to allocate ipv6 for node(%d): %w", node.ID, err) return fmt.Errorf("failed to allocate ipv6 for node(%d): %w", node.ID, err)
} }
@ -309,21 +309,21 @@ func (hsdb *HSDatabase) BackfillNodeIPs(i *IPAllocator) ([]string, error) {
} }
// IPv4 prefix is not set, but node has IP, remove // IPv4 prefix is not set, but node has IP, remove
if i.prefix4 == nil && node.IPv4 != nil { if ip.prefix4 == nil && node.IPv4 != nil {
ret = append(ret, fmt.Sprintf("removing IPv4 %q from Node(%d) %q", node.IPv4.String(), node.ID, node.Hostname)) ret = append(ret, fmt.Sprintf("removing IPv4 %q from Node(%d) %q", node.IPv4.String(), node.ID, node.Hostname))
node.IPv4 = nil node.IPv4 = nil
changed = true changed = true
} }
// IPv6 prefix is not set, but node has IP, remove // IPv6 prefix is not set, but node has IP, remove
if i.prefix6 == nil && node.IPv6 != nil { if ip.prefix6 == nil && node.IPv6 != nil {
ret = append(ret, fmt.Sprintf("removing IPv6 %q from Node(%d) %q", node.IPv6.String(), node.ID, node.Hostname)) ret = append(ret, fmt.Sprintf("removing IPv6 %q from Node(%d) %q", node.IPv6.String(), node.ID, node.Hostname))
node.IPv6 = nil node.IPv6 = nil
changed = true changed = true
} }
if changed { if changed {
err := tx.Save(node).Error err := db.Save(node).Error
if err != nil { if err != nil {
return fmt.Errorf("saving node(%d) after adding IPs: %w", node.ID, err) return fmt.Errorf("saving node(%d) after adding IPs: %w", node.ID, err)
} }

View File

@ -268,7 +268,7 @@ func (hsdb *HSDatabase) NodeSetApprove(nodeID types.NodeID, approved bool) error
}) })
} }
// NodeSetApprove takes a Node struct and a set approval option // NodeSetApprove takes a Node struct and a set approval option.
func NodeSetApprove(tx *gorm.DB, func NodeSetApprove(tx *gorm.DB,
nodeID types.NodeID, approved bool, nodeID types.NodeID, approved bool,
) error { ) error {
@ -371,7 +371,7 @@ func (hsdb *HSDatabase) RegisterNodeFromAuthCallback(
node.User = *user node.User = *user
node.RegisterMethod = registrationMethod node.RegisterMethod = registrationMethod
if node.IsApproved() == false && manualApprovedNode == false { if !node.IsApproved() && manualApprovedNode == false {
node.Approved = true node.Approved = true
} }

View File

@ -203,7 +203,7 @@ func (s *Suite) TestListPeersWithoutNonAuthorized(c *check.C) {
} }
node := types.Node{ node := types.Node{
ID: types.NodeID(index), ID: types.NodeID(int64(index)),
MachineKey: machineKey.Public(), MachineKey: machineKey.Public(),
NodeKey: nodeKey.Public(), NodeKey: nodeKey.Public(),
Hostname: "testnode" + strconv.Itoa(index), Hostname: "testnode" + strconv.Itoa(index),

View File

@ -15,6 +15,11 @@ const (
DatabaseSqlite = "sqlite3" DatabaseSqlite = "sqlite3"
) )
const (
SchemaHttp = "http"
SchemaHttps = "https"
)
var ErrCannotParsePrefix = errors.New("cannot parse prefix") var ErrCannotParsePrefix = errors.New("cannot parse prefix")
type StateUpdateType int type StateUpdateType int

View File

@ -117,7 +117,7 @@ func (node Node) IsExpired() bool {
// IsApproved returns whether the node is approved. // IsApproved returns whether the node is approved.
func (node Node) IsApproved() bool { func (node Node) IsApproved() bool {
return node.Approved == true return node.Approved
} }
// IsEphemeral returns if the node is registered as an Ephemeral node. // IsEphemeral returns if the node is registered as an Ephemeral node.

View File

@ -4,7 +4,8 @@ import (
"context" "context"
"crypto/tls" "crypto/tls"
"fmt" "fmt"
v1 "github.com/juanfont/headscale/gen/go/headscale/v1" "github.com/juanfont/headscale/gen/go/headscale/v1"
"github.com/juanfont/headscale/hscontrol/types"
"github.com/juanfont/headscale/integration/hsic" "github.com/juanfont/headscale/integration/hsic"
"github.com/samber/lo" "github.com/samber/lo"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -56,7 +57,7 @@ func TestAuthNodeApproval(t *testing.T) {
status, err := client.Status() status, err := client.Status()
assertNoErr(t, err) assertNoErr(t, err)
assert.Equal(t, "NeedsMachineAuth", status.BackendState) assert.Equal(t, "NeedsMachineAuth", status.BackendState)
assert.Len(t, status.Peers(), 0) assert.Empty(t, status.Peers())
} }
headscale, err := scenario.Headscale() headscale, err := scenario.Headscale()
@ -74,11 +75,11 @@ func TestAuthNodeApproval(t *testing.T) {
}, },
&allNodes, &allNodes,
) )
assert.Nil(t, err) assert.NoError(t, err)
for _, node := range allNodes { for _, node := range allNodes {
_, err = headscale.Execute([]string{ _, err = headscale.Execute([]string{
"headscale", "nodes", "approve", "--identifier", fmt.Sprintf("%d", node.Id), "headscale", "nodes", "approve", "--identifier", fmt.Sprintf("%d", node.GetId()),
}) })
assertNoErr(t, err) assertNoErr(t, err)
} }
@ -113,7 +114,7 @@ func TestAuthNodeApproval(t *testing.T) {
err = scenario.WaitForTailscaleSync() err = scenario.WaitForTailscaleSync()
assertNoErrSync(t, err) assertNoErrSync(t, err)
//assertClientsState(t, allClients) // assertClientsState(t, allClients)
allAddrs := lo.Map(allIps, func(x netip.Addr, index int) string { allAddrs := lo.Map(allIps, func(x netip.Addr, index int) string {
return x.String() return x.String()
@ -236,11 +237,11 @@ func (s *AuthApprovalScenario) runHeadscaleRegister(userStr string, loginURL *ur
} }
log.Printf("loginURL: %s", loginURL) log.Printf("loginURL: %s", loginURL)
loginURL.Host = fmt.Sprintf("%s:8080", headscale.GetIP()) loginURL.Host = fmt.Sprintf("%s:%d", headscale.GetIP(), 8080)
loginURL.Scheme = "http" loginURL.Scheme = types.SchemaHttp
if len(headscale.GetCert()) > 0 { if len(headscale.GetCert()) > 0 {
loginURL.Scheme = "https" loginURL.Scheme = types.SchemaHttps
} }
insecureTransport := &http.Transport{ insecureTransport := &http.Transport{

View File

@ -259,7 +259,7 @@ func WithTuning(batchTimeout time.Duration, mapSessionChanSize int) Option {
} }
} }
// WithManualApproveNewNode allows devices to access the network only after manual approval // WithManualApproveNewNode allows devices to access the network only after manual approval.
func WithManualApproveNewNode() Option { func WithManualApproveNewNode() Option {
return func(hsic *HeadscaleInContainer) { return func(hsic *HeadscaleInContainer) {
hsic.env["HEADSCALE_NODE_MANAGEMENT_MANUAL_APPROVE_NEW_NODE"] = "true" hsic.env["HEADSCALE_NODE_MANAGEMENT_MANUAL_APPROVE_NEW_NODE"] = "true"