fix: sql.settings db
This commit is contained in:
parent
d473569e94
commit
f7910d47f9
@ -109,7 +109,7 @@ func openBoltDB(path string, cfg pythonConfig) (pythonData, Closeable) {
|
||||
|
||||
func openDB(path string, cfg pythonConfig) (pythonData, Closeable) {
|
||||
if sql.IsDBPath(path) {
|
||||
data := pythonData{hadDB: true}
|
||||
data := pythonData{hadDB: false}
|
||||
db, err := sql.OpenDB(path)
|
||||
if err != nil {
|
||||
log.Fatal("Fail to open database " + path)
|
||||
@ -118,6 +118,7 @@ func openDB(path string, cfg pythonConfig) (pythonData, Closeable) {
|
||||
if err != nil {
|
||||
log.Fatal("Fail to create database storage for " + path)
|
||||
}
|
||||
data.hadDB = sql.HadSetting(db)
|
||||
return data, db
|
||||
}
|
||||
return openBoltDB(path, cfg)
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"github.com/asdine/storm/v3"
|
||||
|
||||
"github.com/filebrowser/filebrowser/v2/settings"
|
||||
"github.com/filebrowser/filebrowser/v2/storage/sql"
|
||||
)
|
||||
|
||||
type settingsBackend struct {
|
||||
@ -16,6 +17,7 @@ func (s settingsBackend) Get() (*settings.Settings, error) {
|
||||
}
|
||||
|
||||
func (s settingsBackend) Save(set *settings.Settings) error {
|
||||
sql.LogBacktrace()
|
||||
return save(s.db, "settings", set)
|
||||
}
|
||||
|
||||
@ -25,5 +27,6 @@ func (s settingsBackend) GetServer() (*settings.Server, error) {
|
||||
}
|
||||
|
||||
func (s settingsBackend) SaveServer(server *settings.Server) error {
|
||||
sql.LogBacktrace()
|
||||
return save(s.db, "server", server)
|
||||
}
|
||||
|
||||
@ -3,8 +3,6 @@ package sql
|
||||
import (
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/filebrowser/filebrowser/v2/auth"
|
||||
"github.com/filebrowser/filebrowser/v2/files"
|
||||
@ -128,6 +126,7 @@ func boolToString(b bool) string {
|
||||
}
|
||||
|
||||
func (s settingsBackend) Get() (*settings.Settings, error) {
|
||||
logBacktrace()
|
||||
sql := "select key, value from settings"
|
||||
rows, err := s.db.Query(sql)
|
||||
if checkError(err, "Fail to Query settings.Settings") {
|
||||
@ -159,28 +158,50 @@ func (s settingsBackend) Get() (*settings.Settings, error) {
|
||||
settings1.Rules = rulesFromString(value)
|
||||
}
|
||||
}
|
||||
if len(settings1.Key) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
return &settings1, nil
|
||||
}
|
||||
|
||||
func (s settingsBackend) Save(ss *settings.Settings) error {
|
||||
columns := []string{"Key", "Signup", "CreateUserDir", "UserHomeBasePath", "Defaults", "AuthMethod", "Branding", "Commands", "Shell", "Rules"}
|
||||
logBacktrace()
|
||||
fields := []string{"Key", "Signup", "CreateUserDir", "UserHomeBasePath", "Defaults", "AuthMethod", "Branding", "Commands", "Shell", "Rules"}
|
||||
values := []string{
|
||||
"'" + string(ss.Key) + "'",
|
||||
string(ss.Key),
|
||||
boolToString(ss.Signup),
|
||||
boolToString(ss.CreateUserDir),
|
||||
"'" + string(ss.UserHomeBasePath) + "'",
|
||||
string(ss.UserHomeBasePath),
|
||||
userDefaultsToString(ss.Defaults),
|
||||
string(ss.AuthMethod),
|
||||
brandingToString(ss.Branding),
|
||||
commandsToString(ss.Commands),
|
||||
stringsToString(ss.Shell),
|
||||
RulesToString(ss.Rules)}
|
||||
sql := fmt.Sprintf("INSERT INTO settings (%s) VALUES(%s)", strings.Join(columns, ","), strings.Join(values, ","))
|
||||
_, err := s.db.Exec(sql)
|
||||
if checkError(err, "Fail to insert settings.Settings") {
|
||||
RulesToString(ss.Rules),
|
||||
}
|
||||
tx, err := s.db.Begin()
|
||||
if checkError(err, "Fail to begin db transaction") {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
for i, field := range fields {
|
||||
stmt, err := s.db.Prepare("INSERT INTO settings (key, value) VALUES(?,?)")
|
||||
defer stmt.Close()
|
||||
if checkError(err, "Fail to prepare statement") {
|
||||
tx.Rollback()
|
||||
break
|
||||
}
|
||||
_, err = stmt.Exec(field, values[i])
|
||||
if checkError(err, "Fail to insert field "+field+" of settings") {
|
||||
tx.Rollback()
|
||||
break
|
||||
}
|
||||
}
|
||||
err = tx.Commit()
|
||||
if checkError(err, "Fail to commit") {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
var defaultServer = settings.Server{
|
||||
@ -255,6 +276,7 @@ func cloneSettings(s settings.Settings) settings.Settings {
|
||||
}
|
||||
|
||||
func (s settingsBackend) GetServer() (*settings.Server, error) {
|
||||
logBacktrace()
|
||||
sql := "select key, value from settings"
|
||||
rows, err := s.db.Query(sql)
|
||||
if checkError(err, "Fail to Query for GetServer") {
|
||||
@ -301,27 +323,45 @@ func (s settingsBackend) GetServer() (*settings.Server, error) {
|
||||
}
|
||||
|
||||
func (s settingsBackend) SaveServer(ss *settings.Server) error {
|
||||
columns := []string{"Root", "BaseURL", "Socket", "TLSKey", "TLSCert", "Port", "Address", "Log", "EnableThumbnails", "ResizePreview", "EnableExec", "TypeDetectionByHeader", "AuthHook"}
|
||||
logBacktrace()
|
||||
fields := []string{"Root", "BaseURL", "Socket", "TLSKey", "TLSCert", "Port", "Address", "Log", "EnableThumbnails", "ResizePreview", "EnableExec", "TypeDetectionByHeader", "AuthHook"}
|
||||
values := []string{
|
||||
"'" + ss.Root + "'",
|
||||
"'" + ss.BaseURL + "'",
|
||||
"'" + ss.Socket + "'",
|
||||
"'" + ss.TLSKey + "'",
|
||||
"'" + ss.TLSCert + "'",
|
||||
"'" + ss.Port + "'",
|
||||
"'" + ss.Address + "'",
|
||||
"'" + ss.Log + "'",
|
||||
ss.Root,
|
||||
ss.BaseURL,
|
||||
ss.Socket,
|
||||
ss.TLSKey,
|
||||
ss.TLSCert,
|
||||
ss.Port,
|
||||
ss.Address,
|
||||
ss.Log,
|
||||
boolToString(ss.EnableThumbnails),
|
||||
boolToString(ss.ResizePreview),
|
||||
boolToString(ss.EnableExec),
|
||||
boolToString(ss.TypeDetectionByHeader),
|
||||
"'" + ss.AuthHook + "'"}
|
||||
sql := fmt.Sprintf("INSERT INTO settings (%s) VALUES(%s)", strings.Join(columns, ","), strings.Join(values, ","))
|
||||
_, err := s.db.Exec(sql)
|
||||
if checkError(err, "Fail to insert for settings.Settings") {
|
||||
ss.AuthHook}
|
||||
tx, err := s.db.Begin()
|
||||
if checkError(err, "Fail to begin db transaction") {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
for i, field := range fields {
|
||||
stmt, err := s.db.Prepare("INSERT INTO settings (key, value) VALUES(?,?)")
|
||||
defer stmt.Close()
|
||||
if checkError(err, "Fail to prepare statement") {
|
||||
tx.Rollback()
|
||||
break
|
||||
}
|
||||
_, err = stmt.Exec(field, values[i])
|
||||
if checkError(err, "Fail to insert field "+field+" of settings") {
|
||||
tx.Rollback()
|
||||
break
|
||||
}
|
||||
}
|
||||
err = tx.Commit()
|
||||
if checkError(err, "Fail to commit") {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func SetSetting(db *sql.DB, key string, value string) error {
|
||||
@ -350,11 +390,21 @@ func GetSetting(db *sql.DB, key string) string {
|
||||
func addSetting(db *sql.DB, key string, value string) error {
|
||||
sql := "insert into settings(key, value) values('" + key + "', '" + value + "')"
|
||||
_, err := db.Exec(sql)
|
||||
checkError(err, "Fail to addSetting")
|
||||
return err
|
||||
}
|
||||
|
||||
func updateSetting(db *sql.DB, key string, value string) error {
|
||||
sql := "update settings set value = '" + value + "' where key = '" + key + "'"
|
||||
_, err := db.Exec(sql)
|
||||
checkError(err, "Fail to updateSetting")
|
||||
return err
|
||||
}
|
||||
|
||||
func HadSetting(db *sql.DB) bool {
|
||||
key := GetSetting(db, "Key")
|
||||
if key == "" {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
@ -16,8 +16,9 @@ type linkRecord interface {
|
||||
}
|
||||
|
||||
func InitShareTable(db *sql.DB) error {
|
||||
sql := "create table if not exists share_links (path string, userid integer, expire integer, passwordhash string, token string)"
|
||||
sql := "create table if not exists share_links (hash string, path string, userid integer, expire integer, passwordhash string, token string)"
|
||||
_, err := db.Exec(sql)
|
||||
checkError(err, "Fail to InitShareTable")
|
||||
return err
|
||||
}
|
||||
|
||||
@ -88,10 +89,12 @@ func (s shareBackend) Gets(path string, id uint) ([]*share.Link, error) {
|
||||
func (s shareBackend) Save(l *share.Link) error {
|
||||
sql := fmt.Sprintf("insert into share_links (hash, path, userid, expire, passwordhash, token) values('%s', '%s', %d, %d, '%s', '%s')", l.Hash, l.Path, l.UserID, l.Expire, l.PasswordHash, l.Token)
|
||||
_, err := s.db.Exec(sql)
|
||||
checkError(err, "Fail to Save share")
|
||||
return err
|
||||
}
|
||||
func (s shareBackend) Delete(hash string) error {
|
||||
sql := fmt.Sprintf("DELETE FROM share_links WHERE hash='%s'", hash)
|
||||
_, err := s.db.Exec(sql)
|
||||
checkError(err, "Fail to Delete share")
|
||||
return err
|
||||
}
|
||||
|
||||
@ -124,6 +124,7 @@ func InitUserTable(db *sql.DB) error {
|
||||
return err
|
||||
}
|
||||
user, err := usersBackend{db}.Get("admin")
|
||||
checkError(err, "Fail to query admin user")
|
||||
if user == nil {
|
||||
log.Println("No admin exists")
|
||||
err := usersBackend{db}.Save(&adminUser)
|
||||
@ -276,7 +277,7 @@ func (s usersBackend) insertUser(user *users.User) error {
|
||||
}
|
||||
columns := []string{}
|
||||
specs := []string{}
|
||||
for _,c := range columnSpec {
|
||||
for _, c := range columnSpec {
|
||||
columns = append(columns, c[0])
|
||||
specs = append(specs, c[1])
|
||||
}
|
||||
@ -318,6 +319,7 @@ func (s usersBackend) DeleteByID(id uint) error {
|
||||
logBacktrace()
|
||||
sql := "delete from users where id=" + strconv.Itoa(int(id))
|
||||
_, err := s.db.Exec(sql)
|
||||
checkError(err, "Fail to delete User by id")
|
||||
return err
|
||||
}
|
||||
|
||||
@ -325,6 +327,7 @@ func (s usersBackend) DeleteByUsername(username string) error {
|
||||
logBacktrace()
|
||||
sql := "delete from users where username='" + username + "'"
|
||||
_, err := s.db.Exec(sql)
|
||||
checkError(err, "Fail to delete user by username")
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@ -55,3 +55,17 @@ func logBacktrace() {
|
||||
funcs = reverse(funcs)
|
||||
log.Printf("%s\n", strings.Join(funcs, " -> "))
|
||||
}
|
||||
|
||||
func LogBacktrace() {
|
||||
funcs := make([]string, 0)
|
||||
for _, i := range []int{1, 2, 3} {
|
||||
p := filepath.Base(getRuntimeFunctionName(uint(i)))
|
||||
if len(p) > 0 {
|
||||
funcs = append(funcs, p)
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
funcs = reverse(funcs)
|
||||
log.Printf("%s\n", strings.Join(funcs, " -> "))
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user