summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/quasoft/websspi/secctx/session.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/quasoft/websspi/secctx/session.go')
-rw-r--r--vendor/github.com/quasoft/websspi/secctx/session.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/vendor/github.com/quasoft/websspi/secctx/session.go b/vendor/github.com/quasoft/websspi/secctx/session.go
new file mode 100644
index 0000000000..6f8ce29c42
--- /dev/null
+++ b/vendor/github.com/quasoft/websspi/secctx/session.go
@@ -0,0 +1,36 @@
+package secctx
+
+import (
+ "net/http"
+
+ "github.com/gorilla/securecookie"
+ "github.com/gorilla/sessions"
+)
+
+// CookieStore can store and retrieve SSPI context handles to/from an encrypted Cookie.
+type CookieStore struct {
+ store *sessions.CookieStore
+}
+
+// NewCookieStore creates a new CookieStore for storing and retrieving of SSPI context handles
+// to/from encrypted Cookies
+func NewCookieStore() *CookieStore {
+ s := &CookieStore{}
+ s.store = sessions.NewCookieStore([]byte(securecookie.GenerateRandomKey(32)))
+ return s
+}
+
+// GetHandle retrieves a *websspi.CtxtHandle value from the store
+func (s *CookieStore) GetHandle(r *http.Request) (interface{}, error) {
+ session, _ := s.store.Get(r, "websspi")
+ contextHandle := session.Values["contextHandle"]
+ return contextHandle, nil
+}
+
+// SetHandle saves a *websspi.CtxtHandle value to the store
+func (s *CookieStore) SetHandle(r *http.Request, w http.ResponseWriter, contextHandle interface{}) error {
+ session, _ := s.store.Get(r, "websspi")
+ session.Values["contextHandle"] = contextHandle
+ err := session.Save(r, w)
+ return err
+}