diff --git a/README.md b/README.md index d544899..aef86fb 100644 --- a/README.md +++ b/README.md @@ -147,13 +147,17 @@ package main import ( "github.com/gin-contrib/sessions" - "github.com/gin-contrib/sessions/redis" + redistore "github.com/gin-contrib/sessions/redis" "github.com/gin-gonic/gin" + "github.com/go-redis/redis" ) func main() { r := gin.Default() - store, _ := redis.NewStore(10, "tcp", "localhost:6379", "", []byte("secret")) + redisStore := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + }) + store, _ := redistore.NewStore(redisStore) r.Use(sessions.Sessions("mysession", store)) r.GET("/incr", func(c *gin.Context) { diff --git a/_example/redis/main.go b/_example/redis/main.go index ee48835..4268db8 100644 --- a/_example/redis/main.go +++ b/_example/redis/main.go @@ -2,13 +2,17 @@ package main import ( "github.com/gin-contrib/sessions" - "github.com/gin-contrib/sessions/redis" + redistore "github.com/gin-contrib/sessions/redis" "github.com/gin-gonic/gin" + "github.com/go-redis/redis" ) func main() { r := gin.Default() - store, _ := redis.NewStore(10, "tcp", "localhost:6379", "", []byte("secret")) + redisStore := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", + }) + store, _ := redistore.NewStore(redisStore) r.Use(sessions.Sessions("mysession", store)) r.GET("/incr", func(c *gin.Context) { diff --git a/go.mod b/go.mod index a792c60..61a2a09 100644 --- a/go.mod +++ b/go.mod @@ -3,15 +3,15 @@ module github.com/gin-contrib/sessions go 1.13 require ( - github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b github.com/bradleypeabody/gorilla-sessions-memcache v0.0.0-20181103040241-659414f458e1 github.com/gin-gonic/gin v1.6.3 github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 - github.com/gomodule/redigo v2.0.0+incompatible + github.com/go-redis/redis v6.15.5+incompatible github.com/gorilla/context v1.1.1 github.com/gorilla/sessions v1.2.0 github.com/kidstuff/mongostore v0.0.0-20181113001930-e650cd85ee4b github.com/memcachier/mc v2.0.1+incompatible github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b + github.com/rbcervilla/redisstore v1.1.0 ) diff --git a/go.sum b/go.sum index 2f3d565..afdcc8c 100644 --- a/go.sum +++ b/go.sum @@ -1,20 +1,16 @@ -github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff h1:RmdPFa+slIr4SCBg4st/l/vZWVe9QJKMXGO60Bxbe04= -github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw= github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0= github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= github.com/bradleypeabody/gorilla-sessions-memcache v0.0.0-20181103040241-659414f458e1 h1:4QHxgr7hM4gVD8uOwrk8T1fjkKRLwaLjmTkU0ibhZKU= github.com/bradleypeabody/gorilla-sessions-memcache v0.0.0-20181103040241-659414f458e1/go.mod h1:dkChI7Tbtx7H1Tj7TqGSZMOeGpMP5gLHtjroHd4agiI= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= 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= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 h1:DujepqpGd1hyOd7aW59XpK7Qymp8iy83xq74fLr21is= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= @@ -22,18 +18,19 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-redis/redis v6.15.5+incompatible h1:pLky8I0rgiblWfa8C1EV7fPEUv0aH6vKRaYHc/YRHVk= +github.com/go-redis/redis v6.15.5+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= -github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/sessions v1.1.1/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= github.com/gorilla/sessions v1.2.0 h1:S7P+1Hm5V/AT9cjEcUD5uDaQSX0OE577aCXgoaKpYbQ= github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/kidstuff/mongostore v0.0.0-20181113001930-e650cd85ee4b h1:TLCm7HR+P9HM2NXaAJaIiHerOUMedtFJeAfaYwZ8YhY= @@ -48,26 +45,33 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OH github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b h1:aUNXCGgukb4gtY99imuIeoh8Vr0GSwAlYxPAhqZrpFc= github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg= +github.com/rbcervilla/redisstore v1.1.0 h1:feH+JE0epVC+b8OzzPdA71t5HAOQCFI7tUWgDHpGwU0= +github.com/rbcervilla/redisstore v1.1.0/go.mod h1:mvjjXRPkE7/JSjPmAM+1ogezLA48ochb25Aq5d9t9gM= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/redis/redis.go b/redis/redis.go index c70149d..438f3a7 100644 --- a/redis/redis.go +++ b/redis/redis.go @@ -3,73 +3,38 @@ package redis import ( "errors" - "github.com/boj/redistore" "github.com/gin-contrib/sessions" - "github.com/gomodule/redigo/redis" + "github.com/go-redis/redis" + "github.com/rbcervilla/redisstore" ) type Store interface { sessions.Store } -// size: maximum number of idle connections. -// network: tcp or udp -// address: host:port -// password: redis-password -// Keys are defined in pairs to allow key rotation, but the common case is to set a single -// authentication key and optionally an encryption key. -// -// The first key in a pair is used for authentication and the second for encryption. The -// encryption key can be set to nil or omitted in the last pair, but the authentication key -// is required in all pairs. -// -// It is recommended to use an authentication key with 32 or 64 bytes. The encryption key, -// if set, must be either 16, 24, or 32 bytes to select AES-128, AES-192, or AES-256 modes. -func NewStore(size int, network, address, password string, keyPairs ...[]byte) (Store, error) { - s, err := redistore.NewRediStore(size, network, address, password, keyPairs...) +// NewStore - create new session store with given redis client interface +func NewStore(client redis.UniversalClient) (sessions.Store, error) { + innerStore, err := redisstore.NewRedisStore(client) if err != nil { return nil, err } - return &store{s}, nil -} - -// NewStoreWithDB - like NewStore but accepts `DB` parameter to select -// redis DB instead of using the default one ("0") -// -// Ref: https://godoc.org/github.com/boj/redistore#NewRediStoreWithDB -func NewStoreWithDB(size int, network, address, password, DB string, keyPairs ...[]byte) (Store, error) { - s, err := redistore.NewRediStoreWithDB(size, network, address, password, DB, keyPairs...) - if err != nil { - return nil, err - } - return &store{s}, nil -} - -// NewStoreWithPool instantiates a RediStore with a *redis.Pool passed in. -// -// Ref: https://godoc.org/github.com/boj/redistore#NewRediStoreWithPool -func NewStoreWithPool(pool *redis.Pool, keyPairs ...[]byte) (Store, error) { - s, err := redistore.NewRediStoreWithPool(pool, keyPairs...) - if err != nil { - return nil, err - } - return &store{s}, nil + return &store{innerStore}, nil } type store struct { - *redistore.RediStore + *redisstore.RedisStore } -// GetRedisStore get the actual woking store. +// GetRedisStore get the actual working store. // Ref: https://godoc.org/github.com/boj/redistore#RediStore -func GetRedisStore(s Store) (err error, rediStore *redistore.RediStore) { +func GetRedisStore(s Store) (err error, rediStore *redisstore.RedisStore) { realStore, ok := s.(*store) if !ok { err = errors.New("unable to get the redis store: Store isn't *store") return } - rediStore = realStore.RediStore + rediStore = realStore.RedisStore return } @@ -80,10 +45,10 @@ func SetKeyPrefix(s Store, prefix string) error { return err } - rediStore.SetKeyPrefix(prefix) + rediStore.KeyPrefix(prefix) return nil } func (c *store) Options(options sessions.Options) { - c.RediStore.Options = options.ToGorillaOptions() + c.RedisStore.Options(*options.ToGorillaOptions()) } diff --git a/redis/redis_test.go b/redis/redis_test.go index f0c0127..a0f9aec 100644 --- a/redis/redis_test.go +++ b/redis/redis_test.go @@ -1,6 +1,7 @@ package redis import ( + "github.com/go-redis/redis" "testing" "github.com/gin-contrib/sessions" @@ -10,7 +11,10 @@ import ( const redisTestServer = "localhost:6379" var newRedisStore = func(_ *testing.T) sessions.Store { - store, err := NewStore(10, "tcp", redisTestServer, "", []byte("secret")) + redisStore := redis.NewClient(&redis.Options{ + Addr: redisTestServer, + }) + store, err := NewStore(redisStore) if err != nil { panic(err) }