package config import ( "blog/utils" "encoding/json" "errors" "fmt" "io/ioutil" "os" "os/exec" "strings" ) type Config struct { userConfig systemConfig memosConfig } // var Cfg Config func init() { var err error Cfg.CurrentDir, err = os.Getwd() if err != nil { panic(err) } configFile, err := ioutil.ReadFile(Cfg.CurrentDir + "/config.json") if err != nil { panic(err) } err = json.Unmarshal(configFile, &Cfg) if err != nil { panic(err) } if "" == Cfg.Dashboard || !strings.HasPrefix(Cfg.Dashboard, "/") { Cfg.Dashboard = "/admin" } if "" == Cfg.ThemePath || !strings.HasPrefix(Cfg.ThemePath, "/") { Cfg.ThemesDir = Cfg.CurrentDir + "/themes/blog" //+ Cfg.ThemePath } else { Cfg.ThemesDir = Cfg.CurrentDir + "/themes" + Cfg.ThemePath } repoName, err := utils.GetRepoName(Cfg.DocumentGitUrl) if err != nil { panic(err) } Cfg.AppName = "WebServer" Cfg.Version = 3.2 Cfg.DocumentDir = Cfg.CurrentDir + "/" + repoName Cfg.GitHookUrl = "/api/git_push_hook" Cfg.AppRepository = "https://gitea.starss.cc/JiXieShi/Blog" } func Initial() { if _, err := exec.LookPath("git"); err != nil { fmt.Println("请先安装git") panic(err) } if !utils.IsDir(Cfg.DocumentDir) { fmt.Println("正在克隆文档仓库,请稍等...") out, err := utils.RunCmdByDir(Cfg.CurrentDir, "git", "clone", Cfg.DocumentGitUrl) if err != nil { panic(err) } fmt.Println(out) } else { out, err := utils.RunCmdByDir(Cfg.DocumentDir, "git", "pull") fmt.Println(out) if err != nil { panic(err) } } if err := checkDocDirAndBindConfig(&Cfg); err != nil { fmt.Println("文档缺少必要的目录") panic(err) } imgDir := Cfg.CurrentDir + "/images" if !utils.IsDir(imgDir) { if os.Mkdir(imgDir, os.ModePerm) != nil { panic("生成images目录失败!") } } } func checkDocDirAndBindConfig(cfg *Config) error { dirs := []string{"assets", "content", "extra_nav"} for _, dir := range dirs { absoluteDir := Cfg.DocumentDir + "/" + dir if !utils.IsDir(absoluteDir) { return errors.New("documents cannot lack " + absoluteDir + " dir") } } cfg.DocumentAssetsDir = cfg.DocumentDir + "/assets" cfg.DocumentContentDir = cfg.DocumentDir + "/content" cfg.DocumentExtraNavDir = cfg.DocumentDir + "/extra_nav" return nil }