mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Fixed errors in files according to golangci-lint rules
This commit is contained in:
		
							parent
							
								
									a4db1548d3
								
							
						
					
					
						commit
						21fe7067ef
					
				
							
								
								
									
										2
									
								
								.github/workflows/test-integration.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/test-integration.yaml
									
									
									
									
										vendored
									
									
								
							@ -19,11 +19,11 @@ jobs:
 | 
				
			|||||||
          - TestACLNamedHostsCanReach
 | 
					          - TestACLNamedHostsCanReach
 | 
				
			||||||
          - TestACLDevice1CanAccessDevice2
 | 
					          - TestACLDevice1CanAccessDevice2
 | 
				
			||||||
          - TestPolicyUpdateWhileRunningWithCLIInDatabase
 | 
					          - TestPolicyUpdateWhileRunningWithCLIInDatabase
 | 
				
			||||||
 | 
					          - TestAuthNodeApproval
 | 
				
			||||||
          - TestOIDCAuthenticationPingAll
 | 
					          - TestOIDCAuthenticationPingAll
 | 
				
			||||||
          - TestOIDCExpireNodesBasedOnTokenExpiry
 | 
					          - TestOIDCExpireNodesBasedOnTokenExpiry
 | 
				
			||||||
          - TestAuthWebFlowAuthenticationPingAll
 | 
					          - TestAuthWebFlowAuthenticationPingAll
 | 
				
			||||||
          - TestAuthWebFlowLogoutAndRelogin
 | 
					          - TestAuthWebFlowLogoutAndRelogin
 | 
				
			||||||
          - TestAuthNodeApproval
 | 
					 | 
				
			||||||
          - TestUserCommand
 | 
					          - TestUserCommand
 | 
				
			||||||
          - TestPreAuthKeyCommand
 | 
					          - TestPreAuthKeyCommand
 | 
				
			||||||
          - TestPreAuthKeyCommandWithoutExpiry
 | 
					          - TestPreAuthKeyCommandWithoutExpiry
 | 
				
			||||||
 | 
				
			|||||||
@ -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)
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -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?
 | 
				
			||||||
@ -489,26 +492,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 {
 | 
				
			||||||
@ -525,7 +528,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 },
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
 | 
				
			|||||||
@ -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)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -202,7 +202,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),
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
				
			|||||||
@ -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.
 | 
				
			||||||
 | 
				
			|||||||
@ -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{
 | 
				
			||||||
 | 
				
			|||||||
@ -211,7 +211,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"
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user