diff --git a/.travis.yml b/.travis.yml index db17dd3..6ec0a42 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,11 +3,9 @@ sudo: false matrix: include: - - go: 1.3 - - go: 1.4 - - go: 1.5 - - go: 1.6 - go: 1.7 + - go: 1.8 + - go: 1.9 - go: tip allow_failures: - go: tip diff --git a/sessions.go b/sessions.go index fe0d2bc..d082bc9 100644 --- a/sessions.go +++ b/sessions.go @@ -5,12 +5,11 @@ package sessions import ( + "context" "encoding/gob" "fmt" "net/http" "time" - - "github.com/gorilla/context" ) // Default flashes key. @@ -121,18 +120,23 @@ type contextKey int // registryKey is the key used to store the registry in the context. const registryKey contextKey = 0 +// StoreRegistry creates and stores a registry in a request +func StoreRegistry(r *http.Request) *http.Request { + newRegistry := &Registry{ + request: r, + sessions: make(map[string]sessionInfo), + } + + return r.WithContext(context.WithValue(r.Context(), registryKey, newRegistry)) +} + // GetRegistry returns a registry instance for the current request. func GetRegistry(r *http.Request) *Registry { - registry := context.Get(r, registryKey) + registry := r.Context().Value(registryKey) if registry != nil { return registry.(*Registry) } - newRegistry := &Registry{ - request: r, - sessions: make(map[string]sessionInfo), - } - context.Set(r, registryKey, newRegistry) - return newRegistry + panic("Registry not set in request context!") } // Registry stores sessions used during a request. diff --git a/sessions_test.go b/sessions_test.go index c166b05..df0cf10 100644 --- a/sessions_test.go +++ b/sessions_test.go @@ -46,6 +46,7 @@ func TestFlashes(t *testing.T) { // Round 1 ---------------------------------------------------------------- req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) + req = StoreRegistry(req) rsp = NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { @@ -78,6 +79,7 @@ func TestFlashes(t *testing.T) { // Round 2 ---------------------------------------------------------------- req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) + req = StoreRegistry(req) req.Header.Add("Cookie", cookies[0]) rsp = NewRecorder() // Get a session. @@ -112,6 +114,7 @@ func TestFlashes(t *testing.T) { // Custom type req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) + req = StoreRegistry(req) rsp = NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { @@ -138,6 +141,7 @@ func TestFlashes(t *testing.T) { // Custom type req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) + req = StoreRegistry(req) req.Header.Add("Cookie", cookies[0]) rsp = NewRecorder() // Get a session.