mirror of
https://github.com/gravitl/netmaker.git
synced 2024-11-14 13:44:37 +08:00
46 lines
1.5 KiB
Go
46 lines
1.5 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/gravitl/netmaker/database"
|
|
)
|
|
|
|
// ExtClient - struct for external clients
|
|
type ExtClient struct {
|
|
ClientID string `json:"clientid" bson:"clientid"`
|
|
Description string `json:"description" bson:"description"`
|
|
PrivateKey string `json:"privatekey" bson:"privatekey"`
|
|
PublicKey string `json:"publickey" bson:"publickey"`
|
|
Network string `json:"network" bson:"network"`
|
|
Address string `json:"address" bson:"address"`
|
|
IngressGatewayID string `json:"ingressgatewayid" bson:"ingressgatewayid"`
|
|
IngressGatewayEndpoint string `json:"ingressgatewayendpoint" bson:"ingressgatewayendpoint"`
|
|
LastModified int64 `json:"lastmodified" bson:"lastmodified"`
|
|
}
|
|
|
|
// ExtClient.GetEgressRangesOnNetwork - returns the egress ranges on network of ext client
|
|
func (client *ExtClient) GetEgressRangesOnNetwork() ([]string, error) {
|
|
|
|
var result []string
|
|
nodesData, err := database.FetchRecords(database.NODES_TABLE_NAME)
|
|
if err != nil {
|
|
return []string{}, err
|
|
}
|
|
for _, nodeData := range nodesData {
|
|
var currentNode Node
|
|
if err = json.Unmarshal([]byte(nodeData), ¤tNode); err != nil {
|
|
continue
|
|
}
|
|
if currentNode.Network != client.Network {
|
|
continue
|
|
}
|
|
if currentNode.IsEgressGateway == "yes" { // add the egress gateway range(s) to the result
|
|
if len(currentNode.EgressGatewayRanges) > 0 {
|
|
result = append(result, currentNode.EgressGatewayRanges...)
|
|
}
|
|
}
|
|
}
|
|
|
|
return result, nil
|
|
}
|