alist/internal/bootstrap/config.go

81 lines
2.1 KiB
Go
Raw Normal View History

2022-06-06 13:48:53 +00:00
package bootstrap
import (
2022-06-15 06:57:13 +00:00
"io/ioutil"
"os"
"path/filepath"
2022-08-07 05:09:59 +00:00
"github.com/alist-org/alist/v3/cmd/flags"
2022-08-03 06:26:59 +00:00
"github.com/alist-org/alist/v3/internal/conf"
2022-06-06 13:48:53 +00:00
"github.com/alist-org/alist/v3/pkg/utils"
"github.com/caarlos0/env/v6"
log "github.com/sirupsen/logrus"
)
func InitConfig() {
2022-08-07 05:09:59 +00:00
log.Infof("reading config file: %s", flags.Config)
if !utils.Exists(flags.Config) {
2022-06-06 13:48:53 +00:00
log.Infof("config file not exists, creating default config file")
2022-08-07 05:09:59 +00:00
_, err := utils.CreateNestedFile(flags.Config)
2022-06-06 13:48:53 +00:00
if err != nil {
2022-06-23 08:49:37 +00:00
log.Fatalf("failed to create config file: %+v", err)
2022-06-06 13:48:53 +00:00
}
2022-08-03 06:26:59 +00:00
conf.Conf = conf.DefaultConfig()
2022-08-07 16:51:05 +00:00
if !utils.WriteJsonToFile(flags.Config, conf.Conf) {
2022-06-06 13:48:53 +00:00
log.Fatalf("failed to create default config file")
}
} else {
2022-08-07 05:09:59 +00:00
configBytes, err := ioutil.ReadFile(flags.Config)
2022-06-06 13:48:53 +00:00
if err != nil {
2022-08-07 05:09:59 +00:00
log.Fatalf("reading config file error: %+v", err)
2022-06-06 13:48:53 +00:00
}
2022-08-03 06:26:59 +00:00
conf.Conf = conf.DefaultConfig()
err = utils.Json.Unmarshal(configBytes, conf.Conf)
2022-06-06 13:48:53 +00:00
if err != nil {
2022-08-07 05:09:59 +00:00
log.Fatalf("load config error: %+v", err)
2022-06-06 13:48:53 +00:00
}
// update config.json struct
2022-08-03 06:26:59 +00:00
confBody, err := utils.Json.MarshalIndent(conf.Conf, "", " ")
2022-06-06 13:48:53 +00:00
if err != nil {
2022-08-07 05:09:59 +00:00
log.Fatalf("marshal config error: %+v", err)
2022-06-06 13:48:53 +00:00
}
2022-08-07 05:09:59 +00:00
err = ioutil.WriteFile(flags.Config, confBody, 0777)
2022-06-06 13:48:53 +00:00
if err != nil {
2022-08-07 05:09:59 +00:00
log.Fatalf("update config struct error: %+v", err)
2022-06-06 13:48:53 +00:00
}
}
2022-08-03 06:26:59 +00:00
if !conf.Conf.Force {
2022-06-06 13:48:53 +00:00
confFromEnv()
}
2022-06-23 08:49:37 +00:00
// convert abs path
2022-08-03 06:26:59 +00:00
if !filepath.IsAbs(conf.Conf.TempDir) {
absPath, err := filepath.Abs(conf.Conf.TempDir)
2022-06-23 08:49:37 +00:00
if err != nil {
2022-08-07 05:09:59 +00:00
log.Fatalf("get abs path error: %+v", err)
2022-06-23 08:49:37 +00:00
}
conf.Conf.TempDir = absPath
2022-06-23 08:49:37 +00:00
}
err := os.RemoveAll(filepath.Join(conf.Conf.TempDir))
2022-06-06 13:48:53 +00:00
if err != nil {
log.Errorln("failed delete temp file:", err)
}
2022-08-03 06:26:59 +00:00
err = os.MkdirAll(conf.Conf.TempDir, 0700)
2022-06-06 13:48:53 +00:00
if err != nil {
2022-08-07 05:09:59 +00:00
log.Fatalf("create temp dir error: %+v", err)
2022-06-06 13:48:53 +00:00
}
2022-08-03 06:26:59 +00:00
log.Debugf("config: %+v", conf.Conf)
2022-06-06 13:48:53 +00:00
}
func confFromEnv() {
prefix := "ALIST_"
2022-08-07 05:09:59 +00:00
if flags.NoPrefix {
2022-06-06 13:48:53 +00:00
prefix = ""
}
log.Infof("load config from env with prefix: %s", prefix)
2022-08-03 06:26:59 +00:00
if err := env.Parse(conf.Conf, env.Options{
2022-06-06 13:48:53 +00:00
Prefix: prefix,
}); err != nil {
2022-08-07 05:09:59 +00:00
log.Fatalf("load config from env error: %+v", err)
2022-06-06 13:48:53 +00:00
}
}