From 59530452642946f72eb95db95e38e8d36408d977 Mon Sep 17 00:00:00 2001 From: Henrique Dias Date: Tue, 7 Jun 2016 07:54:10 +0100 Subject: [PATCH] Changeable admin URL. Close #69. --- config/config.go | 9 +++++++++ hugo.go | 26 +++++++++++++------------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/config/config.go b/config/config.go index 280622c1..0dd7a04f 100644 --- a/config/config.go +++ b/config/config.go @@ -15,6 +15,7 @@ type Config struct { Styles string // Admin styles path Args []string // Hugo arguments Hugo string // Hugo executable path + Admin string // Hugo admin URL Git bool // Is this site a git repository } @@ -22,6 +23,7 @@ type Config struct { func ParseHugo(c *setup.Controller) (*Config, error) { conf := &Config{ Public: strings.Replace(c.Root, "./", "", -1), + Admin: "/admin", Path: "./", Git: false, } @@ -49,6 +51,13 @@ func ParseHugo(c *setup.Controller) (*Config, error) { conf.Styles = strings.TrimPrefix(conf.Styles, "/") // Add a beginning slash to make a conf.Styles = "/" + conf.Styles + case "admin": + if !c.NextArg() { + return nil, c.ArgErr() + } + conf.Admin = c.Val() + conf.Admin = strings.TrimPrefix(conf.Admin, "/") + conf.Admin = "/" + conf.Admin default: key := "--" + c.Val() value := "true" diff --git a/hugo.go b/hugo.go index 2a8b0f2a..03263162 100644 --- a/hugo.go +++ b/hugo.go @@ -73,8 +73,8 @@ type CaddyHugo struct { // ServeHTTP is the main function of the whole plugin that routes every single // request to its function. func (h CaddyHugo) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) { - // Only handle /admin path - if middleware.Path(r.URL.Path).Matches("/admin") { + // Only handle /{admin} path + if middleware.Path(r.URL.Path).Matches(h.Config.Admin) { var err error var page string code := 404 @@ -96,16 +96,16 @@ func (h CaddyHugo) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error } } - // If the current page is only "/admin/", redirect to "/admin/browse/content/" - if r.URL.Path == "/admin/" { - http.Redirect(w, r, "/admin/browse/content/", http.StatusTemporaryRedirect) + // If the current page is only "/{admin}/", redirect to "/{admin}/browse/content/" + if r.URL.Path == h.Config.Admin+"/" { + http.Redirect(w, r, h.Config.Admin+"/browse/content/", http.StatusTemporaryRedirect) return 0, nil } - // If the url matches exactly with /admin/settings/ serve that page + // If the url matches exactly with /{admin}/settings/ serve that page // page variable isn't used here to avoid people using URLs like - // "/admin/settings/something". - if r.URL.Path == "/admin/settings/" { + // "/{admin}/settings/something". + if r.URL.Path == h.Config.Admin+"/settings/" { var frontmatter string if _, err := os.Stat(h.Config.Path + "config.yaml"); err == nil { @@ -120,13 +120,13 @@ func (h CaddyHugo) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error frontmatter = "toml" } - http.Redirect(w, r, "/admin/edit/config."+frontmatter, http.StatusTemporaryRedirect) + http.Redirect(w, r, h.Config.Admin+"/edit/config."+frontmatter, http.StatusTemporaryRedirect) return 0, nil } // Serve the static assets if page == "assets" { - code, err = serveAssets(w, r) + code, err = serveAssets(w, r, h.Config) } // Browse page @@ -154,9 +154,9 @@ func (h CaddyHugo) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error return h.Next.ServeHTTP(w, r) } -// serveAssets handles the /admin/assets requests -func serveAssets(w http.ResponseWriter, r *http.Request) (int, error) { - filename := strings.Replace(r.URL.Path, "/admin/assets", "public", 1) +// serveAssets handles the /{admin}/assets requests +func serveAssets(w http.ResponseWriter, r *http.Request, c *config.Config) (int, error) { + filename := strings.Replace(r.URL.Path, c.Admin+"/assets", "public", 1) file, err := assets.Asset(filename) if err != nil {