123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- package models
- import (
- "net"
- "net/netip"
- "time"
- "github.com/google/uuid"
- "golang.zx2c4.com/wireguard/wgctrl/wgtypes"
- )
- // OS_Types - list of OS types Netmaker cares about
- var OS_Types = struct {
- Linux string
- Windows string
- Mac string
- FreeBSD string
- IoT string
- }{
- Linux: "linux",
- Windows: "windows",
- Mac: "darwin",
- FreeBSD: "freebsd",
- IoT: "iot",
- }
- // NAT_Types - the type of NAT in which a HOST currently resides (simplified)
- var NAT_Types = struct {
- Public string
- BehindNAT string
- }{
- Public: "public",
- BehindNAT: "behind_nat",
- }
- // WIREGUARD_INTERFACE name of wireguard interface
- const (
- WIREGUARD_INTERFACE = "netmaker"
- DefaultPersistentKeepAlive = 20 * time.Second
- )
- // Host - represents a host on the network
- type Host struct {
- ID uuid.UUID `json:"id" yaml:"id"`
- Verbosity int `json:"verbosity" yaml:"verbosity"`
- FirewallInUse string `json:"firewallinuse" yaml:"firewallinuse"`
- Version string `json:"version" yaml:"version"`
- IPForwarding bool `json:"ipforwarding" yaml:"ipforwarding"`
- DaemonInstalled bool `json:"daemoninstalled" yaml:"daemoninstalled"`
- AutoUpdate bool `json:"autoupdate" yaml:"autoupdate"`
- HostPass string `json:"hostpass" yaml:"hostpass"`
- Name string `json:"name" yaml:"name"`
- OS string `json:"os" yaml:"os"`
- Interface string `json:"interface" yaml:"interface"`
- Debug bool `json:"debug" yaml:"debug"`
- ListenPort int `json:"listenport" yaml:"listenport"`
- WgPublicListenPort int `json:"wg_public_listen_port" yaml:"wg_public_listen_port"`
- MTU int `json:"mtu" yaml:"mtu"`
- PublicKey wgtypes.Key `json:"publickey" yaml:"publickey"`
- MacAddress net.HardwareAddr `json:"macaddress" yaml:"macaddress"`
- TrafficKeyPublic []byte `json:"traffickeypublic" yaml:"traffickeypublic"`
- Nodes []string `json:"nodes" yaml:"nodes"`
- Interfaces []Iface `json:"interfaces" yaml:"interfaces"`
- DefaultInterface string `json:"defaultinterface" yaml:"defaultinterface"`
- EndpointIP net.IP `json:"endpointip" yaml:"endpointip"`
- IsDocker bool `json:"isdocker" yaml:"isdocker"`
- IsK8S bool `json:"isk8s" yaml:"isk8s"`
- IsStatic bool `json:"isstatic" yaml:"isstatic"`
- IsDefault bool `json:"isdefault" yaml:"isdefault"`
- NatType string `json:"nat_type,omitempty" yaml:"nat_type,omitempty"`
- TurnEndpoint *netip.AddrPort `json:"turn_endpoint,omitempty" yaml:"turn_endpoint,omitempty"`
- PersistentKeepalive time.Duration `json:"persistentkeepalive" yaml:"persistentkeepalive"`
- }
- // FormatBool converts a boolean to a [yes|no] string
- func FormatBool(b bool) string {
- s := "no"
- if b {
- s = "yes"
- }
- return s
- }
- // ParseBool parses a [yes|no] string to boolean value
- func ParseBool(s string) bool {
- b := false
- if s == "yes" {
- b = true
- }
- return b
- }
- // HostMqAction - type for host update action
- type HostMqAction string
- const (
- // Upgrade - const to request host to update it's client
- Upgrade HostMqAction = "UPGRADE"
- // SignalHost - const for host signal action
- SignalHost HostMqAction = "SIGNAL_HOST"
- // UpdateHost - constant for host update action
- UpdateHost HostMqAction = "UPDATE_HOST"
- // DeleteHost - constant for host delete action
- DeleteHost HostMqAction = "DELETE_HOST"
- // JoinHostToNetwork - constant for host network join action
- JoinHostToNetwork HostMqAction = "JOIN_HOST_TO_NETWORK"
- // Acknowledgement - ACK response for hosts
- Acknowledgement HostMqAction = "ACK"
- // RequestAck - request an ACK
- RequestAck HostMqAction = "REQ_ACK"
- // CheckIn - update last check in times and public address and interfaces
- CheckIn HostMqAction = "CHECK_IN"
- // UpdateKeys - update wireguard private/public keys
- UpdateKeys HostMqAction = "UPDATE_KEYS"
- // RequestPull - request a pull from a host
- RequestPull HostMqAction = "REQ_PULL"
- // UpdateMetrics - updates metrics data
- UpdateMetrics HostMqAction = "UPDATE_METRICS"
- )
- // SignalAction - turn peer signal action
- type SignalAction string
- const (
- // ConnNegotiation - action to negotiate connection between peers
- ConnNegotiation SignalAction = "CONNECTION_NEGOTIATION"
- // RelayME - action to relay the peer
- RelayME SignalAction = "RELAY_ME"
- )
- // HostUpdate - struct for host update
- type HostUpdate struct {
- Action HostMqAction
- Host Host
- Node Node
- Signal Signal
- NewMetrics Metrics
- }
- // HostTurnRegister - struct for host turn registration
- type HostTurnRegister struct {
- HostID string `json:"host_id"`
- HostPassHash string `json:"host_pass_hash"`
- }
- // Signal - struct for signalling peer
- type Signal struct {
- Server string `json:"server"`
- FromHostPubKey string `json:"from_host_pubkey"`
- ToHostPubKey string `json:"to_host_pubkey"`
- FromHostID string `json:"from_host_id"`
- ToHostID string `json:"to_host_id"`
- FromNodeID string `json:"from_node_id"`
- ToNodeID string `json:"to_node_id"`
- Reply bool `json:"reply"`
- Action SignalAction `json:"action"`
- IsPro bool `json:"is_pro"`
- TimeStamp int64 `json:"timestamp"`
- }
- // RegisterMsg - login message struct for hosts to join via SSO login
- type RegisterMsg struct {
- RegisterHost Host `json:"host"`
- Network string `json:"network,omitempty"`
- User string `json:"user,omitempty"`
- Password string `json:"password,omitempty"`
- JoinAll bool `json:"join_all,omitempty"`
- Relay string `json:"relay,omitempty"`
- }
|