2018-12-06 21:42:01 +01:00
|
|
|
package gorilla
|
|
|
|
|
|
|
|
import (
|
|
|
|
"crypto/rand"
|
|
|
|
|
|
|
|
"github.com/gorilla/sessions"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
)
|
|
|
|
|
|
|
|
// CreateCookieSessionStore creates and returns a new cookie session store
|
|
|
|
// with random authentication and encryption keys
|
2019-05-13 09:09:28 +02:00
|
|
|
func CreateCookieSessionStore(authKeySize, encryptKeySize int, defaultOptions *sessions.Options) (sessions.Store, error) {
|
|
|
|
authenticationKey, err := generateRandomBytes(authKeySize)
|
2018-12-06 21:42:01 +01:00
|
|
|
if err != nil {
|
|
|
|
return nil, errors.Wrap(err, "error while generating cookie authentication key")
|
|
|
|
}
|
2019-05-13 09:09:28 +02:00
|
|
|
encryptionKey, err := generateRandomBytes(encryptKeySize)
|
2018-12-06 21:42:01 +01:00
|
|
|
if err != nil {
|
|
|
|
return nil, errors.Wrap(err, "error while generating cookie encryption key")
|
|
|
|
}
|
|
|
|
store := sessions.NewCookieStore(authenticationKey, encryptionKey)
|
2019-05-13 09:09:28 +02:00
|
|
|
store.Options = defaultOptions
|
2018-12-06 21:42:01 +01:00
|
|
|
return store, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func generateRandomBytes(n int) ([]byte, error) {
|
|
|
|
b := make([]byte, n)
|
|
|
|
_, err := rand.Read(b)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return b, nil
|
|
|
|
}
|