89 lines
1.8 KiB
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)
|
|
}
|
|
}
|