1
0
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:
Gerasimos (Makis) Maropoulos
2020-02-02 16:29:06 +02:00
parent e04ea83c04
commit 3093d65363
76 changed files with 9647 additions and 366 deletions

View File

@@ -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(),
}
}

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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):]

View File

@@ -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

View File

@@ -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())
}