111 lines
2.2 KiB
Go
111 lines
2.2 KiB
Go
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
|
||
}
|