diff --git a/file/info.go b/file/info.go index 5b059b83..52506ffb 100644 --- a/file/info.go +++ b/file/info.go @@ -113,6 +113,8 @@ func (i Info) CanBeEdited() bool { return true } + // If the type isn't text (and is blob for example), it will check some + // common types that are mistaken not to be text. extensions := [...]string{ ".md", ".markdown", ".mdown", ".mmark", ".asciidoc", ".adoc", ".ad", diff --git a/handlers/single.go b/handlers/single.go index 5a9b0eb7..2d804247 100644 --- a/handlers/single.go +++ b/handlers/single.go @@ -2,6 +2,7 @@ package handlers import ( "net/http" + "strings" "github.com/hacdias/caddy-filemanager/config" "github.com/hacdias/caddy-filemanager/file" @@ -18,12 +19,6 @@ func ServeSingle(w http.ResponseWriter, r *http.Request, c *config.Config, u *co return errors.ErrorToHTTPCode(err, true), err } - if i.Type == "text" { - if err = i.Read(); err != nil { - return errors.ErrorToHTTPCode(err, true), err - } - } - p := &page.Page{ Info: &page.Info{ Name: i.Name, @@ -35,6 +30,17 @@ func ServeSingle(w http.ResponseWriter, r *http.Request, c *config.Config, u *co }, } + // If the request accepts JSON, we send the file information. + if strings.Contains(r.Header.Get("Accept"), "application/json") { + return p.PrintAsJSON(w) + } + + if i.Type == "text" { + if err = i.Read(); err != nil { + return errors.ErrorToHTTPCode(err, true), err + } + } + if i.CanBeEdited() && u.AllowEdit { p.Data, err = GetEditor(r, i) p.Editor = true