mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 09:22:42 +08:00
initial commit
This commit is contained in:
57
logic/pro/netcache/netcache.go
Normal file
57
logic/pro/netcache/netcache.go
Normal file
@@ -0,0 +1,57 @@
|
||||
package netcache
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/gravitl/netmaker/database"
|
||||
)
|
||||
|
||||
const (
|
||||
expirationTime = time.Minute * 5
|
||||
)
|
||||
|
||||
// CValue - the cache object for a network
|
||||
type CValue struct {
|
||||
Network string `json:"network"`
|
||||
Value string `json:"value"`
|
||||
Pass string `json:"pass"`
|
||||
User string `json:"user"`
|
||||
Expiration time.Time `json:"expiration"`
|
||||
}
|
||||
|
||||
var errExpired = fmt.Errorf("expired")
|
||||
|
||||
// Set - sets a value to a key in db
|
||||
func Set(k string, newValue *CValue) error {
|
||||
newValue.Expiration = time.Now().Add(expirationTime)
|
||||
newData, err := json.Marshal(newValue)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return database.Insert(k, string(newData), database.CACHE_TABLE_NAME)
|
||||
}
|
||||
|
||||
// Get - gets a value from db, if expired, return err
|
||||
func Get(k string) (*CValue, error) {
|
||||
record, err := database.FetchRecord(database.CACHE_TABLE_NAME, k)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var entry CValue
|
||||
if err := json.Unmarshal([]byte(record), &entry); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if time.Now().After(entry.Expiration) {
|
||||
return nil, errExpired
|
||||
}
|
||||
|
||||
return &entry, nil
|
||||
}
|
||||
|
||||
// Del - deletes a value from db
|
||||
func Del(k string) error {
|
||||
return database.DeleteRecord(database.CACHE_TABLE_NAME, k)
|
||||
}
|
Reference in New Issue
Block a user