110 lines
2.4 KiB
Go
110 lines
2.4 KiB
Go
package settings
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/goccy/go-yaml"
|
|
"github.com/gtsteffaniak/filebrowser/users"
|
|
)
|
|
|
|
var Config Settings
|
|
|
|
func Initialize(configFile string) {
|
|
yamlData := loadConfigFile(configFile)
|
|
Config = setDefaults()
|
|
err := yaml.Unmarshal(yamlData, &Config)
|
|
if err != nil {
|
|
log.Fatalf("Error unmarshaling YAML data: %v", err)
|
|
}
|
|
Config.UserDefaults.Perm = Config.UserDefaults.Permissions
|
|
// Convert relative path to absolute path
|
|
realRoot, err := filepath.Abs(Config.Server.Root)
|
|
if err != nil {
|
|
log.Fatalf("Error getting root path: %v", err)
|
|
}
|
|
_, err = os.Stat(realRoot)
|
|
if err != nil {
|
|
log.Fatalf("ERROR: Configured Root Path does not exist! %v", err)
|
|
}
|
|
Config.Server.Root = realRoot
|
|
baseurl := strings.Trim(Config.Server.BaseURL, "/")
|
|
if baseurl == "" {
|
|
Config.Server.BaseURL = "/"
|
|
} else {
|
|
Config.Server.BaseURL = "/" + baseurl + "/"
|
|
}
|
|
}
|
|
|
|
func loadConfigFile(configFile string) []byte {
|
|
// Open and read the YAML file
|
|
yamlFile, err := os.Open(configFile)
|
|
if err != nil {
|
|
log.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
defer yamlFile.Close()
|
|
|
|
stat, err := yamlFile.Stat()
|
|
if err != nil {
|
|
log.Fatalf("error getting file information: %s", err.Error())
|
|
}
|
|
|
|
yamlData := make([]byte, stat.Size())
|
|
_, err = yamlFile.Read(yamlData)
|
|
if err != nil {
|
|
log.Fatalf("Error reading YAML data: %v", err)
|
|
}
|
|
return yamlData
|
|
}
|
|
|
|
func setDefaults() Settings {
|
|
return Settings{
|
|
Server: Server{
|
|
EnableThumbnails: true,
|
|
ResizePreview: false,
|
|
EnableExec: false,
|
|
IndexingInterval: 5,
|
|
Port: 80,
|
|
NumImageProcessors: 4,
|
|
BaseURL: "",
|
|
Database: "database.db",
|
|
Log: "stdout",
|
|
Root: "/srv",
|
|
Indexing: true,
|
|
},
|
|
Auth: Auth{
|
|
TokenExpirationTime: "2h",
|
|
AdminUsername: "admin",
|
|
AdminPassword: "admin",
|
|
Method: "password",
|
|
Signup: false,
|
|
Recaptcha: Recaptcha{
|
|
Host: "",
|
|
},
|
|
},
|
|
UserDefaults: UserDefaults{
|
|
StickySidebar: true,
|
|
Scope: ".",
|
|
LockPassword: false,
|
|
HideDotfiles: true,
|
|
DarkMode: false,
|
|
DisableSettings: false,
|
|
ViewMode: "normal",
|
|
Locale: "en",
|
|
Permissions: users.Permissions{
|
|
Create: false,
|
|
Rename: false,
|
|
Modify: false,
|
|
Delete: false,
|
|
Share: false,
|
|
Download: false,
|
|
Admin: false,
|
|
Api: false,
|
|
},
|
|
},
|
|
}
|
|
}
|