extclient.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package models
  2. import (
  3. "encoding/json"
  4. "github.com/gravitl/netmaker/database"
  5. )
  6. // ExtClient - struct for external clients
  7. type ExtClient struct {
  8. ClientID string `json:"clientid" bson:"clientid"`
  9. Description string `json:"description" bson:"description"`
  10. PrivateKey string `json:"privatekey" bson:"privatekey"`
  11. PublicKey string `json:"publickey" bson:"publickey"`
  12. Network string `json:"network" bson:"network"`
  13. Address string `json:"address" bson:"address"`
  14. IngressGatewayID string `json:"ingressgatewayid" bson:"ingressgatewayid"`
  15. IngressGatewayEndpoint string `json:"ingressgatewayendpoint" bson:"ingressgatewayendpoint"`
  16. LastModified int64 `json:"lastmodified" bson:"lastmodified"`
  17. }
  18. // ExtClient.GetEgressRangesOnNetwork - returns the egress ranges on network of ext client
  19. func (client *ExtClient) GetEgressRangesOnNetwork() ([]string, error) {
  20. var result []string
  21. nodesData, err := database.FetchRecords(database.NODES_TABLE_NAME)
  22. if err != nil {
  23. return []string{}, err
  24. }
  25. for _, nodeData := range nodesData {
  26. var currentNode Node
  27. if err = json.Unmarshal([]byte(nodeData), &currentNode); err != nil {
  28. continue
  29. }
  30. if currentNode.Network != client.Network {
  31. continue
  32. }
  33. if currentNode.IsEgressGateway == "yes" { // add the egress gateway range(s) to the result
  34. if len(currentNode.EgressGatewayRanges) > 0 {
  35. result = append(result, currentNode.EgressGatewayRanges...)
  36. }
  37. }
  38. }
  39. return result, nil
  40. }