33 lines
856 B
Go
33 lines
856 B
Go
|
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
|
||
|
func CreateCookieSessionStore(authKeySize, encryptKeySize int) (sessions.Store, error) {
|
||
|
authenticationKey, err := generateRandomBytes(64)
|
||
|
if err != nil {
|
||
|
return nil, errors.Wrap(err, "error while generating cookie authentication key")
|
||
|
}
|
||
|
encryptionKey, err := generateRandomBytes(32)
|
||
|
if err != nil {
|
||
|
return nil, errors.Wrap(err, "error while generating cookie encryption key")
|
||
|
}
|
||
|
store := sessions.NewCookieStore(authenticationKey, encryptionKey)
|
||
|
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
|
||
|
}
|