mirror of
https://github.com/kataras/iris.git
synced 2025-12-17 09:57:01 +00:00
version 12.1.5
Former-commit-id: cda69f08955cb0d594e98bf26197ee573cbba4b2
This commit is contained in:
@@ -23,7 +23,7 @@ type (
|
||||
// newProvider returns a new sessions provider
|
||||
func newProvider() *provider {
|
||||
return &provider{
|
||||
sessions: make(map[string]*Session, 0),
|
||||
sessions: make(map[string]*Session),
|
||||
db: newMemDB(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -244,7 +244,11 @@ func (db *Database) Clear(sid string) {
|
||||
defer iter.Close()
|
||||
|
||||
for iter.Rewind(); iter.ValidForPrefix(prefix); iter.Next() {
|
||||
txn.Delete(iter.Item().Key())
|
||||
key := iter.Item().Key()
|
||||
if err := txn.Delete(key); err != nil {
|
||||
golog.Warnf("Database.Clear: %s: %v", key, err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,8 +259,12 @@ func (db *Database) Release(sid string) {
|
||||
db.Clear(sid)
|
||||
// and remove the $sid.
|
||||
txn := db.Service.NewTransaction(true)
|
||||
txn.Delete([]byte(sid))
|
||||
txn.Commit()
|
||||
if err := txn.Delete([]byte(sid)); err != nil {
|
||||
golog.Warnf("Database.Release.Delete: %s: %v", sid, err)
|
||||
}
|
||||
if err := txn.Commit(); err != nil {
|
||||
golog.Debugf("Database.Release.Commit: %s: %v", sid, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Close shutdowns the badger connection.
|
||||
|
||||
@@ -42,7 +42,7 @@ func New(path string, fileMode os.FileMode) (*Database, error) {
|
||||
return nil, errPathMissing
|
||||
}
|
||||
|
||||
if fileMode <= 0 {
|
||||
if fileMode == 0 {
|
||||
fileMode = os.FileMode(DefaultFileMode)
|
||||
}
|
||||
|
||||
@@ -67,11 +67,15 @@ func New(path string, fileMode os.FileMode) (*Database, error) {
|
||||
func NewFromDB(service *bolt.DB, bucketName string) (*Database, error) {
|
||||
bucket := []byte(bucketName)
|
||||
|
||||
service.Update(func(tx *bolt.Tx) (err error) {
|
||||
err := service.Update(func(tx *bolt.Tx) (err error) {
|
||||
_, err = tx.CreateBucketIfNotExists(bucket)
|
||||
return
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
db := &Database{table: bucket, Service: service}
|
||||
|
||||
runtime.SetFinalizer(db, closeDB)
|
||||
@@ -292,7 +296,7 @@ func (db *Database) Get(sid string, key string) (value interface{}) {
|
||||
|
||||
// Visit loops through all session keys and values.
|
||||
func (db *Database) Visit(sid string, cb func(key string, value interface{})) {
|
||||
db.Service.View(func(tx *bolt.Tx) error {
|
||||
err := db.Service.View(func(tx *bolt.Tx) error {
|
||||
b := db.getBucketForSession(tx, sid)
|
||||
if b == nil {
|
||||
return nil
|
||||
@@ -309,11 +313,15 @@ func (db *Database) Visit(sid string, cb func(key string, value interface{})) {
|
||||
return nil
|
||||
})
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
golog.Debugf("Database.Visit: %s: %v", sid, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Len returns the length of the session's entries (keys).
|
||||
func (db *Database) Len(sid string) (n int) {
|
||||
db.Service.View(func(tx *bolt.Tx) error {
|
||||
err := db.Service.View(func(tx *bolt.Tx) error {
|
||||
b := db.getBucketForSession(tx, sid)
|
||||
if b == nil {
|
||||
return nil
|
||||
@@ -323,6 +331,10 @@ func (db *Database) Len(sid string) (n int) {
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
golog.Debugf("Database.Len: %s: %v", sid, err)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@@ -342,7 +354,7 @@ func (db *Database) Delete(sid string, key string) (deleted bool) {
|
||||
|
||||
// Clear removes all session key values but it keeps the session entry.
|
||||
func (db *Database) Clear(sid string) {
|
||||
db.Service.Update(func(tx *bolt.Tx) error {
|
||||
err := db.Service.Update(func(tx *bolt.Tx) error {
|
||||
b := db.getBucketForSession(tx, sid)
|
||||
if b == nil {
|
||||
return nil
|
||||
@@ -352,20 +364,28 @@ func (db *Database) Clear(sid string) {
|
||||
return b.Delete(k)
|
||||
})
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
golog.Debugf("Database.Clear: %s: %v", sid, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Release destroys the session, it clears and removes the session entry,
|
||||
// session manager will create a new session ID on the next request after this call.
|
||||
func (db *Database) Release(sid string) {
|
||||
db.Service.Update(func(tx *bolt.Tx) error {
|
||||
err := db.Service.Update(func(tx *bolt.Tx) error {
|
||||
// delete the session bucket.
|
||||
b := db.getBucket(tx)
|
||||
bsid := []byte(sid)
|
||||
// try to delete the associated expiration bucket, if exists, ignore error.
|
||||
b.DeleteBucket(getExpirationBucketName(bsid))
|
||||
_ = b.DeleteBucket(getExpirationBucketName(bsid))
|
||||
|
||||
return b.DeleteBucket(bsid)
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
golog.Debugf("Database.Release: %s: %v", sid, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Close shutdowns the BoltDB connection.
|
||||
|
||||
@@ -239,7 +239,10 @@ func (db *Database) Release(sid string) {
|
||||
// clear all $sid-$key.
|
||||
db.Clear(sid)
|
||||
// and remove the $sid.
|
||||
db.c.Driver.Delete(sid)
|
||||
err := db.c.Driver.Delete(sid)
|
||||
if err != nil {
|
||||
golog.Debugf("Database.Release.Driver.Delete: %s: %v", sid, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Close terminates the redis connection.
|
||||
|
||||
@@ -205,7 +205,7 @@ func (r *RedigoDriver) getKeysConn(c redis.Conn, cursor interface{}, prefix stri
|
||||
if len(replies) == 2 {
|
||||
// take the second, it must contain the slice of keys.
|
||||
if keysSliceAsBytes, ok := replies[1].([]interface{}); ok {
|
||||
keys := make([]string, len(keysSliceAsBytes), len(keysSliceAsBytes))
|
||||
keys := make([]string, len(keysSliceAsBytes))
|
||||
|
||||
for i, k := range keysSliceAsBytes {
|
||||
keys[i] = fmt.Sprintf("%s", k)[len(r.Config.Prefix):]
|
||||
|
||||
@@ -58,7 +58,7 @@ func (s *Sessions) updateCookie(ctx context.Context, sid string, expires time.Du
|
||||
} else { // > 0
|
||||
cookie.Expires = time.Now().Add(expires)
|
||||
}
|
||||
cookie.MaxAge = int(cookie.Expires.Sub(time.Now()).Seconds())
|
||||
cookie.MaxAge = int(time.Until(cookie.Expires).Seconds())
|
||||
}
|
||||
|
||||
// set the cookie to secure if this is a tls wrapped request
|
||||
|
||||
@@ -31,7 +31,10 @@ func testSessions(t *testing.T, sess *sessions.Sessions, app *iris.Application)
|
||||
s := sess.Start(ctx)
|
||||
sessValues := s.GetAll()
|
||||
|
||||
ctx.JSON(sessValues)
|
||||
_, err := ctx.JSON(sessValues)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
if testEnableSubdomain {
|
||||
@@ -40,7 +43,7 @@ func testSessions(t *testing.T, sess *sessions.Sessions, app *iris.Application)
|
||||
|
||||
app.Post("/set", func(ctx context.Context) {
|
||||
s := sess.Start(ctx)
|
||||
vals := make(map[string]interface{}, 0)
|
||||
vals := make(map[string]interface{})
|
||||
if err := ctx.ReadJSON(&vals); err != nil {
|
||||
t.Fatalf("Cannot read JSON. Trace %s", err.Error())
|
||||
}
|
||||
@@ -74,7 +77,10 @@ func testSessions(t *testing.T, sess *sessions.Sessions, app *iris.Application)
|
||||
ctx.Next()
|
||||
}, func(ctx context.Context) {
|
||||
s := sess.Start(ctx)
|
||||
ctx.Writef(s.GetString("key"))
|
||||
_, err := ctx.Writef(s.GetString("key"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
|
||||
e := httptest.New(t, app, httptest.URL("http://example.com"))
|
||||
@@ -123,7 +129,7 @@ func TestFlashMessages(t *testing.T) {
|
||||
}
|
||||
|
||||
app.Post("/set", func(ctx context.Context) {
|
||||
vals := make(map[string]interface{}, 0)
|
||||
vals := make(map[string]interface{})
|
||||
if err := ctx.ReadJSON(&vals); err != nil {
|
||||
t.Fatalf("Cannot readjson. Trace %s", err.Error())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user