accesskeys.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package logic
  2. import (
  3. "encoding/json"
  4. "github.com/gravitl/netmaker/database"
  5. "github.com/gravitl/netmaker/models"
  6. )
  7. // DecrimentKey - decriments key uses
  8. func DecrimentKey(networkName string, keyvalue string) {
  9. var network models.Network
  10. network, err := GetParentNetwork(networkName)
  11. if err != nil {
  12. return
  13. }
  14. for i := len(network.AccessKeys) - 1; i >= 0; i-- {
  15. currentkey := network.AccessKeys[i]
  16. if currentkey.Value == keyvalue {
  17. network.AccessKeys[i].Uses--
  18. if network.AccessKeys[i].Uses < 1 {
  19. network.AccessKeys = append(network.AccessKeys[:i],
  20. network.AccessKeys[i+1:]...)
  21. break
  22. }
  23. }
  24. }
  25. if newNetworkData, err := json.Marshal(&network); err != nil {
  26. Log("failed to decrement key", 2)
  27. return
  28. } else {
  29. database.Insert(network.NetID, string(newNetworkData), database.NETWORKS_TABLE_NAME)
  30. }
  31. }
  32. // IsKeyValid - check if key is valid
  33. func IsKeyValid(networkname string, keyvalue string) bool {
  34. network, _ := GetParentNetwork(networkname)
  35. var key models.AccessKey
  36. foundkey := false
  37. isvalid := false
  38. for i := len(network.AccessKeys) - 1; i >= 0; i-- {
  39. currentkey := network.AccessKeys[i]
  40. if currentkey.Value == keyvalue {
  41. key = currentkey
  42. foundkey = true
  43. }
  44. }
  45. if foundkey {
  46. if key.Uses > 0 {
  47. isvalid = true
  48. }
  49. }
  50. return isvalid
  51. }