fix: default values

This commit is contained in:
face.wsl 2022-11-23 12:57:15 +08:00
parent 53265fd64b
commit 4cbc8f09ab
8 changed files with 130 additions and 36 deletions

View File

@ -123,6 +123,7 @@ user created with the credentials from options "username" and "password".`,
log.Fatal("Image resize workers count could not be < 1") log.Fatal("Image resize workers count could not be < 1")
} }
imgSvc := img.New(workersCount) imgSvc := img.New(workersCount)
log.Println("after img.New")
var fileCache diskcache.Interface = diskcache.NewNoOp() var fileCache diskcache.Interface = diskcache.NewNoOp()
cacheDir, err := cmd.Flags().GetString("cache-dir") cacheDir, err := cmd.Flags().GetString("cache-dir")
@ -133,9 +134,13 @@ user created with the credentials from options "username" and "password".`,
} }
fileCache = diskcache.New(afero.NewOsFs(), cacheDir) fileCache = diskcache.New(afero.NewOsFs(), cacheDir)
} }
log.Println("after diskcache.New")
server := getRunParams(cmd.Flags(), d.store) server := getRunParams(cmd.Flags(), d.store)
log.Println("after getRunParams")
log.Println(server.Log)
setupLog(server.Log) setupLog(server.Log)
log.Println("after setupLog")
root, err := filepath.Abs(server.Root) root, err := filepath.Abs(server.Root)
checkErr(err) checkErr(err)
@ -165,6 +170,7 @@ user created with the credentials from options "username" and "password".`,
listener, err = net.Listen("tcp", adr) listener, err = net.Listen("tcp", adr)
checkErr(err) checkErr(err)
} }
log.Println("before make(chan)")
sigc := make(chan os.Signal, 1) sigc := make(chan os.Signal, 1)
signal.Notify(sigc, os.Interrupt, syscall.SIGTERM) signal.Notify(sigc, os.Interrupt, syscall.SIGTERM)
@ -175,6 +181,7 @@ user created with the credentials from options "username" and "password".`,
panic(err) panic(err)
} }
log.Println("before fbhttp.NewHandler)")
handler, err := fbhttp.NewHandler(imgSvc, fileCache, d.store, server, assetsFs) handler, err := fbhttp.NewHandler(imgSvc, fileCache, d.store, server, assetsFs)
checkErr(err) checkErr(err)

View File

@ -112,10 +112,12 @@ func openDB(path string, cfg pythonConfig) (pythonData, Closeable) {
data := pythonData{hadDB: true} data := pythonData{hadDB: true}
db, err := sql.OpenDB(path) db, err := sql.OpenDB(path)
if err != nil { if err != nil {
data.store, err = sql.NewStorage(db)
} else {
log.Fatal("Fail to open database " + path) log.Fatal("Fail to open database " + path)
} }
data.store, err = sql.NewStorage(db)
if err != nil {
log.Fatal("Fail to create database storage for " + path)
}
return data, db return data, db
} }
return openBoltDB(path, cfg) return openBoltDB(path, cfg)

View File

