From 395c80dccf9ae725353d14492d158c37f32e0e0c Mon Sep 17 00:00:00 2001 From: MathieuHa Date: Sun, 16 Oct 2022 23:08:21 +0200 Subject: [PATCH] First version not working, unsafe library --- go.mod | 6 ++++++ go.sum | 6 ++++++ pkg/cache/cache.go | 34 ++++++++++++++++++++++++++++++++-- vendor/modules.txt | 6 ++++++ 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index f5d4f6d..54ad5ff 100644 --- a/go.mod +++ b/go.mod @@ -3,3 +3,9 @@ module github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin go 1.17 require github.com/leprosus/golang-ttl-map v1.1.7 + +require ( + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/go-redis/redis/v9 v9.0.0-rc.1 // indirect +) diff --git a/go.sum b/go.sum index ea5d6cc..dae434a 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,8 @@ +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/go-redis/redis/v9 v9.0.0-rc.1 h1:/+bS+yeUnanqAbuD3QwlejzQZ+4eqgfUtFTG4b+QnXs= +github.com/go-redis/redis/v9 v9.0.0-rc.1/go.mod h1:8et+z03j0l8N+DvsVnclzjf3Dl/pFHgRk+2Ct1qw66A= github.com/leprosus/golang-ttl-map v1.1.7 h1:cF4AAFDDnJTFSV+/42sKLhmMluvLdRlCGS2UaifH6UM= github.com/leprosus/golang-ttl-map v1.1.7/go.mod h1:4QWHJPeVBbrkhOhXdhCv9IEiyj/YzkO04/iexy4vSe0= diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go index c734c89..d3c46f3 100644 --- a/pkg/cache/cache.go +++ b/pkg/cache/cache.go @@ -1,17 +1,20 @@ package cache import ( + "context" "fmt" ttl_map "github.com/leprosus/golang-ttl-map" logger "github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin/pkg/logger" ) + const ( - cacheBannedValue = "t" - cacheNoBannedValue = "f" + cacheBannedValue = "t" + cacheNoBannedValue = "f" ) +var ctx = context.Background() var cache = ttl_map.New() // Get Decision check in the cache if the IP has the banned / not banned value. @@ -25,6 +28,33 @@ func GetDecision(clientIP string) (bool, error) { return false, fmt.Errorf("no cache data") } +func getDecisionLocalCache(clientIP string) (bool, error) { + banned, isCached := cache.Get(clientIP) + bannedString, isValid := banned.(string) + if isCached && isValid && len(bannedString) > 0 { + return bannedString == cacheBannedValue, nil + } + return false, fmt.Errorf("no cache data") +} + +func getDecisionRedisCache(clientIP string) (bool, error) { + rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + Password: "", // no password set + DB: 0, // use default DB + }) + banned, err := rdb.Get(ctx, "key").Result() + if err != nil { + panic(err) + } + banned, isCached := cache.Get(clientIP) + bannedString, isValid := banned.(string) + if isCached && isValid && len(bannedString) > 0 { + return bannedString == cacheBannedValue, nil + } + return false, fmt.Errorf("no cache data") +} + func SetDecision(clientIP string, isBanned bool, duration int64) { if isBanned { logger.Debug(fmt.Sprintf("%v banned", clientIP)) diff --git a/vendor/modules.txt b/vendor/modules.txt index 5e64cb5..26839b0 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,3 +1,9 @@ +# github.com/cespare/xxhash/v2 v2.1.2 +## explicit; go 1.11 +# github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f +## explicit +# github.com/go-redis/redis/v9 v9.0.0-rc.1 +## explicit; go 1.17 # github.com/leprosus/golang-ttl-map v1.1.7 ## explicit; go 1.15 github.com/leprosus/golang-ttl-map