diff --git a/go.mod b/go.mod index 9200504b8..b50a674b9 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.22.1 require ( github.com/caddyserver/caddy/v2 v2.8.4 github.com/cespare/xxhash/v2 v2.2.0 - github.com/darkweak/storages/core v0.0.4 + github.com/darkweak/storages/core v0.0.6-0.20240731100357-2a602dafc881 github.com/google/uuid v1.6.0 github.com/pierrec/lz4/v4 v4.1.21 github.com/pquerna/cachecontrol v0.2.0 @@ -13,6 +13,7 @@ require ( github.com/prometheus/client_model v0.5.0 go.uber.org/zap v1.27.0 golang.org/x/sync v0.7.0 + google.golang.org/protobuf v1.34.2 gopkg.in/yaml.v3 v3.0.1 ) @@ -109,7 +110,6 @@ require ( golang.org/x/time v0.5.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240506185236-b8a5c65736ae // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 // indirect - google.golang.org/protobuf v1.34.1 // indirect howett.net/plist v1.0.0 // indirect ) diff --git a/go.sum b/go.sum index 97df2cd7c..44d44c079 100644 --- a/go.sum +++ b/go.sum @@ -98,8 +98,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/darkweak/go-esi v0.0.5 h1:b9LHI8Tz46R+i6p8avKPHAIBRQUCZDebNmKm5w/Zrns= github.com/darkweak/go-esi v0.0.5/go.mod h1:koCJqwum1u6mslyZuq/Phm6hfG1K3ZK5Y7jrUBTH654= -github.com/darkweak/storages/core v0.0.4 h1:rpFTiN+CHwdlXThS28mRpvsSfuMVqWcOe/xtC5A2AQg= -github.com/darkweak/storages/core v0.0.4/go.mod h1:wLp1cOAB4WUd46BBOtV4Lwot4GD+8fZbtIw6QM7fYuc= +github.com/darkweak/storages/core v0.0.6-0.20240731100357-2a602dafc881 h1:WsLHVD+WDxYh5SuZzpZXnhnDruZVrrvnYsHw08izs1s= +github.com/darkweak/storages/core v0.0.6-0.20240731100357-2a602dafc881/go.mod h1:mWN/TO5aLYt2jK6EweZ4JFXXPYmYwYFUQ4YBuIlBkpc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -576,8 +576,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/pkg/api/souin.go b/pkg/api/souin.go index 661706de6..0f11e2e09 100644 --- a/pkg/api/souin.go +++ b/pkg/api/souin.go @@ -1,8 +1,6 @@ package api import ( - "bytes" - "encoding/gob" "encoding/json" "fmt" "net/http" @@ -14,6 +12,8 @@ import ( "github.com/darkweak/souin/pkg/storage/types" "github.com/darkweak/souin/pkg/surrogate/providers" "github.com/darkweak/storages/core" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/timestamppb" ) // SouinAPI object contains informations related to the endpoints @@ -71,8 +71,9 @@ func (s *SouinAPI) BulkDelete(key string, purge bool) { for _, current := range s.storers { if b := current.Get(core.MappingKeyPrefix + key); len(b) > 0 { var mapping core.StorageMapper - if e := gob.NewDecoder(bytes.NewBuffer(b)).Decode(&mapping); e == nil { - for k := range mapping.Mapping { + + if e := proto.Unmarshal(b, &mapping); e == nil { + for k := range mapping.GetMapping() { current.Delete(k) } } @@ -82,7 +83,7 @@ func (s *SouinAPI) BulkDelete(key string, purge bool) { } else { newFreshTime := time.Now() for k, v := range mapping.Mapping { - v.FreshTime = newFreshTime + v.FreshTime = timestamppb.New(newFreshTime) mapping.Mapping[k] = v } } @@ -156,29 +157,29 @@ func (s *SouinAPI) purgeMapping() { infiniteStoreDuration := storageToInfiniteTTLMap[current.Name()] values := current.MapKeys(core.MappingKeyPrefix) for k, v := range values { - var mapping core.StorageMapper - e := gob.NewDecoder(bytes.NewBuffer([]byte(v))).Decode(&mapping) + mapping := &core.StorageMapper{} + + e := proto.Unmarshal([]byte(v), mapping) if e != nil { current.Delete(core.MappingKeyPrefix + k) continue } updated := false - for key, val := range mapping.Mapping { - if now.Sub(val.FreshTime) > 0 && now.Sub(val.StaleTime) > 0 { - delete(mapping.Mapping, key) + for key, val := range mapping.GetMapping() { + if now.Sub(val.FreshTime.AsTime()) > 0 && now.Sub(val.StaleTime.AsTime()) > 0 { + delete(mapping.GetMapping(), key) updated = true } } if updated { - buf := new(bytes.Buffer) - e = gob.NewEncoder(buf).Encode(mapping) + v, e := proto.Marshal(mapping) if e != nil { fmt.Println("Impossible to re-encode the mapping", core.MappingKeyPrefix+k) current.Delete(core.MappingKeyPrefix + k) } - _ = current.Set(core.MappingKeyPrefix+k, buf.Bytes(), infiniteStoreDuration) + _ = current.Set(core.MappingKeyPrefix+k, v, infiniteStoreDuration) } } } diff --git a/pkg/storage/defaultProvider.go b/pkg/storage/defaultProvider.go index 653fd203f..8eb9ebf05 100644 --- a/pkg/storage/defaultProvider.go +++ b/pkg/storage/defaultProvider.go @@ -57,9 +57,9 @@ func (provider *Default) MapKeys(prefix string) map[string]string { return true } - if v, ok := value.(core.StorageMapper); ok { + if v, ok := value.(*core.StorageMapper); ok { for _, v := range v.Mapping { - if v.StaleTime.After(now) { + if v.StaleTime.AsTime().After(now) { keys[v.RealKey] = string(provider.Get(v.RealKey)) } } @@ -82,7 +82,7 @@ func (provider *Default) ListKeys() []string { mapping, err := core.DecodeMapping(value.([]byte)) if err == nil { for _, v := range mapping.Mapping { - if v.StaleTime.After(now) { + if v.StaleTime.AsTime().After(now) { keys = append(keys, v.RealKey) } else { provider.m.Delete(v.RealKey) diff --git a/plugins/caddy/go.mod b/plugins/caddy/go.mod index c47abe97b..5c92098ee 100644 --- a/plugins/caddy/go.mod +++ b/plugins/caddy/go.mod @@ -5,7 +5,7 @@ go 1.22.1 require ( github.com/caddyserver/caddy/v2 v2.8.4 github.com/darkweak/souin v1.6.49 - github.com/darkweak/storages/core v0.0.4 + github.com/darkweak/storages/core v0.0.6-0.20240731100357-2a602dafc881 go.uber.org/zap v1.27.0 ) @@ -147,7 +147,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20240506185236-b8a5c65736ae // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 // indirect google.golang.org/grpc v1.63.2 // indirect - google.golang.org/protobuf v1.34.1 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect howett.net/plist v1.0.0 // indirect diff --git a/plugins/caddy/go.sum b/plugins/caddy/go.sum index 41a97e859..6c3ea5489 100644 --- a/plugins/caddy/go.sum +++ b/plugins/caddy/go.sum @@ -109,8 +109,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/darkweak/go-esi v0.0.5 h1:b9LHI8Tz46R+i6p8avKPHAIBRQUCZDebNmKm5w/Zrns= github.com/darkweak/go-esi v0.0.5/go.mod h1:koCJqwum1u6mslyZuq/Phm6hfG1K3ZK5Y7jrUBTH654= -github.com/darkweak/storages/core v0.0.4 h1:rpFTiN+CHwdlXThS28mRpvsSfuMVqWcOe/xtC5A2AQg= -github.com/darkweak/storages/core v0.0.4/go.mod h1:wLp1cOAB4WUd46BBOtV4Lwot4GD+8fZbtIw6QM7fYuc= +github.com/darkweak/storages/core v0.0.6-0.20240731100357-2a602dafc881 h1:WsLHVD+WDxYh5SuZzpZXnhnDruZVrrvnYsHw08izs1s= +github.com/darkweak/storages/core v0.0.6-0.20240731100357-2a602dafc881/go.mod h1:mWN/TO5aLYt2jK6EweZ4JFXXPYmYwYFUQ4YBuIlBkpc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -630,8 +630,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=