retrieve.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package nodeacls
  2. import (
  3. "encoding/json"
  4. "github.com/gravitl/netmaker/database"
  5. )
  6. // AreNodesAllowed - checks if nodes are allowed to communicate in their network ACL
  7. func AreNodesAllowed(networkID NetworkID, node1, node2 NodeID) bool {
  8. var currentNetworkACL, err = FetchCurrentACL(networkID)
  9. if err != nil {
  10. return false
  11. }
  12. return currentNetworkACL[node1][node2] == Allowed && currentNetworkACL[node2][node1] == Allowed
  13. }
  14. // FetchNodeACL - fetches a specific node's ACL in a given network
  15. func FetchNodeACL(networkID NetworkID, nodeID NodeID) (NodeACL, error) {
  16. currentNetACL, err := FetchCurrentACL(networkID)
  17. if err != nil {
  18. return nil, err
  19. }
  20. return currentNetACL[nodeID], nil
  21. }
  22. // FetchNodeACLJson - fetches a node's acl in given network except returns the json string
  23. func FetchNodeACLJson(networkID NetworkID, nodeID NodeID) (ACLJson, error) {
  24. currentNodeACL, err := FetchNodeACL(networkID, nodeID)
  25. if err != nil {
  26. return "", err
  27. }
  28. jsonData, err := json.Marshal(&currentNodeACL)
  29. if err != nil {
  30. return "", err
  31. }
  32. return ACLJson(jsonData), nil
  33. }
  34. // FetchCurrentACL - fetches all current node rules in given network ACL
  35. func FetchCurrentACL(networkID NetworkID) (NetworkACL, error) {
  36. aclJson, err := FetchCurrentACLJson(NetworkID(networkID))
  37. if err != nil {
  38. return nil, err
  39. }
  40. var currentNetworkACL NetworkACL
  41. if err := json.Unmarshal([]byte(aclJson), &currentNetworkACL); err != nil {
  42. return nil, err
  43. }
  44. return currentNetworkACL, nil
  45. }
  46. // FetchCurrentACLJson - fetch the current ACL of given network except in json string
  47. func FetchCurrentACLJson(networkID NetworkID) (ACLJson, error) {
  48. currentACLs, err := database.FetchRecord(database.NODE_ACLS_TABLE_NAME, string(networkID))
  49. if err != nil {
  50. return ACLJson(""), err
  51. }
  52. return ACLJson(currentACLs), nil
  53. }