retrieve.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package nodeacls
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/gravitl/netmaker/database"
  6. "github.com/gravitl/netmaker/logic/acls"
  7. )
  8. // AreNodesAllowed - checks if nodes are allowed to communicate in their network ACL
  9. func AreNodesAllowed(networkID acls.NetworkID, node1, node2 acls.NodeID) bool {
  10. var currentNetworkACL, err = FetchCurrentACL(networkID)
  11. if err != nil {
  12. return false
  13. }
  14. return currentNetworkACL[node1][node2] == acls.Allowed && currentNetworkACL[node2][node1] == acls.Allowed
  15. }
  16. // FetchNodeACL - fetches a specific node's ACL in a given network
  17. func FetchNodeACL(networkID acls.NetworkID, nodeID acls.NodeID) (acls.NodeACL, error) {
  18. currentNetACL, err := FetchCurrentACL(networkID)
  19. if err != nil {
  20. return nil, err
  21. }
  22. if currentNetACL[nodeID] == nil {
  23. return nil, fmt.Errorf("no node ACL present for node %s", nodeID)
  24. }
  25. return currentNetACL[nodeID], nil
  26. }
  27. // FetchNodeACLJson - fetches a node's acl in given network except returns the json string
  28. func FetchNodeACLJson(networkID acls.NetworkID, nodeID acls.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. // FetchCurrentACL - fetches all current node rules in given network ACL
  40. func FetchCurrentACL(networkID acls.NetworkID) (acls.NetworkACL, error) {
  41. aclJson, err := FetchCurrentACLJson(acls.NetworkID(networkID))
  42. if err != nil {
  43. return nil, err
  44. }
  45. var currentNetworkACL acls.NetworkACL
  46. if err := json.Unmarshal([]byte(aclJson), &currentNetworkACL); err != nil {
  47. return nil, err
  48. }
  49. return currentNetworkACL, nil
  50. }
  51. // FetchCurrentACLJson - fetch the current ACL of given network except in json string
  52. func FetchCurrentACLJson(networkID acls.NetworkID) (acls.ACLJson, error) {
  53. currentACLs, err := database.FetchRecord(database.NODE_ACLS_TABLE_NAME, string(networkID))
  54. if err != nil {
  55. return acls.ACLJson(""), err
  56. }
  57. return acls.ACLJson(currentACLs), nil
  58. }