Merge pull request #9 from caarlos0/vet
added missing docs, fixed warnings and 80c
This commit is contained in:
commit
96c90e2150
|
@ -48,17 +48,11 @@ func (db *PGStore) cleanup(interval time.Duration, quit <-chan struct{}, done ch
|
||||||
log.Printf("pgstore: unable to delete expired sessions: %v", err)
|
log.Printf("pgstore: unable to delete expired sessions: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// deleteExpired deletes expired sessions from the database.
|
// deleteExpired deletes expired sessions from the database.
|
||||||
func (db *PGStore) deleteExpired() error {
|
func (db *PGStore) deleteExpired() error {
|
||||||
_, err := db.DbMap.Exec("DELETE FROM http_sessions WHERE expireson < now()")
|
_, err := db.DbMap.Exec("DELETE FROM http_sessions WHERE expireson < now()")
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
30
pgstore.go
30
pgstore.go
|
@ -13,6 +13,7 @@ import (
|
||||||
_ "github.com/lib/pq"
|
_ "github.com/lib/pq"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// PGStore represents the currently configured session store
|
||||||
type PGStore struct {
|
type PGStore struct {
|
||||||
Codecs []securecookie.Codec
|
Codecs []securecookie.Codec
|
||||||
Options *sessions.Options
|
Options *sessions.Options
|
||||||
|
@ -22,16 +23,17 @@ type PGStore struct {
|
||||||
|
|
||||||
// Session type
|
// Session type
|
||||||
type Session struct {
|
type Session struct {
|
||||||
Id int64 `db: "id"`
|
Id int64 `db:"id"`
|
||||||
Key string `db: "key"`
|
Key string `db:"key"`
|
||||||
Data string `db: "data"`
|
Data string `db:"data"`
|
||||||
CreatedOn time.Time `db: "created_on"`
|
CreatedOn time.Time `db:"created_on"`
|
||||||
ModifiedOn time.Time `db: "modified_on"`
|
ModifiedOn time.Time `db:"modified_on"`
|
||||||
ExpiresOn time.Time `db: "expires_on"`
|
ExpiresOn time.Time `db:"expires_on"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPGStore(dbUrl string, keyPairs ...[]byte) *PGStore {
|
// NewPGStore creates a new PGStore instance
|
||||||
db, err := sql.Open("postgres", dbUrl)
|
func NewPGStore(dbURL string, keyPairs ...[]byte) *PGStore {
|
||||||
|
db, err := sql.Open("postgres", dbURL)
|
||||||
dbmap := &gorp.DbMap{Db: db, Dialect: gorp.PostgresDialect{}}
|
dbmap := &gorp.DbMap{Db: db, Dialect: gorp.PostgresDialect{}}
|
||||||
|
|
||||||
dbStore := &PGStore{
|
dbStore := &PGStore{
|
||||||
|
@ -60,11 +62,13 @@ func NewPGStore(dbUrl string, keyPairs ...[]byte) *PGStore {
|
||||||
return dbStore
|
return dbStore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close closes the database connection
|
||||||
func (db *PGStore) Close() {
|
func (db *PGStore) Close() {
|
||||||
db.DbMap.Db.Close()
|
db.DbMap.Db.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetches a session for a given name after it has been added to the registry.
|
// Get Fetches a session for a given name after it has been added to the
|
||||||
|
// registry.
|
||||||
func (db *PGStore) Get(r *http.Request, name string) (*sessions.Session, error) {
|
func (db *PGStore) Get(r *http.Request, name string) (*sessions.Session, error) {
|
||||||
return sessions.GetRegistry(r).Get(db, name)
|
return sessions.GetRegistry(r).Get(db, name)
|
||||||
}
|
}
|
||||||
|
@ -95,6 +99,7 @@ func (db *PGStore) New(r *http.Request, name string) (*sessions.Session, error)
|
||||||
return session, err
|
return session, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save saves the given session into the database and deletes cookies if needed
|
||||||
func (db *PGStore) Save(r *http.Request, w http.ResponseWriter, session *sessions.Session) error {
|
func (db *PGStore) Save(r *http.Request, w http.ResponseWriter, session *sessions.Session) error {
|
||||||
// Set delete if max-age is < 0
|
// Set delete if max-age is < 0
|
||||||
if session.Options.MaxAge < 0 {
|
if session.Options.MaxAge < 0 {
|
||||||
|
@ -130,8 +135,8 @@ func (db *PGStore) Save(r *http.Request, w http.ResponseWriter, session *session
|
||||||
// If l is 0 there is no limit to the size of a session, use with caution.
|
// If l is 0 there is no limit to the size of a session, use with caution.
|
||||||
// The default for a new PGStore is 4096. PostgreSQL allows for max
|
// The default for a new PGStore is 4096. PostgreSQL allows for max
|
||||||
// value sizes of up to 1GB (http://www.postgresql.org/docs/current/interactive/datatype-character.html)
|
// value sizes of up to 1GB (http://www.postgresql.org/docs/current/interactive/datatype-character.html)
|
||||||
func (s *PGStore) MaxLength(l int) {
|
func (db *PGStore) MaxLength(l int) {
|
||||||
for _, c := range s.Codecs {
|
for _, c := range db.Codecs {
|
||||||
if codec, ok := c.(*securecookie.SecureCookie); ok {
|
if codec, ok := c.(*securecookie.SecureCookie); ok {
|
||||||
codec.MaxLength(l)
|
codec.MaxLength(l)
|
||||||
}
|
}
|
||||||
|
@ -152,7 +157,8 @@ func (db *PGStore) MaxAge(age int) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//load fetches a session by ID from the database and decodes its content into session.Values
|
// load fetches a session by ID from the database and decodes its content
|
||||||
|
// into session.Values
|
||||||
func (db *PGStore) load(session *sessions.Session) error {
|
func (db *PGStore) load(session *sessions.Session) error {
|
||||||
var s Session
|
var s Session
|
||||||
err := db.DbMap.SelectOne(&s, "SELECT * FROM http_sessions WHERE key = $1", session.ID)
|
err := db.DbMap.SelectOne(&s, "SELECT * FROM http_sessions WHERE key = $1", session.ID)
|
||||||
|
|
Loading…
Reference in New Issue