@ -1,6 +1,8 @@
package bolt package bolt
import ( import (
"fmt"
"github.com/asdine/storm/v3" "github.com/asdine/storm/v3"
"github.com/filebrowser/filebrowser/v2/auth" "github.com/filebrowser/filebrowser/v2/auth"
@ -14,6 +16,7 @@ type authBackend struct {
func (s authBackend) Get(t settings.AuthMethod) (auth.Auther, error) { func (s authBackend) Get(t settings.AuthMethod) (auth.Auther, error) {
var auther auth.Auther var auther auth.Auther
fmt.Println("ERROR: unknown auth method " + t)
switch t { switch t {
case auth.MethodJSONAuth: case auth.MethodJSONAuth:

View File

@ -3,6 +3,7 @@ package sql
import ( import (
"database/sql" "database/sql"
"encoding/json" "encoding/json"
"fmt"
"github.com/filebrowser/filebrowser/v2/auth" "github.com/filebrowser/filebrowser/v2/auth"
"github.com/filebrowser/filebrowser/v2/errors" "github.com/filebrowser/filebrowser/v2/errors"
@ -13,12 +14,6 @@ type authBackend struct {
db *sql.DB db *sql.DB
} }
func InitAuthTable(db *sql.DB) error {
sql := "create table if not exists appliction(key string primary key, value string)"
_, err := db.Exec(sql)
return err
}
func (s authBackend) Get(t settings.AuthMethod) (auth.Auther, error) { func (s authBackend) Get(t settings.AuthMethod) (auth.Auther, error) {
var auther auth.Auther var auther auth.Auther
@ -32,6 +27,7 @@ func (s authBackend) Get(t settings.AuthMethod) (auth.Auther, error) {
case auth.MethodNoAuth: case auth.MethodNoAuth:
auther = &auth.NoAuth{} auther = &auth.NoAuth{}
default: default:
fmt.Println("ERROR: unknown auth method " + t)
return nil, errors.ErrInvalidAuthMethod return nil, errors.ErrInvalidAuthMethod
} }

View File

@ -6,7 +6,10 @@ import (
"fmt" "fmt"
"strings" "strings"
"github.com/filebrowser/filebrowser/v2/files"
"github.com/filebrowser/filebrowser/v2/rules"
"github.com/filebrowser/filebrowser/v2/settings" "github.com/filebrowser/filebrowser/v2/settings"
"github.com/filebrowser/filebrowser/v2/users"
) )
type settingsBackend struct { type settingsBackend struct {
@ -26,7 +29,7 @@ func userDefaultsFromString(s string) settings.UserDefaults {
userDefaults := settings.UserDefaults{} userDefaults := settings.UserDefaults{}
err := json.Unmarshal([]byte(s), &userDefaults) err := json.Unmarshal([]byte(s), &userDefaults)
if err != nil { if err != nil {
fmt.Printf("ERROR: fail to parse settings.UserDefaults") fmt.Println("ERROR: Fail to parse settings.UserDefaults")
} }
return userDefaults return userDefaults
} }
@ -46,7 +49,7 @@ func brandingFromString(s string) settings.Branding {
branding := settings.Branding{} branding := settings.Branding{}
err := json.Unmarshal([]byte(s), &branding) err := json.Unmarshal([]byte(s), &branding)
if err != nil { if err != nil {
fmt.Printf("ERROR: fail to parse settings.Branding") fmt.Println("ERROR: Fail to parse settings.Branding")
} }
return branding return branding
} }
@ -54,7 +57,7 @@ func brandingFromString(s string) settings.Branding {
func brandingToString(s settings.Branding) string { func brandingToString(s settings.Branding) string {
data, err := json.Marshal(s) data, err := json.Marshal(s)
if err != nil { if err != nil {
fmt.Printf("ERROR: fail to jsonify settings.Branding") fmt.Println("ERROR: Fail to jsonify settings.Branding")
return "" return ""
} }
return string(data) return string(data)
@ -63,7 +66,7 @@ func brandingToString(s settings.Branding) string {
func commandsToString(c map[string][]string) string { func commandsToString(c map[string][]string) string {
data, err := json.Marshal(c) data, err := json.Marshal(c)
if err != nil { if err != nil {
fmt.Printf("ERROR: fail to jsonify commands") fmt.Println("ERROR: Fail to jsonify commands")
return "" return ""
} }
return string(data) return string(data)
@ -76,7 +79,7 @@ func commandsFromString(s string) map[string][]string {
c := map[string][]string{} c := map[string][]string{}
err := json.Unmarshal([]byte(s), &c) err := json.Unmarshal([]byte(s), &c)
if err != nil { if err != nil {
fmt.Printf("ERROR: fail to parse commands") fmt.Println("ERROR: Fail to parse commands")
} }
return c return c
} }
@ -88,7 +91,7 @@ func stringsFromString(s string) []string {
c := []string{} c := []string{}
err := json.Unmarshal([]byte(s), &c) err := json.Unmarshal([]byte(s), &c)
if err != nil { if err != nil {
fmt.Printf("ERROR: fail to parse []string") fmt.Println("ERROR: Fail to parse []string")
} }
return c return c
} }
@ -96,7 +99,7 @@ func stringsFromString(s string) []string {
func stringsToString(c []string) string { func stringsToString(c []string) string {
data, err := json.Marshal(c) data, err := json.Marshal(c)
if err != nil { if err != nil {
fmt.Printf("ERROR: fail to jsonify strings") fmt.Println("ERROR: Fail to jsonify strings")
return "" return ""
} }
return string(data) return string(data)
@ -138,11 +141,12 @@ func (s settingsBackend) Get() (*settings.Settings, error) {
} }
key := "" key := ""
value := "" value := ""
settings1 := settings.Settings{} settings1 := cloneSettings(defaultSettings)
for rows.Next() { for rows.Next() {
err = rows.Scan(key, value) err = rows.Scan(&key, &value)
if err != nil { if err != nil {
fmt.Printf("ERROR: fail to query settings.Settings") fmt.Println(err.Error())
fmt.Println("ERROR: Fail to query settings.Settings")
} }
if key == "Key" { if key == "Key" {
settings1.Key = []byte(value) settings1.Key = []byte(value)
@ -162,8 +166,6 @@ func (s settingsBackend) Get() (*settings.Settings, error) {
settings1.Shell = stringsFromString(value) settings1.Shell = stringsFromString(value)
} else if key == "Rules" { } else if key == "Rules" {
settings1.Rules = rulesFromString(value) settings1.Rules = rulesFromString(value)
} else {
fmt.Printf("ERROR: unknown settings key " + key)
} }
} }
return &settings1, nil return &settings1, nil
@ -190,19 +192,91 @@ func (s settingsBackend) Save(ss *settings.Settings) error {
return nil return nil
} }
var defaultServer = settings.Server{
Port: "8080",
Log: "stdout",
EnableThumbnails: false,
ResizePreview: false,
EnableExec: false,
TypeDetectionByHeader: false,
}
var defaultSettings = settings.Settings{
Key: []byte(""),
Signup: false,
CreateUserDir: false,
UserHomeBasePath: "/users",
Defaults: settings.UserDefaults{
Scope: ".",
Locale: "en",
ViewMode: "mosaic",
SingleClick: false,
Sorting: files.Sorting{
By: "",
Asc: false,
},
Perm: users.Permissions{
Admin: false,
Execute: true,
Create: true,
Rename: true,
Modify: true,
Delete: true,
Share: true,
Download: true,
},
Commands: []string{},
HideDotfiles: false,
DateFormat: false,
},
AuthMethod: "json",
Branding: settings.Branding{
Name: "",
DisableExternal: false,
Files: "",
Theme: "",
Color: "",
},
Commands: map[string][]string{},
Shell: []string{},
Rules: []rules.Rule{},
}
func cloneServer(server settings.Server) settings.Server {
data, err := json.Marshal(server)
if err != nil {
return settings.Server{}
}
s := settings.Server{}
json.Unmarshal(data, &s)
return s
}
func cloneSettings(s settings.Settings) settings.Settings {
data, err := json.Marshal(s)
if err != nil {
return settings.Settings{}
}
s1 := settings.Settings{}
json.Unmarshal(data, &s1)
return s1
}
func (s settingsBackend) GetServer() (*settings.Server, error) { func (s settingsBackend) GetServer() (*settings.Server, error) {
sql := "select key, value from settings" sql := "select key, value from settings"
rows, err := s.db.Query(sql) rows, err := s.db.Query(sql)
if err != nil { if err != nil {
return nil, nil return nil, nil
} }
server := cloneServer(defaultServer)
key := "" key := ""
value := "" value := ""
server := settings.Server{}
for rows.Next() { for rows.Next() {
err = rows.Scan(key, value) err = rows.Scan(&key, &value)
if err != nil { if err != nil {
fmt.Printf("ERROR: fail to query settings.Settings") fmt.Println(err.Error())
fmt.Println("ERROR: Fail to query settings.Settings")
} }
if key == "Root" { if key == "Root" {
server.Root = value server.Root = value
@ -260,7 +334,7 @@ func (s settingsBackend) SaveServer(ss *settings.Server) error {
} }
func SetSetting(db *sql.DB, key string, value string) error { func SetSetting(db *sql.DB, key string, value string) error {
sql := "select count(key) from settings" sql := "select count(key) from settings where key = '" + key + "'"
count := 0 count := 0
err := db.QueryRow(sql).Scan(&count) err := db.QueryRow(sql).Scan(&count)
if err != nil { if err != nil {
@ -277,7 +351,6 @@ func GetSetting(db *sql.DB, key string) string {
value := "" value := ""
err := db.QueryRow(sql).Scan(&value) err := db.QueryRow(sql).Scan(&value)
if err != nil { if err != nil {
fmt.Printf("ERROR: " + err.Error())
return value return value
} }
return value return value

View File

@ -29,11 +29,11 @@ func parseLink(row linkRecord) (*share.Link, error) {
expire := int64(0) expire := int64(0)
passwordhash := "" passwordhash := ""
token := "" token := ""
err := row.Scan(path, hash, userid, expire, passwordhash, token) err := row.Scan(&path, &hash, &userid, &expire, &passwordhash, &token)
if err != nil { if err != nil {
s := "ERROR: Fail to parse record for share.Link" s := "ERROR: Fail to parse record for share.Link"
err := errors.New(s) err := errors.New(s)
fmt.Printf(s) fmt.Println(s)
return nil, err return nil, err
} }
link := share.Link{} link := share.Link{}
@ -59,7 +59,7 @@ func queryLinks(db *sql.DB, condition string) ([]*share.Link, error) {
for rows.Next() { for rows.Next() {
link, err := parseLink(rows) link, err := parseLink(rows)
if err != nil { if err != nil {
fmt.Printf("ERROR: Fail to parse record for share.Link") fmt.Println("ERROR: Fail to parse record for share.Link")
continue continue
} }
links = append(links, link) links = append(links, link)

View File

@ -3,6 +3,7 @@ package sql
import ( import (
"database/sql" "database/sql"
"errors" "errors"
"fmt"
"strings" "strings"
"github.com/filebrowser/filebrowser/v2/auth" "github.com/filebrowser/filebrowser/v2/auth"
@ -56,13 +57,25 @@ func NewStorage(db *sql.DB) (*storage.Storage, error) {
err := SetSetting(db, "version", "2") err := SetSetting(db, "version", "2")
if err != nil { if err != nil {
fmt.Println("ERROR: fail to set version")
return nil, err return nil, err
} }
return &storage.Storage{ // TODO: default
fmt.Println(GetSetting(db, "auther"))
if GetSetting(db, "auther") == "" {
err := SetSetting(db, "auther", "json")
if err != nil {
fmt.Println("ERROR: fail to set auther")
return nil, err
}
}
storage := &storage.Storage{
Auth: authStore, Auth: authStore,
Users: userStore, Users: userStore,
Share: shareStore, Share: shareStore,
Settings: settingsStore, Settings: settingsStore,
}, nil }
return storage, nil
} }

View File

@ -95,7 +95,7 @@ func InitUserTable(db *sql.DB) error {
} }
func (s usersBackend) Get(id interface{}) (*users.User, error) { func (s usersBackend) Get(id interface{}) (*users.User, error) {
userId := id.(uint) userID := id.(uint)
username := "" username := ""
password := "" password := ""
scope := "" scope := ""
@ -105,10 +105,10 @@ func (s usersBackend) Get(id interface{}) (*users.User, error) {
commands := "" commands := ""
sorting := "" sorting := ""
rules := "" rules := ""
sql := "select username, password, scope, lockpassword, viewmode, perm,commands,sorting,rules from users where id=" + strconv.Itoa(int(userId)) sql := "select username, password, scope, lockpassword, viewmode, perm,commands,sorting,rules from users where id=" + strconv.Itoa(int(userID))
s.db.QueryRow(sql).Scan(username, password, scope, lockpassword, viewmode, perm, commands, sorting, rules) s.db.QueryRow(sql).Scan(&username, &password, &scope, &lockpassword, &viewmode, &perm, &commands, &sorting, &rules)
user := users.User{} user := users.User{}
user.ID = userId user.ID = userID
user.Username = username user.Username = username
user.Password = password user.Password = password
user.Scope = scope user.Scope = scope
@ -139,9 +139,9 @@ func (s usersBackend) Gets() ([]*users.User, error) {
commands := "" commands := ""
sorting := "" sorting := ""
rules := "" rules := ""
err := rows.Scan(id, username, password, scope, lockpassword, viewmode, perm, commands, sorting, rules) err := rows.Scan(&id, &username, &password, &scope, &lockpassword, &viewmode, &perm, &commands, &sorting, &rules)
if err != nil { if err != nil {
fmt.Printf("Fail to parse record for user.User") fmt.Println("Fail to parse record for user.User")
continue continue
} }
user := users.User{} user := users.User{}