tcp.ac/config/defaults.go

89 lines
1.8 KiB
Go

package config
import (
"io"
"os"
"runtime"
"git.tcp.direct/kayos/common/entropy"
"github.com/spf13/afero"
)
var (
configSections = []string{"logger", "http", "data", "other", "admin"}
defNoColor = false
)
var defOpts map[string]map[string]interface{}
func initDefaults() {
defOpts = map[string]map[string]interface{}{
"logger": {
"directory": home + "/.local/share/tcp.ac/logs",
"debug": true,
"trace": false,
"nocolor": defNoColor,
"use_date_filename": true,
},
"http": {
"use_unix_socket": false,
"unix_socket_path": "/var/run/tcp.ac",
"unix_socket_permissions": uint32(0644),
"bind_addr": "127.0.0.1",
"bind_port": "8080",
},
"data": {
"directory": home + "/.local/share/tcp.ac/data",
"max_key_size_mb": 10,
"max_value_size_mb": 20,
},
"other": {
"uid_size": 5,
"delete_key_size": 12,
"termbin_listen": "127.0.0.1:9999",
"base_url": "http://localhost:8080/",
},
"admin": {
"key": entropy.RandStrWithUpper(24),
},
}
}
func gen(memfs afero.Fs) {
if err := snek.SafeWriteConfigAs("config.toml"); err != nil {
print(err.Error())
os.Exit(1)
}
var f afero.File
var err error
f, err = memfs.Open("config.toml")
if err != nil {
println(err.Error())
os.Exit(1)
}
newcfg, err := io.ReadAll(f)
if err != nil {
println(err.Error())
os.Exit(1)
}
println(string(newcfg))
}
func setDefaults() {
memfs := afero.NewMemMapFs()
//goland:noinspection GoBoolExpressions
if runtime.GOOS == "windows" {
snek.SetDefault("logger.directory", "./logs/")
defNoColor = true
}
if genConfig {
snek.SetFs(memfs)
}
for _, def := range configSections {
snek.SetDefault(def, defOpts[def])
}
if genConfig {
gen(memfs)
}
}