Compare commits

...

10 Commits

Author SHA1 Message Date
Henrique Dias
e706391934 chore: version v2.0.0
Former-commit-id: 1a6e6ec0cda359306ef81deb4393e6e588005674 [formerly 45bb5b1b929da50fec506f27a50e6ba492374b60] [formerly 41a597953b6d48ff01ed5a28817e9c9436db300b [formerly 145b391315]]
Former-commit-id: db2d7837facbec0ab84275550934d70956d28add [formerly 0d47b66dfb9c802f0ee885b43a034f6cea044878]
Former-commit-id: b5ddd38e9879458640ec3e9449c72e0fad4e4df1
2019-01-14 09:03:39 +00:00
Henrique Dias
58ff28f84d feat: export generate key
License: MIT
Signed-off-by: Henrique Dias <hacdias@gmail.com>

Former-commit-id: 3088476c44d4608e2b8c90d3c274b6db17ef30c0 [formerly e40d3ba193e0b54bccce8c13459032f51af84c7b] [formerly 33cabf26abee5ef4f1dd63e423fe1b0fa7ae4f7c [formerly a3daac84a2]]
Former-commit-id: fe022f36fc4d7d8442df8c0fa4a86e2ff3ec328e [formerly 1d949d0ae88b3b5a9b8e4da5c3b6ca814a319589]
Former-commit-id: 36207ddeb7eba335f5fe73ea9dcdf6bffc6265bf
2019-01-11 20:25:39 +00:00
Henrique Dias
74a1ecbb89 chore: setting untracked version [ci skip]
Former-commit-id: f8b61a3532b72c804933bf4ba63a111b3c8a2955 [formerly d076a6110407d517bde07846bf31f6cae710e0c0] [formerly 435d24276a43b69dec81ff9666d78f208116a577 [formerly 6dbf801370]]
Former-commit-id: 7ebd072dccb015521deb296f0151c06f17b5dcf8 [formerly 9f8c86143171142fb3c108ba32c7eab63a5632db]
Former-commit-id: d28fa2428da947bae7029257d04497d581c18d99
2019-01-09 21:52:14 +00:00
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
14 changed files with 88 additions and 45 deletions

View File

@@ -40,7 +40,7 @@ The path must be for a json or yaml file.`,
checkErr(err)
key = settings.Key
} else {
key = generateRandomBytes(64)
key = generateKey()
}
file := settingsFile{}

View File

@@ -29,7 +29,7 @@ override the options.`,
authMethod, auther := getAuthentication(flags)
s := &settings.Settings{
Key: generateRandomBytes(64), // 256 bit
Key: generateKey(),
Signup: mustGetBool(flags, "signup"),
Shell: strings.Split(strings.TrimSpace(mustGetString(flags, "shell")), " "),
AuthMethod: authMethod,

View File

@@ -215,7 +215,7 @@ func setupLog(logMethod string) {
func quickSetup(flags *pflag.FlagSet, d pythonData) {
set := &settings.Settings{
Key: generateRandomBytes(64), // 256 bit
Key: generateKey(),
Signup: false,
Defaults: settings.UserDefaults{
Scope: ".",

View File

@@ -1,7 +1,6 @@
package cmd
import (
"crypto/rand"
"encoding/json"
"errors"
"fmt"
@@ -10,6 +9,7 @@ import (
"path/filepath"
"github.com/asdine/storm"
"github.com/filebrowser/filebrowser/v2/settings"
"github.com/filebrowser/filebrowser/v2/storage"
"github.com/filebrowser/filebrowser/v2/storage/bolt"
"github.com/spf13/cobra"
@@ -41,12 +41,10 @@ func mustGetUint(flags *pflag.FlagSet, flag string) uint {
return b
}
func generateRandomBytes(n int) []byte {
b := make([]byte, n)
_, err := rand.Read(b)
func generateKey() []byte {
k, err := settings.GenerateKey()
checkErr(err)
// Note that err == nil only if we read len(b) bytes.
return b
return k
}
type cobraFunc func(cmd *cobra.Command, args []string)
@@ -62,29 +60,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,11 @@
package settings
import "github.com/filebrowser/filebrowser/v2/rules"
import (
"crypto/rand"
"strings"
"github.com/filebrowser/filebrowser/v2/rules"
)
// AuthMethod describes an authentication method.
type AuthMethod string
@@ -17,6 +22,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 +38,19 @@ 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, "/")
}
// GenerateKey generates a key of 256 bits.
func GenerateKey() ([]byte, error) {
b := make([]byte, 64)
_, err := rand.Read(b)
// Note that err == nil only if we read len(b) bytes.
if err != nil {
return nil, err
}
return b, nil
}

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"
)

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"