Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.1 KiB
36 lines
1.1 KiB
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 |
|
}
|
|
|