netcache.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package netcache
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "time"
  6. "github.com/gravitl/netmaker/database"
  7. )
  8. const (
  9. expirationTime = time.Minute * 5
  10. )
  11. // CValue - the cache object for a network
  12. type CValue struct {
  13. Network string `json:"network"`
  14. Value string `json:"value"`
  15. Pass string `json:"pass"`
  16. User string `json:"user"`
  17. Expiration time.Time `json:"expiration"`
  18. }
  19. var errExpired = fmt.Errorf("expired")
  20. // Set - sets a value to a key in db
  21. func Set(k string, newValue *CValue) error {
  22. newValue.Expiration = time.Now().Add(expirationTime)
  23. newData, err := json.Marshal(newValue)
  24. if err != nil {
  25. return err
  26. }
  27. return database.Insert(k, string(newData), database.CACHE_TABLE_NAME)
  28. }
  29. // Get - gets a value from db, if expired, return err
  30. func Get(k string) (*CValue, error) {
  31. record, err := database.FetchRecord(database.CACHE_TABLE_NAME, k)
  32. if err != nil {
  33. return nil, err
  34. }
  35. var entry CValue
  36. if err := json.Unmarshal([]byte(record), &entry); err != nil {
  37. return nil, err
  38. }
  39. if time.Now().After(entry.Expiration) {
  40. return nil, errExpired
  41. }
  42. return &entry, nil
  43. }
  44. // Del - deletes a value from db
  45. func Del(k string) error {
  46. return database.DeleteRecord(database.CACHE_TABLE_NAME, k)
  47. }