|
- package caddyhugo
-
- import (
- "fmt"
- "html/template"
- "os"
- "path"
- "path/filepath"
-
- "git.stephensearles.com/stephen/caddy-hugo2/comments"
- "git.stephensearles.com/stephen/caddy-hugo2/media"
-
- "github.com/caddyserver/caddy"
- "github.com/caddyserver/caddy/caddyhttp/httpserver"
- "github.com/gohugoio/hugo/hugofs"
- )
-
- var eventHookCounter uint64
-
- func SetupCaddy(c *caddy.Controller) error {
- ch := &CaddyHugo{}
-
- ch.Site = httpserver.GetConfig(c)
- root, err := filepath.Abs(ch.Site.Root)
- if err != nil {
- return err
- }
- err = ch.Setup(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.HugoSites, ch.HugoCfg, err = ch.configWithFs(hugofs.Os)
- if err != nil {
- return fmt.Errorf("error setting up 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)
- }
-
- ch.Media = &media.MediaSource{
- StorageDir: path.Join(dir, "media"),
- ThumbDir: path.Join(dir, "thumbs"),
- }
-
- err = os.MkdirAll(ch.Media.StorageDir, 0755)
- if err != nil {
- return fmt.Errorf("couldn't initialize media: %v", err)
- }
-
- err = writeThemeFiles(ch.Dir)
- if err != nil {
- fmt.Println("error installing theme files:", err)
- }
-
- err = ch.Publish()
- if err != nil {
- fmt.Println("error with initial publish of hugo site:", err)
- }
-
- return nil
- }
|