retrieve.go 1.9 KB

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