Compare commits

...

7 Commits

Author SHA1 Message Date
Henrique Dias
5fa1711a30 chore: version v2.0.0-rc.2
Former-commit-id: 39889c9895dba58578db931c4c55a1c25b822672 [formerly ebdcd02361e6499301262051376278a9dccecce9] [formerly 4ff653acbd767dd37a2b86be607bbd1af0fb7cd7 [formerly 0d0d9ef5f9]]
Former-commit-id: 0ce6e7f7871bde28b24e1b596af786f3e8dbddf9 [formerly 7d3a69c30e1af1e5b028bbcb926a28341a3f71b9]
Former-commit-id: 81cf5a20fa5ae3077337d968f686df58923b5b5c
2019-01-09 21:51:39 +00:00
Henrique Dias
4bc6a23143 fix: no db error when db size is 0 (#629)
Fixes the error where File Browser would fail when the DB existed with size 0. This closes #628.

@1138-4EB I decided not to check the version for now since it's the first time we're adding that info. Only the next time we change the DB structure we'll use that value as reference to know how to upgrade.

I did not check it because the users running rc1 would have some issues with it.

Former-commit-id: e8b07ab919e9c24feee8f6f2dd6df30df1e2325f [formerly 3396f05b4a1a07e1b993b7c07d1afd2def9cabbb] [formerly b43eb8e400603f99baf7966a58156dec7bd47420 [formerly c1c57c6525]]
Former-commit-id: 1115d0cf8a601feafac2b33cb46b813343f4fa8c [formerly 05de6caf8cf747a95fbb10587f0a767dfb8b8774]
Former-commit-id: 840c1a278cd45d36ce8538b7c5fe97923be05ca3
2019-01-09 21:37:47 +00:00
Henrique Dias
b578e2196a fix: search (#625)
Former-commit-id: d9c9234e87c190d847572c1fe715cf745ba44b53 [formerly f8b5f600fe39be8b47aece870ff24756c5dcfc6d] [formerly ad1cbfd739888d4cc3a1db882a98251cac3b89cc [formerly bafe9f0ad7]]
Former-commit-id: 493e4f3e4b42092201cfd1f99d8ee6cd3eb25dfc [formerly 520a9df6582492f24906f8f3f5c5e90cf5a02acd]
Former-commit-id: 17484d0fe391a82d5ee0dc990f4b1f039d305f4c
2019-01-09 15:18:03 +01:00
Henrique Dias
866375141f fix: strip baseurl (#626)
Former-commit-id: 5daa76063fbd8766115a722336d544d2f6156c74 [formerly 3d644f06b38b6c20f5549b3f2f780556881f216e] [formerly beb819187116079ce83329e85bb1b1d5e6b908ea [formerly 73e0acaa71]]
Former-commit-id: 01dfc4bb6016d6c3de2bb932695e7ca6b9185ff6 [formerly cdee480885c5050d9311f41f39ef7b4feefcc602]
Former-commit-id: 82bbfed106ddae78f22d01cabc11f314c19a1796
2019-01-09 08:13:57 +00:00
Henrique Dias
a3b9807717 fix: clean server struct once it gets to the handler
License: MIT
Signed-off-by: Henrique Dias <hacdias@gmail.com>

Former-commit-id: a9d9c2cd9a5fffa71409ebb0867faa3a0aca6e9f [formerly c3359cf3ff2633945a9c8dd5ea8eff5a77484364] [formerly 8921b27f322e426cf2f2f07dc682e1fffca162e0 [formerly f1c86054b3]]
Former-commit-id: 078633f5c5b1aaeafd6b078b5e006c5e05f19c84 [formerly 9013496a12cda3bef58215a3f5df4eeeaa677eb1]
Former-commit-id: 420076748685f1b8a23053c5fe159bc5e86942d3
2019-01-09 08:13:24 +00:00
1138-4EB
d47774c828 fix: caddy sed package name
Former-commit-id: 23faa66a6010168f64545ead1beb5f41db3ffd76 [formerly 335df9ff6c4799677119e72f6bbf5a00e6709c43] [formerly 54ebf5831102f306edb07b40cb518262787a9305 [formerly 5a9f0a0d81]]
Former-commit-id: 5203ad4f906f8f85c7ece2d7beb14eedfa907cf7 [formerly b58ea071061a8a045fbbb9301b028774f9991696]
Former-commit-id: 7ae9ac04e135c449355a8da8845e0951fde6fe92
2019-01-09 03:13:54 +01:00
1138-4EB
bc4ac5eb9b chore: setting untracked version [ci skip]
Former-commit-id: 55909b40916ed0b65a2d588cac5aa171b43c4482 [formerly 52607bd0e51b455281480ac0d8c7fdc5a4a663af] [formerly 75ce16e7e290c9fba9f4288507a4961a4bb0b10b [formerly a55e0d24f8]]
Former-commit-id: 15936e40500010751e70401bd6f0574f614d9ada [formerly a39e7b2a11d0379964f5e911447289910406e0e5]
Former-commit-id: a87b512c8f08cdf5affff568ee96507575e8e2db
2019-01-09 01:53:36 +01:00
11 changed files with 68 additions and 36 deletions

View File

@@ -62,29 +62,43 @@ type pythonData struct {
store *storage.Storage
}
func dbExists(path string) (bool, error) {
stat, err := os.Stat(path)
if os.IsNotExist(err) {
return false, nil
} else if err != nil {
return false, err
}
if stat.Size() == 0 {
return false, nil
}
return true, nil
}
func python(fn pythonFunc, cfg pythonConfig) cobraFunc {
return func(cmd *cobra.Command, args []string) {
data := pythonData{hadDB: true}
path := getParam(cmd.Flags(), "database")
_, err := os.Stat(path)
exists, err := dbExists(path)
if os.IsNotExist(err) {
data.hadDB = false
if !cfg.noDB && !cfg.allowNoDB {
log.Fatal(path + " does not exist. Please run 'filebrowser config init' first.")
}
} else if err != nil {
if err != nil {
panic(err)
} else if err == nil && cfg.noDB {
} else if exists && cfg.noDB {
log.Fatal(path + " already exists")
} else if !exists && !cfg.noDB && !cfg.allowNoDB {
log.Fatal(path + " does not exist. Please run 'filebrowser config init' first.")
}
data.hadDB = exists
db, err := storm.Open(path)
checkErr(err)
defer db.Close()
data.store = bolt.NewStorage(db)
data.store, err = bolt.NewStorage(db)
checkErr(err)
fn(cmd, args, data)
}
}

View File

@@ -64,9 +64,5 @@ func handle(fn handleFunc, prefix string, storage *storage.Storage, server *sett
}
})
if prefix == "" {
return handler
}
return http.StripPrefix(prefix, handler)
}

View File

@@ -14,8 +14,9 @@ type modifyRequest struct {
}
func NewHandler(storage *storage.Storage, server *settings.Server) (http.Handler, error) {
r := mux.NewRouter()
server.Clean()
r := mux.NewRouter()
index, static := getStaticHandlers(storage, server)
monkey := func(fn handleFunc, prefix string) http.Handler {
@@ -59,5 +60,5 @@ func NewHandler(storage *storage.Storage, server *settings.Server) (http.Handler
public.PathPrefix("/dl").Handler(monkey(publicDlHandler, "/api/public/dl/")).Methods("GET")
public.PathPrefix("/share").Handler(monkey(publicShareHandler, "/api/public/share/")).Methods("GET")
return r, nil
return http.StripPrefix(server.BaseURL, r), nil
}

View File

@@ -18,16 +18,23 @@ type searchOptions struct {
func Search(fs afero.Fs, scope, query string, checker rules.Checker, found func(path string, f os.FileInfo) error) error {
search := parseSearch(query)
return afero.Walk(fs, scope, func(path string, f os.FileInfo, err error) error {
path = strings.TrimPrefix(path, "/")
path = strings.Replace(path, "\\", "/", -1)
scope = strings.Replace(scope, "\\", "/", -1)
scope = strings.TrimPrefix(scope, "/")
scope = strings.TrimSuffix(scope, "/")
scope = "/" + scope + "/"
if !checker.Check(path) {
return afero.Walk(fs, scope, func(originalPath string, f os.FileInfo, err error) error {
originalPath = strings.Replace(originalPath, "\\", "/", -1)
originalPath = strings.TrimPrefix(originalPath, "/")
originalPath = "/" + originalPath
path := originalPath
if path == scope {
return nil
}
if !search.CaseSensitive {
path = strings.ToLower(path)
if !checker.Check(path) {
return nil
}
if !search.CaseSensitive {
@@ -52,7 +59,7 @@ func Search(fs afero.Fs, scope, query string, checker rules.Checker, found func(
if len(search.Terms) > 0 {
for _, term := range search.Terms {
if strings.Contains(path, term) {
return found(strings.TrimPrefix(path, scope), f)
return found(strings.TrimPrefix(originalPath, scope), f)
}
}
}

View File

@@ -1,6 +1,10 @@
package settings
import "github.com/filebrowser/filebrowser/v2/rules"
import (
"strings"
"github.com/filebrowser/filebrowser/v2/rules"
)
// AuthMethod describes an authentication method.
type AuthMethod string
@@ -17,6 +21,11 @@ type Settings struct {
Rules []rules.Rule `json:"rules"`
}
// GetRules implements rules.Provider.
func (s *Settings) GetRules() []rules.Rule {
return s.Rules
}
// Server specific settings.
type Server struct {
Root string `json:"root"`
@@ -28,7 +37,7 @@ type Server struct {
Log string `json:"log"`
}
// GetRules implements rules.Provider.
func (s *Settings) GetRules() []rules.Rule {
return s.Rules
// Clean cleans any variables that might need cleaning.
func (s *Server) Clean() {
s.BaseURL = strings.TrimSuffix(s.BaseURL, "/")
}

View File

@@ -1,8 +1,6 @@
package settings
import (
"strings"
"github.com/filebrowser/filebrowser/v2/errors"
"github.com/filebrowser/filebrowser/v2/rules"
"github.com/filebrowser/filebrowser/v2/users"
@@ -94,6 +92,6 @@ func (s *Storage) GetServer() (*Server, error) {
// SaveServer wraps StorageBackend.SaveServer and adds some verification.
func (s *Storage) SaveServer(ser *Server) error {
ser.BaseURL = strings.TrimSuffix(ser.BaseURL, "/")
ser.Clean()
return s.back.SaveServer(ser)
}

View File

@@ -10,16 +10,21 @@ import (
)
// NewStorage creates a storage.Storage based on Bolt DB.
func NewStorage(db *storm.DB) *storage.Storage {
func NewStorage(db *storm.DB) (*storage.Storage, error) {
users := users.NewStorage(usersBackend{db: db})
share := share.NewStorage(shareBackend{db: db})
settings := settings.NewStorage(settingsBackend{db: db})
auth := auth.NewStorage(authBackend{db: db}, users)
err := save(db, "version", 2)
if err != nil {
return nil, err
}
return &storage.Storage{
Auth: auth,
Users: users,
Share: share,
Settings: settings,
}
}, nil
}

View File

@@ -99,7 +99,6 @@ func readConf(path string) (*oldConf, error) {
}
func importConf(db *storm.DB, path string, sto *storage.Storage) error {
cfg, err := readConf(path)
if err != nil {
return err

View File

@@ -19,7 +19,10 @@ func Import(oldDB, oldConf, newDB string) error {
}
defer new.Close()
sto := bolt.NewStorage(new)
sto, err := bolt.NewStorage(new)
if err != nil {
return err
}
err = importUsers(old, sto)
if err != nil {

View File

@@ -2,5 +2,5 @@ package version
const (
// Version is the current File Browser version.
Version = "v2.0.0-rc.1"
Version = "v2.0.0-rc.2"
)

View File

@@ -132,7 +132,7 @@ pushRicebox () {
git clone git@github.com:filebrowser/caddy caddy
cd caddy
cp ../http/rice-box.go ./
sed -i 's/package lib/package caddy/g' ./rice-box.go
sed -i 's/package http/package caddy/g' ./rice-box.go
git checkout -b update-rice-box origin/master
git config --local user.name "Filebrowser Bot"
git config --local user.email "FilebrowserBot@users.noreply.github.com"