package caddyhugo import ( "fmt" "html/template" "io/ioutil" "os" "path" "git.stephensearles.com/stephen/caddy-hugo2/comments" "git.stephensearles.com/stephen/caddy-hugo2/media" "github.com/gohugoio/hugo/deps" "github.com/gohugoio/hugo/hugofs" "github.com/gohugoio/hugo/hugolib" "github.com/mholt/caddy" "github.com/mholt/caddy/caddyhttp/httpserver" ) var eventHookCounter uint64 func SetupCaddy(c *caddy.Controller) error { ch := &CaddyHugo{} ch.Site = httpserver.GetConfig(c) err := ch.Setup(ch.Site.Root) c.OnShutdown(func() error { return ch.persistAllEdits() }) ch.Site.AddMiddleware(ch.Middleware(c)) ch.commentsSetting(c) return err } func (ch *CaddyHugo) commentsSetting(c *caddy.Controller) { for c.NextLine() { if c.Val() == "hugo" { for c.NextBlock() { if c.Val() == "comments" { ch.Comments = comments.WithStorage(comments.NewDiskv(path.Join(ch.Site.Root, "comments"))) if c.NextArg() { ch.Comments.Password = c.Val() } } } } } } func (ch *CaddyHugo) Setup(dir string) error { var err error ch.Dir = dir ch.docs = make(map[string]*editSession) ch.confirmingToClient = make(map[uint64]struct{}) ch.HugoCfg = &deps.DepsCfg{} ch.HugoCfg.Cfg, err = hugolib.LoadConfig(hugofs.Os, dir, "") if err != nil { return fmt.Errorf("error loading hugo config: %v", err) } ch.HugoCfg.Cfg.Set("workingdir", dir) ch.HugoSites, err = hugolib.NewHugoSites(*ch.HugoCfg) if err != nil { return fmt.Errorf("error intializing hugo: %v", err) } err = ch.Build() if err != nil { return fmt.Errorf("error building initial hugo: %v", err) } ch.authorTmpl, err = template.New("").Parse(AuthorPage) if err != nil { return fmt.Errorf("author template invalid: %v", err) } ch.adminTmpl, err = template.New("").Parse(AdminPage) if err != nil { return fmt.Errorf("admin template invalid: %v", err) } ch.editTmpl, err = template.New("").Parse(EditPage) if err != nil { return fmt.Errorf("edit template invalid: %v", err) } thumbDir, err := ioutil.TempDir("", "thumbs") if err != nil { return fmt.Errorf("couldn't initialize media: %v", err) } ch.Media = &media.MediaSource{ StorageDir: path.Join(dir, "media"), ThumbDir: thumbDir, } err = os.MkdirAll(ch.Media.StorageDir, 0755) if err != nil { return fmt.Errorf("couldn't initialize media: %v", err) } err = ch.Publish() if err != nil { fmt.Println("error with initial publish of hugo site:", err) } return nil }