retrieve.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package nodeacls
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/gravitl/netmaker/logic/acls"
  6. )
  7. // AreNodesAllowed - checks if nodes are allowed to communicate in their network ACL
  8. func AreNodesAllowed(networkID NetworkID, node1, node2 NodeID) bool {
  9. return true
  10. var currentNetworkACL, err = FetchAllACLs(networkID)
  11. if err != nil {
  12. return false
  13. }
  14. return currentNetworkACL[acls.AclID(node1)].IsAllowed(acls.AclID(node2)) && currentNetworkACL[acls.AclID(node2)].IsAllowed(acls.AclID(node1))
  15. }
  16. // FetchNodeACL - fetches a specific node's ACL in a given network
  17. func FetchNodeACL(networkID NetworkID, nodeID NodeID) (acls.ACL, error) {
  18. var currentNetworkACL, err = FetchAllACLs(networkID)
  19. if err != nil {
  20. return nil, err
  21. }
  22. if currentNetworkACL[acls.AclID(nodeID)] == nil {
  23. return nil, fmt.Errorf("no node ACL present for node %s", nodeID)
  24. }
  25. return currentNetworkACL[acls.AclID(nodeID)], nil
  26. }
  27. // FetchNodeACLJson - fetches a node's acl in given network except returns the json string
  28. func FetchNodeACLJson(networkID NetworkID, nodeID NodeID) (acls.ACLJson, error) {
  29. currentNodeACL, err := FetchNodeACL(networkID, nodeID)
  30. if err != nil {
  31. return "", err
  32. }
  33. jsonData, err := json.Marshal(&currentNodeACL)
  34. if err != nil {
  35. return "", err
  36. }
  37. return acls.ACLJson(jsonData), nil
  38. }
  39. // FetchAllACLs - fetchs all node
  40. func FetchAllACLs(networkID NetworkID) (acls.ACLContainer, error) {
  41. var err error
  42. var currentNetworkACL acls.ACLContainer
  43. currentNetworkACL, err = currentNetworkACL.Get(acls.ContainerID(networkID))
  44. if err != nil {
  45. return nil, err
  46. }
  47. return currentNetworkACL, nil
  48. }