feat: some more fixes

License: MIT
Signed-off-by: Henrique Dias <hacdias@gmail.com>
This commit is contained in:
Henrique Dias 2019-01-04 22:43:29 +00:00
parent 4816338128
commit 22fa3e15d3
4 changed files with 38 additions and 9 deletions

@ -1 +1 @@
Subproject commit 56b609be4f496dfa11f1237490cb167e1c774fb0 Subproject commit 3e14855e4f9b5719164f79b5ac8ccdf019f6429e

View File

@ -60,8 +60,10 @@ func withUser(fn handleFunc) handleFunc {
return http.StatusForbidden, nil return http.StatusForbidden, nil
} }
if !tk.VerifyExpiresAt(time.Now().Add(time.Hour).Unix(), true) { expired := !tk.VerifyExpiresAt(time.Now().Add(time.Hour).Unix(), true)
// TODO: chek if user info was modified use timestap updated := d.store.Users.LastUpdate(tk.User.ID) > tk.IssuedAt
if expired || updated {
w.Header().Add("X-Renew-Token", "true") w.Header().Add("X-Renew-Token", "true")
} }
@ -157,6 +159,7 @@ func printToken(w http.ResponseWriter, r *http.Request, d *data, user *users.Use
Commands: user.Commands, Commands: user.Commands,
}, },
StandardClaims: jwt.StandardClaims{ StandardClaims: jwt.StandardClaims{
IssuedAt: time.Now().Unix(),
ExpiresAt: time.Now().Add(time.Hour * 2).Unix(), ExpiresAt: time.Now().Add(time.Hour * 2).Unix(),
Issuer: "File Browser", Issuer: "File Browser",
}, },

View File

@ -19,13 +19,13 @@ func Search(fs afero.Fs, scope, query string, checker rules.Checker, found func(
search := parseSearch(query) search := parseSearch(query)
return afero.Walk(fs, scope, func(path string, f os.FileInfo, err error) error { return afero.Walk(fs, scope, func(path string, f os.FileInfo, err error) error {
path = strings.TrimPrefix(path, "/")
path = strings.Replace(path, "\\", "/", -1)
if !checker.Check(path) { if !checker.Check(path) {
return nil return nil
} }
path = strings.TrimPrefix(path, "/")
path = strings.Replace(path, "\\", "/", -1)
if !search.CaseSensitive { if !search.CaseSensitive {
path = strings.ToLower(path) path = strings.ToLower(path)
} }

View File

@ -1,6 +1,9 @@
package users package users
import ( import (
"sync"
"time"
"github.com/filebrowser/filebrowser/errors" "github.com/filebrowser/filebrowser/errors"
) )
@ -17,12 +20,17 @@ type StorageBackend interface {
// Storage is a users storage. // Storage is a users storage.
type Storage struct { type Storage struct {
back StorageBackend back StorageBackend
updated map[uint]int64
mux sync.RWMutex
} }
// NewStorage creates a users storage from a backend. // NewStorage creates a users storage from a backend.
func NewStorage(back StorageBackend) *Storage { func NewStorage(back StorageBackend) *Storage {
return &Storage{back: back} return &Storage{
back: back,
updated: map[uint]int64{},
}
} }
// Get allows you to get a user by its name or username. The provided // Get allows you to get a user by its name or username. The provided
@ -72,7 +80,15 @@ func (s *Storage) Update(user *User, fields ...string) error {
return err return err
} }
return s.back.Update(user, fields...) err = s.back.Update(user, fields...)
if err != nil {
return err
}
s.mux.Lock()
s.updated[user.ID] = time.Now().Unix()
s.mux.Unlock()
return nil
} }
// Save saves the user in a storage. // Save saves the user in a storage.
@ -99,3 +115,13 @@ func (s *Storage) Delete(id interface{}) (err error) {
return return
} }
// LastUpdate gets the timestamp for the last update of an user.
func (s *Storage) LastUpdate(id uint) int64 {
s.mux.RLock()
defer s.mux.RUnlock()
if val, ok := s.updated[id]; ok {
return val
}
return 0
}