retrieve.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. var currentNetworkACL, err = FetchAllACLs(networkID)
  10. if err != nil {
  11. return false
  12. }
  13. var allowed bool
  14. acls.AclMutex.RLock()
  15. currNetworkACLNode1 := currentNetworkACL[acls.AclID(node1)]
  16. currNetworkACLNode2 := currentNetworkACL[acls.AclID(node2)]
  17. acls.AclMutex.RUnlock()
  18. allowed = currNetworkACLNode1.IsAllowed(acls.AclID(node2)) && currNetworkACLNode2.IsAllowed(acls.AclID(node1))
  19. return allowed
  20. }
  21. // FetchNodeACL - fetches a specific node's ACL in a given network
  22. func FetchNodeACL(networkID NetworkID, nodeID NodeID) (acls.ACL, error) {
  23. var currentNetworkACL, err = FetchAllACLs(networkID)
  24. if err != nil {
  25. return nil, err
  26. }
  27. var acl acls.ACL
  28. acls.AclMutex.RLock()
  29. if currentNetworkACL[acls.AclID(nodeID)] == nil {
  30. acls.AclMutex.RUnlock()
  31. return nil, fmt.Errorf("no node ACL present for node %s", nodeID)
  32. }
  33. acl = currentNetworkACL[acls.AclID(nodeID)]
  34. acls.AclMutex.RUnlock()
  35. return acl, nil
  36. }
  37. // FetchNodeACLJson - fetches a node's acl in given network except returns the json string
  38. func FetchNodeACLJson(networkID NetworkID, nodeID NodeID) (acls.ACLJson, error) {
  39. currentNodeACL, err := FetchNodeACL(networkID, nodeID)
  40. if err != nil {
  41. return "", err
  42. }
  43. acls.AclMutex.RLock()
  44. defer acls.AclMutex.RUnlock()
  45. jsonData, err := json.Marshal(&currentNodeACL)
  46. if err != nil {
  47. return "", err
  48. }
  49. return acls.ACLJson(jsonData), nil
  50. }
  51. // FetchAllACLs - fetchs all node
  52. func FetchAllACLs(networkID NetworkID) (acls.ACLContainer, error) {
  53. var err error
  54. var currentNetworkACL acls.ACLContainer
  55. currentNetworkACL, err = currentNetworkACL.Get(acls.ContainerID(networkID))
  56. if err != nil {
  57. return nil, err
  58. }
  59. return currentNetworkACL, nil
  60. }