accesskeys.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. }
  52. func RemoveKeySensitiveInfo(keys []models.AccessKey) []models.AccessKey {
  53. var returnKeys []models.AccessKey
  54. for _, key := range keys {
  55. key.Value = models.PLACEHOLDER_KEY_TEXT
  56. key.AccessString = models.PLACEHOLDER_TOKEN_TEXT
  57. returnKeys = append(returnKeys, key)
  58. }
  59. return returnKeys
  60. }