feat(NET-709): add node metadata for remote gws

This commit is contained in:
the_aceix
2024-01-19 16:17:18 +00:00
parent 058338f372
commit 5882b86d40
6 changed files with 20 additions and 3 deletions

View File

@@ -635,6 +635,10 @@ func updateNode(w http.ResponseWriter, r *http.Request) {
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest")) logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
return return
} }
if len(newData.Metadata) > 255 {
logic.ReturnErrorResponse(w, r, logic.FormatError(fmt.Errorf("metadata cannot be longer than 255 characters"), "badrequest"))
return
}
newNode := newData.ConvertToServerNode(&currentNode) newNode := newData.ConvertToServerNode(&currentNode)
relayUpdate := logic.RelayUpdates(&currentNode, newNode) relayUpdate := logic.RelayUpdates(&currentNode, newNode)
_, err = logic.GetHost(newNode.HostID.String()) _, err = logic.GetHost(newNode.HostID.String())

View File

@@ -174,6 +174,9 @@ func CreateIngressGateway(netid string, nodeid string, ingress models.IngressReq
node.IngressGatewayRange6 = network.AddressRange6 node.IngressGatewayRange6 = network.AddressRange6
node.IngressDNS = ingress.ExtclientDNS node.IngressDNS = ingress.ExtclientDNS
node.SetLastModified() node.SetLastModified()
if node.Metadata == "" {
node.Metadata = "This host can be used for remote access"
}
err = UpsertNode(&node) err = UpsertNode(&node)
if err != nil { if err != nil {
return models.Node{}, err return models.Node{}, err
@@ -224,6 +227,7 @@ func DeleteIngressGateway(nodeid string) (models.Node, []models.ExtClient, error
node.IsIngressGateway = false node.IsIngressGateway = false
node.IsInternetGateway = false node.IsInternetGateway = false
node.IngressGatewayRange = "" node.IngressGatewayRange = ""
node.Metadata = ""
err = UpsertNode(&node) err = UpsertNode(&node)
if err != nil { if err != nil {
return models.Node{}, removedClients, err return models.Node{}, removedClients, err

View File

@@ -11,9 +11,9 @@ import (
type ApiNode struct { type ApiNode struct {
ID string `json:"id,omitempty" validate:"required,min=5,id_unique"` ID string `json:"id,omitempty" validate:"required,min=5,id_unique"`
HostID string `json:"hostid,omitempty" validate:"required,min=5,id_unique"` HostID string `json:"hostid,omitempty" validate:"required,min=5,id_unique"`
Address string `json:"address" validate:"omitempty,ipv4"` Address string `json:"address" validate:"omitempty,cidrv4"`
Address6 string `json:"address6" validate:"omitempty,ipv6"` Address6 string `json:"address6" validate:"omitempty,cidrv6"`
LocalAddress string `json:"localaddress" validate:"omitempty,ipv4"` LocalAddress string `json:"localaddress" validate:"omitempty,cidr"`
AllowedIPs []string `json:"allowedips"` AllowedIPs []string `json:"allowedips"`
LastModified int64 `json:"lastmodified"` LastModified int64 `json:"lastmodified"`
ExpirationDateTime int64 `json:"expdatetime"` ExpirationDateTime int64 `json:"expdatetime"`
@@ -37,6 +37,7 @@ type ApiNode struct {
InternetGateway string `json:"internetgateway"` InternetGateway string `json:"internetgateway"`
Connected bool `json:"connected"` Connected bool `json:"connected"`
PendingDelete bool `json:"pendingdelete"` PendingDelete bool `json:"pendingdelete"`
Metadata string `json:"metadata" validate:"max=256"`
// == PRO == // == PRO ==
DefaultACL string `json:"defaultacl,omitempty" validate:"checkyesornoorunset"` DefaultACL string `json:"defaultacl,omitempty" validate:"checkyesornoorunset"`
IsFailOver bool `json:"is_fail_over"` IsFailOver bool `json:"is_fail_over"`
@@ -104,6 +105,7 @@ func (a *ApiNode) ConvertToServerNode(currentNode *Node) *Node {
convertedNode.LastCheckIn = time.Unix(a.LastCheckIn, 0) convertedNode.LastCheckIn = time.Unix(a.LastCheckIn, 0)
convertedNode.LastPeerUpdate = time.Unix(a.LastPeerUpdate, 0) convertedNode.LastPeerUpdate = time.Unix(a.LastPeerUpdate, 0)
convertedNode.ExpirationDateTime = time.Unix(a.ExpirationDateTime, 0) convertedNode.ExpirationDateTime = time.Unix(a.ExpirationDateTime, 0)
convertedNode.Metadata = a.Metadata
return &convertedNode return &convertedNode
} }
@@ -158,6 +160,7 @@ func (nm *Node) ConvertToAPINode() *ApiNode {
apiNode.IsFailOver = nm.IsFailOver apiNode.IsFailOver = nm.IsFailOver
apiNode.FailOverPeers = nm.FailOverPeers apiNode.FailOverPeers = nm.FailOverPeers
apiNode.FailedOverBy = nm.FailedOverBy apiNode.FailedOverBy = nm.FailedOverBy
apiNode.Metadata = nm.Metadata
return &apiNode return &apiNode
} }

View File

@@ -87,6 +87,7 @@ type Node struct {
EgressGatewayRequest EgressGatewayRequest `json:"egressgatewayrequest" bson:"egressgatewayrequest" yaml:"egressgatewayrequest"` EgressGatewayRequest EgressGatewayRequest `json:"egressgatewayrequest" bson:"egressgatewayrequest" yaml:"egressgatewayrequest"`
IngressGatewayRange string `json:"ingressgatewayrange" bson:"ingressgatewayrange" yaml:"ingressgatewayrange"` IngressGatewayRange string `json:"ingressgatewayrange" bson:"ingressgatewayrange" yaml:"ingressgatewayrange"`
IngressGatewayRange6 string `json:"ingressgatewayrange6" bson:"ingressgatewayrange6" yaml:"ingressgatewayrange6"` IngressGatewayRange6 string `json:"ingressgatewayrange6" bson:"ingressgatewayrange6" yaml:"ingressgatewayrange6"`
Metadata string `json:"metadata"`
// == PRO == // == PRO ==
DefaultACL string `json:"defaultacl,omitempty" bson:"defaultacl,omitempty" yaml:"defaultacl,omitempty" validate:"checkyesornoorunset"` DefaultACL string `json:"defaultacl,omitempty" bson:"defaultacl,omitempty" yaml:"defaultacl,omitempty" validate:"checkyesornoorunset"`
OwnerID string `json:"ownerid,omitempty" bson:"ownerid,omitempty" yaml:"ownerid,omitempty"` OwnerID string `json:"ownerid,omitempty" bson:"ownerid,omitempty" yaml:"ownerid,omitempty"`

View File

@@ -71,6 +71,7 @@ type UserRemoteGws struct {
IsInternetGateway bool `json:"is_internet_gateway"` IsInternetGateway bool `json:"is_internet_gateway"`
GwClient ExtClient `json:"gw_client"` GwClient ExtClient `json:"gw_client"`
GwPeerPublicKey string `json:"gw_peer_public_key"` GwPeerPublicKey string `json:"gw_peer_public_key"`
Metadata string `json:"metadata"`
} }
// UserRemoteGwsReq - struct to hold user remote acccess gws req // UserRemoteGwsReq - struct to hold user remote acccess gws req

View File

@@ -212,6 +212,7 @@ func getUserRemoteAccessGws(w http.ResponseWriter, r *http.Request) {
Connected: true, Connected: true,
IsInternetGateway: node.IsInternetGateway, IsInternetGateway: node.IsInternetGateway,
GwPeerPublicKey: host.PublicKey.String(), GwPeerPublicKey: host.PublicKey.String(),
Metadata: node.Metadata,
}) })
userGws[node.Network] = gws userGws[node.Network] = gws
delete(user.RemoteGwIDs, node.ID.String()) delete(user.RemoteGwIDs, node.ID.String())
@@ -226,6 +227,7 @@ func getUserRemoteAccessGws(w http.ResponseWriter, r *http.Request) {
Connected: true, Connected: true,
IsInternetGateway: node.IsInternetGateway, IsInternetGateway: node.IsInternetGateway,
GwPeerPublicKey: host.PublicKey.String(), GwPeerPublicKey: host.PublicKey.String(),
Metadata: node.Metadata,
}) })
userGws[node.Network] = gws userGws[node.Network] = gws
processedAdminNodeIds[node.ID.String()] = struct{}{} processedAdminNodeIds[node.ID.String()] = struct{}{}
@@ -258,6 +260,7 @@ func getUserRemoteAccessGws(w http.ResponseWriter, r *http.Request) {
Network: node.Network, Network: node.Network,
IsInternetGateway: node.IsInternetGateway, IsInternetGateway: node.IsInternetGateway,
GwPeerPublicKey: host.PublicKey.String(), GwPeerPublicKey: host.PublicKey.String(),
Metadata: node.Metadata,
}) })
userGws[node.Network] = gws userGws[node.Network] = gws
} }
@@ -284,6 +287,7 @@ func getUserRemoteAccessGws(w http.ResponseWriter, r *http.Request) {
Network: node.Network, Network: node.Network,
IsInternetGateway: node.IsInternetGateway, IsInternetGateway: node.IsInternetGateway,
GwPeerPublicKey: host.PublicKey.String(), GwPeerPublicKey: host.PublicKey.String(),
Metadata: node.Metadata,
}) })
userGws[node.Network] = gws userGws[node.Network] = gws
} }