move to stores
This commit is contained in:
21
redisstore/LICENSE
Normal file
21
redisstore/LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2016 Gin-Gonic
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
72
redisstore/redis.go
Normal file
72
redisstore/redis.go
Normal file
@ -0,0 +1,72 @@
|
||||
package redisstore
|
||||
|
||||
import (
|
||||
"github.com/boj/redistore"
|
||||
ginsessions "github.com/dalu/sessions"
|
||||
"github.com/garyburd/redigo/redis"
|
||||
"github.com/gorilla/sessions"
|
||||
)
|
||||
|
||||
// RedisStore interface
|
||||
type RedisStore interface {
|
||||
ginsessions.Store
|
||||
}
|
||||
|
||||
// NewRedisStore creates a new Redis 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 NewRedisStore(size int, network, address, password string, keyPairs ...[]byte) (RedisStore, error) {
|
||||
store, err := redistore.NewRediStore(size, network, address, password, keyPairs...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &redisStore{store}, nil
|
||||
}
|
||||
|
||||
// NewRedisStoreWithDB - like NewRedisStore 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 NewRedisStoreWithDB(size int, network, address, password, DB string, keyPairs ...[]byte) (RedisStore, error) {
|
||||
store, err := redistore.NewRediStoreWithDB(size, network, address, password, DB, keyPairs...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &redisStore{store}, nil
|
||||
}
|
||||
|
||||
// NewRedisStoreWithPool instantiates a RediStore with a *redis.Pool passed in.
|
||||
//
|
||||
// Ref: https://godoc.org/github.com/boj/redistore#NewRediStoreWithPool
|
||||
func NewRedisStoreWithPool(pool *redis.Pool, keyPairs ...[]byte) (RedisStore, error) {
|
||||
store, err := redistore.NewRediStoreWithPool(pool, keyPairs...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &redisStore{store}, nil
|
||||
}
|
||||
|
||||
type redisStore struct {
|
||||
*redistore.RediStore
|
||||
}
|
||||
|
||||
func (c *redisStore) Options(options ginsessions.Options) {
|
||||
c.RediStore.Options = &sessions.Options{
|
||||
Path: options.Path,
|
||||
Domain: options.Domain,
|
||||
MaxAge: options.MaxAge,
|
||||
Secure: options.Secure,
|
||||
HttpOnly: options.HTTPOnly,
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user