2023-09-01 14:00:02 +00:00
package settings
import (
"log"
"os"
2023-12-01 23:47:00 +00:00
"strings"
2023-09-01 14:00:02 +00:00
"github.com/goccy/go-yaml"
2023-09-03 22:03:00 +00:00
"github.com/gtsteffaniak/filebrowser/users"
2023-09-01 14:00:02 +00:00
)
2023-12-01 23:47:00 +00:00
var Config Settings
2023-09-01 14:00:02 +00:00
2023-09-03 22:03:00 +00:00
func Initialize ( configFile string ) {
yamlData := loadConfigFile ( configFile )
2023-12-01 23:47:00 +00:00
Config = setDefaults ( )
err := yaml . Unmarshal ( yamlData , & Config )
2023-09-01 14:00:02 +00:00
if err != nil {
2023-09-03 17:28:00 +00:00
log . Fatalf ( "Error unmarshaling YAML data: %v" , err )
}
2023-12-01 23:47:00 +00:00
Config . UserDefaults . Perm = Config . UserDefaults . Permissions
Config . Server . Root = strings . TrimSuffix ( Config . Server . Root , "/" )
2023-09-03 17:28:00 +00:00
}
2023-09-03 00:16:19 +00:00
2023-09-03 22:03:00 +00:00
func loadConfigFile ( configFile string ) [ ] byte {
2023-09-03 17:28:00 +00:00
// Open and read the YAML file
2023-09-03 22:03:00 +00:00
yamlFile , err := os . Open ( configFile )
2023-09-03 17:28:00 +00:00
if err != nil {
2023-09-03 22:03:00 +00:00
log . Printf ( "ERROR: opening config file\n %v\n WARNING: Using default config only\n If this was a mistake, please make sure the file exists and is accessible by the filebrowser binary.\n\n" , err )
2023-12-01 23:47:00 +00:00
Config = setDefaults ( )
2023-09-03 17:28:00 +00:00
return [ ] byte { }
2023-09-01 14:00:02 +00:00
}
defer yamlFile . Close ( )
2023-09-02 02:03:45 +00:00
stat , err := yamlFile . Stat ( )
if err != nil {
2023-09-03 00:16:19 +00:00
log . Fatalf ( "Error getting file information: %s" , err . Error ( ) )
2023-09-02 02:03:45 +00:00
}
yamlData := make ( [ ] byte , stat . Size ( ) )
_ , err = yamlFile . Read ( yamlData )
2023-09-01 14:00:02 +00:00
if err != nil {
log . Fatalf ( "Error reading YAML data: %v" , err )
}
2023-09-03 17:28:00 +00:00
return yamlData
2023-09-01 14:00:02 +00:00
}
2023-09-03 17:28:00 +00:00
func setDefaults ( ) Settings {
return Settings {
2023-09-02 00:51:13 +00:00
Server : Server {
2023-09-04 02:21:25 +00:00
EnableThumbnails : true ,
2023-10-11 14:37:32 +00:00
ResizePreview : false ,
2023-09-03 22:03:00 +00:00
EnableExec : false ,
2023-09-02 00:51:13 +00:00
IndexingInterval : 5 ,
2024-02-10 00:13:02 +00:00
Port : 80 ,
2023-09-03 17:28:00 +00:00
NumImageProcessors : 4 ,
2023-09-02 02:03:45 +00:00
BaseURL : "" ,
2023-09-03 22:03:00 +00:00
Database : "database.db" ,
Log : "stdout" ,
Root : "/srv" ,
2024-07-30 17:45:27 +00:00
Indexing : true ,
2023-09-02 00:51:13 +00:00
} ,
2023-09-01 14:00:02 +00:00
Auth : Auth {
2023-12-20 20:44:25 +00:00
TokenExpirationTime : "2h" ,
AdminUsername : "admin" ,
AdminPassword : "admin" ,
Method : "password" ,
Signup : false ,
2023-09-01 14:00:02 +00:00
Recaptcha : Recaptcha {
Host : "" ,
} ,
} ,
2023-09-03 17:28:00 +00:00
UserDefaults : UserDefaults {
2023-10-09 22:24:48 +00:00
Scope : "." ,
LockPassword : false ,
HideDotfiles : true ,
DarkMode : false ,
DisableSettings : false ,
Locale : "en" ,
2023-09-03 22:16:49 +00:00
Permissions : users . Permissions {
2023-10-11 14:37:32 +00:00
Create : false ,
Rename : false ,
Modify : false ,
Delete : false ,
Share : false ,
Download : false ,
2023-10-09 22:24:48 +00:00
Admin : false ,
2023-09-03 22:03:00 +00:00
} ,
2023-09-03 17:28:00 +00:00
} ,
2023-09-02 00:51:13 +00:00
}
}
2023-09-30 17:50:20 +00:00
// Apply applies the default options to a user.
func ( d * UserDefaults ) Apply ( u * users . User ) {
2023-10-09 22:24:48 +00:00
u . DisableSettings = d . DisableSettings
u . DarkMode = d . DarkMode
2023-09-30 17:50:20 +00:00
u . Scope = d . Scope
u . Locale = d . Locale
u . ViewMode = d . ViewMode
u . SingleClick = d . SingleClick
u . Perm = d . Perm
u . Sorting = d . Sorting
u . Commands = d . Commands
u . HideDotfiles = d . HideDotfiles
u . DateFormat = d . DateFormat
}