Documentation
¶
Index ¶
- type Config
- type Error
- type Headscale
- func (h *Headscale) CreateNamespace(name string) (*Namespace, error)
- func (h *Headscale) CreatePreAuthKey(namespaceName string, reusable bool, ephemeral bool, expiration *time.Time) (*PreAuthKey, error)
- func (h *Headscale) DestroyNamespace(name string) error
- func (h *Headscale) EnableNodeRoute(namespace string, nodeName string, routeStr string) (*netaddr.IPPrefix, error)
- func (h *Headscale) ExpireEphemeralNodes(milliSeconds int64)
- func (h *Headscale) GetMachine(namespace string, name string) (*Machine, error)
- func (h *Headscale) GetNamespace(name string) (*Namespace, error)
- func (h *Headscale) GetNodeRoutes(namespace string, nodeName string) (*[]netaddr.IPPrefix, error)
- func (h *Headscale) GetPreAuthKeys(namespaceName string) (*[]PreAuthKey, error)
- func (h *Headscale) KeyHandler(c *gin.Context)
- func (h *Headscale) ListMachinesInNamespace(name string) (*[]Machine, error)
- func (h *Headscale) ListNamespaces() (*[]Namespace, error)
- func (h *Headscale) PollNetMapHandler(c *gin.Context)
- func (h *Headscale) RegisterMachine(key string, namespace string) (*Machine, error)
- func (h *Headscale) RegisterWebAPI(c *gin.Context)
- func (h *Headscale) RegistrationHandler(c *gin.Context)
- func (h *Headscale) Serve() error
- func (h *Headscale) SetMachineNamespace(m *Machine, namespaceName string) error
- type KV
- type Machine
- type Namespace
- type PreAuthKey
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct { ServerURL string Addr string PrivateKeyPath string DerpMap *tailcfg.DERPMap EphemeralNodeInactivityTimeout time.Duration DBtype string DBpath string DBhost string DBport int DBname string DBuser string DBpass string TLSLetsEncryptHostname string TLSLetsEncryptCacheDir string TLSLetsEncryptChallengeType string TLSCertPath string TLSKeyPath string }
Config contains the initial Headscale configuration
type Error ¶
type Error string
Error is used to compare errors as per https://dave.cheney.net/2016/04/07/constant-errors
type Headscale ¶
type Headscale struct {
// contains filtered or unexported fields
}
Headscale represents the base app of the service
func NewHeadscale ¶
NewHeadscale returns the Headscale app
func (*Headscale) CreateNamespace ¶
CreateNamespace creates a new Namespace. Returns error if could not be created or another namespace already exists
func (*Headscale) CreatePreAuthKey ¶
func (h *Headscale) CreatePreAuthKey(namespaceName string, reusable bool, ephemeral bool, expiration *time.Time) (*PreAuthKey, error)
CreatePreAuthKey creates a new PreAuthKey in a namespace, and returns it
func (*Headscale) DestroyNamespace ¶
DestroyNamespace destroys a Namespace. Returns error if the Namespace does not exist or if there are machines associated with it.
func (*Headscale) EnableNodeRoute ¶
func (h *Headscale) EnableNodeRoute(namespace string, nodeName string, routeStr string) (*netaddr.IPPrefix, error)
EnableNodeRoute enables a subnet route advertised by a node (identified by namespace and node name)
func (*Headscale) ExpireEphemeralNodes ¶
ExpireEphemeralNodes deletes ephemeral machine records that have not been seen for longer than h.cfg.EphemeralNodeInactivityTimeout
func (*Headscale) GetMachine ¶
GetMachine finds a Machine by name and namespace and returns the Machine struct
func (*Headscale) GetNamespace ¶
GetNamespace fetches a namespace by name
func (*Headscale) GetNodeRoutes ¶
GetNodeRoutes returns the subnet routes advertised by a node (identified by namespace and node name)
func (*Headscale) GetPreAuthKeys ¶
func (h *Headscale) GetPreAuthKeys(namespaceName string) (*[]PreAuthKey, error)
GetPreAuthKeys returns the list of PreAuthKeys for a namespace
func (*Headscale) KeyHandler ¶
KeyHandler provides the Headscale pub key Listens in /key
func (*Headscale) ListMachinesInNamespace ¶
ListMachinesInNamespace gets all the nodes in a given namespace
func (*Headscale) ListNamespaces ¶
ListNamespaces gets all the existing namespaces
func (*Headscale) PollNetMapHandler ¶
PollNetMapHandler takes care of /machine/:id/map
This is the busiest endpoint, as it keeps the HTTP long poll that updates the clients when something in the network changes.
The clients POST stuff like HostInfo and their Endpoints here, but only after their first request (marked with the ReadOnly field).
At this moment the updates are sent in a quite horrendous way, but they kinda work.
func (*Headscale) RegisterMachine ¶
RegisterMachine is executed from the CLI to register a new Machine using its MachineKey
func (*Headscale) RegisterWebAPI ¶
RegisterWebAPI shows a simple message in the browser to point to the CLI Listens in /register
func (*Headscale) RegistrationHandler ¶
RegistrationHandler handles the actual registration process of a machine Endpoint /machine/:id
type Machine ¶
type Machine struct { ID uint64 `gorm:"primary_key"` MachineKey string `gorm:"type:varchar(64);unique_index"` NodeKey string DiscoKey string IPAddress string Name string NamespaceID uint Namespace Namespace `gorm:"foreignKey:NamespaceID"` Registered bool // temp RegisterMethod string AuthKeyID uint AuthKey *PreAuthKey LastSeen *time.Time Expiry *time.Time HostInfo datatypes.JSON Endpoints datatypes.JSON EnabledRoutes datatypes.JSON CreatedAt time.Time UpdatedAt time.Time DeletedAt *time.Time }
Machine is a Headscale client