bothold_store

package module
v0.0.0-...-db3d5e9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 13, 2025 License: MIT Imports: 8 Imported by: 0

README

BOTHOLD backend for gorilla sessions

Documentation

for


import (
    	bh "github.com/timshannon/bolthold"
    	bhs "github.com/jonhamm/bolthold-store"
)

// initialize and setup cleanup
store := bhs.New(bh.Open(...), []byte("secret"))
// db cleanup every hour
// close quit channel to stop cleanup
quit := make(chan struct{})
go store.PeriodicCleanup(1*time.Hour, quit)
// in HTTP handler
func handlerFunc(w http.ResponseWriter, r *http.Request) {
  session, err := store.Get(r, "session")
  session.Values["user_id"] = 123
  store.Save(r, w, session)
  http.Error(w, "", http.StatusOK)
}

For more details see bothold_store documentation.

Testing

Just sqlite3 tests:

go test

All databases using docker:

./test

If docker is not local (docker-machine etc):

DOCKER_IP=$(docker-machine ip dev) ./test

License

bothold_store is licensed under the MIT license. See LICENSE for the full license text.

Documentation

Overview

Package bothold_store is a BotHold backend for gorilla sessions

Simplest form:

    import (
		bh "github.com/timshannon/bolthold"
	    bhs "github.com/jonhamm/bolthold_store"
	)

	func main() {
		. . . .
		var db *bothold.Store;
		var store *bhs.Store
		var err error

		if db,err = bothold.Open(...); err != nil {
			panic(err)
		}
		defer() db.Close()

		if store,err := bhs.New(db, []byte("secret-hash-key")); err != nil {
			panic(err)
		}

All options:

store,err = bhs.NewSessionStore(
    db,
	[]byte("secret-hash-key"),       // 32 or 64 bytes recommended, required
	[]byte("secret-encryption-key")) // nil, 16, 24 or 32 bytes, optional
if err != nil {
	panic(err)
}
// some more settings, see sessions.Options
store.SessionOpts.Secure = true
store.SessionOpts.HttpOnly = true
store.SessionOpts.MaxAge = 60 * 60 * 24 * 60

If you want periodic cleanup of expired sessions:

quit := make(chan struct{})
go store.PeriodicCleanup(1*time.Hour, quit)

For more information about the keys see https://github.com/gorilla/securecookie

For API to use in HTTP handlers see https://github.com/gorilla/sessions

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BotholdSession

type BotholdSession struct {
	ID        string `botholdKey:"ID"`
	Data      string
	CreatedAt time.Time
	UpdatedAt time.Time
	ExpiresAt time.Time `botholdIndex:"ExpiresAt"`
}

type DB

type DB struct {
	Codecs      []securecookie.Codec
	SessionOpts *sessions.Options
	// contains filtered or unexported fields
}

DB represent a bothold_store

func NewSessionStore

func NewSessionStore(db *bh.Store, keyPairs ...[]byte) *DB

/ NewSessionStore creates a new bothold_store session with options

func (*DB) Cleanup

func (st *DB) Cleanup()

Cleanup deletes expired sessions

func (*DB) Get

func (st *DB) Get(r *http.Request, name string) (*sessions.Session, error)

Get returns a session for the given name after adding it to the registry.

func (*DB) MaxAge

func (st *DB) MaxAge(age int)

MaxAge sets the maximum age for the store and the underlying cookie implementation. Individual sessions can be deleted by setting Options.MaxAge = -1 for that session.

func (*DB) MaxLength

func (st *DB) MaxLength(l int)

MaxLength restricts the maximum length of new sessions to l. If l is 0 there is no limit to the size of a session, use with caution. The default is 4096 (default for securecookie)

func (*DB) New

func (st *DB) New(r *http.Request, name string) (*sessions.Session, error)

New creates a session with name without adding it to the registry.

func (*DB) PeriodicCleanup

func (st *DB) PeriodicCleanup(interval time.Duration, quit <-chan struct{})

PeriodicCleanup runs Cleanup every interval. Close quit channel to stop.

func (*DB) Save

func (st *DB) Save(r *http.Request, w http.ResponseWriter, session *sessions.Session) error

Save session and set cookie header

type Store

type Store interface {
	sessions.Store
	SessionOptions() *sessions.Options
}

func NewStore

func NewStore(db *bh.Store, expiredSessionCleanup bool, keyPairs ...[]byte) Store

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL