Support HEAD requests
This commit is contained in:
@@ -72,7 +72,7 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request,
|
|||||||
inf, err := templateData.PixelAPI.GetFileInfo(id)
|
inf, err := templateData.PixelAPI.GetFileInfo(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if pixelapi.ErrIsServerError(err) {
|
if pixelapi.ErrIsServerError(err) {
|
||||||
wc.templates.Get().ExecuteTemplate(w, "500", templateData)
|
wc.templates.Run(w, r, "500", templateData)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
@@ -82,7 +82,7 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request,
|
|||||||
|
|
||||||
if len(files) == 0 {
|
if len(files) == 0 {
|
||||||
w.WriteHeader(http.StatusNotFound)
|
w.WriteHeader(http.StatusNotFound)
|
||||||
wc.templates.Get().ExecuteTemplate(w, "file_not_found", templateData)
|
wc.templates.Run(w, r, "file_not_found", templateData)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request,
|
|||||||
templateName = "file_viewer_compat"
|
templateName = "file_viewer_compat"
|
||||||
}
|
}
|
||||||
|
|
||||||
err = wc.templates.Get().ExecuteTemplate(w, templateName, templateData)
|
err = wc.templates.Run(w, r, templateName, templateData)
|
||||||
if err != nil && !util.IsNetError(err) {
|
if err != nil && !util.IsNetError(err) {
|
||||||
log.Error("Error executing template file_viewer: %s", err)
|
log.Error("Error executing template file_viewer: %s", err)
|
||||||
}
|
}
|
||||||
@@ -153,17 +153,17 @@ func (wc *WebController) serveListViewer(w http.ResponseWriter, r *http.Request,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
if apiErr, ok := err.(pixelapi.Error); ok && apiErr.Status == http.StatusNotFound {
|
if apiErr, ok := err.(pixelapi.Error); ok && apiErr.Status == http.StatusNotFound {
|
||||||
w.WriteHeader(http.StatusNotFound)
|
w.WriteHeader(http.StatusNotFound)
|
||||||
wc.templates.Get().ExecuteTemplate(w, "list_not_found", templateData)
|
wc.templates.Run(w, r, "list_not_found", templateData)
|
||||||
} else {
|
} else {
|
||||||
log.Error("API request error occurred: %s", err)
|
log.Error("API request error occurred: %s", err)
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
wc.templates.Get().ExecuteTemplate(w, "500", templateData)
|
wc.templates.Run(w, r, "500", templateData)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if len(list.Files) == 0 {
|
if len(list.Files) == 0 {
|
||||||
w.WriteHeader(http.StatusNotFound)
|
w.WriteHeader(http.StatusNotFound)
|
||||||
wc.templates.Get().ExecuteTemplate(w, "list_not_found", templateData)
|
wc.templates.Run(w, r, "list_not_found", templateData)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,7 +195,7 @@ func (wc *WebController) serveListViewer(w http.ResponseWriter, r *http.Request,
|
|||||||
templateName = "file_viewer_compat"
|
templateName = "file_viewer_compat"
|
||||||
}
|
}
|
||||||
|
|
||||||
err = wc.templates.Get().ExecuteTemplate(w, templateName, templateData)
|
err = wc.templates.Run(w, r, templateName, templateData)
|
||||||
if err != nil && !util.IsNetError(err) {
|
if err != nil && !util.IsNetError(err) {
|
||||||
log.Error("Error executing template file_viewer: %s", err)
|
log.Error("Error executing template file_viewer: %s", err)
|
||||||
}
|
}
|
||||||
|
@@ -19,7 +19,7 @@ func (wc *WebController) serveDirectory(w http.ResponseWriter, r *http.Request,
|
|||||||
w.Header().Set("X-Robots-Tag", "noindex, nofollow")
|
w.Header().Set("X-Robots-Tag", "noindex, nofollow")
|
||||||
|
|
||||||
if path == "" {
|
if path == "" {
|
||||||
wc.templates.Get().ExecuteTemplate(w, "404", td)
|
wc.templates.Run(w, r, "404", td)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ func (wc *WebController) serveDirectory(w http.ResponseWriter, r *http.Request,
|
|||||||
wc.serveUnavailableForLegalReasons(w, r)
|
wc.serveUnavailableForLegalReasons(w, r)
|
||||||
} else {
|
} else {
|
||||||
log.Error("Failed to get path: %s", err)
|
log.Error("Failed to get path: %s", err)
|
||||||
wc.templates.Get().ExecuteTemplate(w, "500", td)
|
wc.templates.Run(w, r, "500", td)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -43,7 +43,7 @@ func (wc *WebController) serveDirectory(w http.ResponseWriter, r *http.Request,
|
|||||||
td.Title = fmt.Sprintf("%s ~ pixeldrain", node.Path[node.BaseIndex].Name)
|
td.Title = fmt.Sprintf("%s ~ pixeldrain", node.Path[node.BaseIndex].Name)
|
||||||
td.Other = node
|
td.Other = node
|
||||||
td.OGData = wc.metadataFromFilesystem(r, node)
|
td.OGData = wc.metadataFromFilesystem(r, node)
|
||||||
err = wc.templates.Get().ExecuteTemplate(w, "filesystem", td)
|
err = wc.templates.Run(w, r, "filesystem", td)
|
||||||
if err != nil && !util.IsNetError(err) {
|
if err != nil && !util.IsNetError(err) {
|
||||||
log.Error("Error executing template filesystem: %s", err)
|
log.Error("Error executing template filesystem: %s", err)
|
||||||
}
|
}
|
||||||
|
@@ -20,7 +20,7 @@ func (wc *WebController) serveShareXConfig(w http.ResponseWriter, r *http.Reques
|
|||||||
sess, err := templateData.PixelAPI.PostUserSession("sharex")
|
sess, err := templateData.PixelAPI.PostUserSession("sharex")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("Failed to create user session: %s", err)
|
log.Error("Failed to create user session: %s", err)
|
||||||
wc.templates.Get().ExecuteTemplate(w, "500", templateData)
|
wc.templates.Run(w, r, "500", templateData)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -4,6 +4,7 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
@@ -199,12 +200,15 @@ func (tm *TemplateManager) ParseTemplates(silent bool) {
|
|||||||
tm.tpl = tpl
|
tm.tpl = tpl
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get returns the templates, so they can be used to render views
|
// Run runs a template by name
|
||||||
func (tm *TemplateManager) Get() *template.Template {
|
func (tm *TemplateManager) Run(w io.Writer, r *http.Request, name string, data any) (err error) {
|
||||||
if tm.debugModeEnabled {
|
if tm.debugModeEnabled {
|
||||||
tm.ParseTemplates(true)
|
tm.ParseTemplates(true)
|
||||||
}
|
}
|
||||||
return tm.tpl
|
if r.Method == "HEAD" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return tm.tpl.ExecuteTemplate(w, name, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Template functions. These can be called from within the template to execute
|
// Template functions. These can be called from within the template to execute
|
||||||
|
@@ -368,5 +368,5 @@ func (wc *WebController) serveEmailConfirm(
|
|||||||
td := wc.newTemplateData(w, r)
|
td := wc.newTemplateData(w, r)
|
||||||
td.Other = status
|
td.Other = status
|
||||||
|
|
||||||
wc.templates.Get().ExecuteTemplate(w, "email_confirm", td)
|
wc.templates.Run(w, r, "email_confirm", td)
|
||||||
}
|
}
|
||||||
|
@@ -90,7 +90,7 @@ func New(r *httprouter.Router, prefix string, conf Config) (wc *WebController) {
|
|||||||
if conf.MaintenanceMode {
|
if conf.MaintenanceMode {
|
||||||
r.NotFound = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
r.NotFound = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
w.WriteHeader(http.StatusServiceUnavailable)
|
w.WriteHeader(http.StatusServiceUnavailable)
|
||||||
wc.templates.Get().ExecuteTemplate(w, "maintenance", wc.newTemplateData(w, r))
|
wc.templates.Run(w, r, "maintenance", wc.newTemplateData(w, r))
|
||||||
})
|
})
|
||||||
return wc
|
return wc
|
||||||
}
|
}
|
||||||
@@ -203,6 +203,11 @@ func New(r *httprouter.Router, prefix string, conf Config) (wc *WebController) {
|
|||||||
{GET, "theme.css", wc.themeHandler},
|
{GET, "theme.css", wc.themeHandler},
|
||||||
} {
|
} {
|
||||||
r.Handle(h.method, prefix+"/"+h.path, middleware(h.handler))
|
r.Handle(h.method, prefix+"/"+h.path, middleware(h.handler))
|
||||||
|
|
||||||
|
// Also support HEAD requests
|
||||||
|
if h.method == GET {
|
||||||
|
r.HEAD(prefix+"/"+h.path, middleware(h.handler))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return wc
|
return wc
|
||||||
@@ -243,7 +248,8 @@ func (wc *WebController) serveTemplate(tpl string, opts handlerOpts) httprouter.
|
|||||||
http.Redirect(w, r, "/login", http.StatusSeeOther)
|
http.Redirect(w, r, "/login", http.StatusSeeOther)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err := wc.templates.Get().ExecuteTemplate(w, tpl, td)
|
|
||||||
|
err := wc.templates.Run(w, r, tpl, td)
|
||||||
if err != nil && !util.IsNetError(err) {
|
if err != nil && !util.IsNetError(err) {
|
||||||
log.Error("Error executing template '%s': %s", tpl, err)
|
log.Error("Error executing template '%s': %s", tpl, err)
|
||||||
}
|
}
|
||||||
@@ -265,7 +271,7 @@ func (wc *WebController) serveMarkdown(tpl string, opts handlerOpts) httprouter.
|
|||||||
|
|
||||||
// Execute the raw markdown template and save the result in a buffer
|
// Execute the raw markdown template and save the result in a buffer
|
||||||
var tplBuf bytes.Buffer
|
var tplBuf bytes.Buffer
|
||||||
err = wc.templates.Get().ExecuteTemplate(&tplBuf, tpl, tpld)
|
err = wc.templates.Run(&tplBuf, r, tpl, tpld)
|
||||||
if err != nil && !util.IsNetError(err) {
|
if err != nil && !util.IsNetError(err) {
|
||||||
log.Error("Error executing template '%s': %s", tpl, err)
|
log.Error("Error executing template '%s': %s", tpl, err)
|
||||||
return
|
return
|
||||||
@@ -314,7 +320,7 @@ func (wc *WebController) serveMarkdown(tpl string, opts handlerOpts) httprouter.
|
|||||||
tpld.Other = template.HTML(mdBuf.Bytes())
|
tpld.Other = template.HTML(mdBuf.Bytes())
|
||||||
|
|
||||||
// Execute the wrapper template
|
// Execute the wrapper template
|
||||||
err = wc.templates.Get().ExecuteTemplate(w, "markdown_wrapper", tpld)
|
err = wc.templates.Run(w, r, "markdown_wrapper", tpld)
|
||||||
if err != nil && !util.IsNetError(err) {
|
if err != nil && !util.IsNetError(err) {
|
||||||
log.Error("Error executing template '%s': %s", tpl, err)
|
log.Error("Error executing template '%s': %s", tpl, err)
|
||||||
}
|
}
|
||||||
@@ -389,7 +395,7 @@ func (wc *WebController) serveForm(
|
|||||||
w.WriteHeader(http.StatusBadRequest)
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
err := wc.templates.Get().ExecuteTemplate(w, "form_page", td)
|
err := wc.templates.Run(w, r, "form_page", td)
|
||||||
if err != nil && !util.IsNetError(err) {
|
if err != nil && !util.IsNetError(err) {
|
||||||
log.Error("Error executing form page: %s", err)
|
log.Error("Error executing form page: %s", err)
|
||||||
}
|
}
|
||||||
@@ -399,17 +405,17 @@ func (wc *WebController) serveForm(
|
|||||||
func (wc *WebController) serveForbidden(w http.ResponseWriter, r *http.Request) {
|
func (wc *WebController) serveForbidden(w http.ResponseWriter, r *http.Request) {
|
||||||
log.Debug("Forbidden: %s", r.URL)
|
log.Debug("Forbidden: %s", r.URL)
|
||||||
w.WriteHeader(http.StatusForbidden)
|
w.WriteHeader(http.StatusForbidden)
|
||||||
wc.templates.Get().ExecuteTemplate(w, "403", wc.newTemplateData(w, r))
|
wc.templates.Run(w, r, "403", wc.newTemplateData(w, r))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wc *WebController) serveNotFound(w http.ResponseWriter, r *http.Request) {
|
func (wc *WebController) serveNotFound(w http.ResponseWriter, r *http.Request) {
|
||||||
log.Debug("Not Found: %s", r.URL)
|
log.Debug("Not Found: %s", r.URL)
|
||||||
w.WriteHeader(http.StatusNotFound)
|
w.WriteHeader(http.StatusNotFound)
|
||||||
wc.templates.Get().ExecuteTemplate(w, "404", wc.newTemplateData(w, r))
|
wc.templates.Run(w, r, "404", wc.newTemplateData(w, r))
|
||||||
}
|
}
|
||||||
func (wc *WebController) serveUnavailableForLegalReasons(w http.ResponseWriter, r *http.Request) {
|
func (wc *WebController) serveUnavailableForLegalReasons(w http.ResponseWriter, r *http.Request) {
|
||||||
w.WriteHeader(http.StatusUnavailableForLegalReasons)
|
w.WriteHeader(http.StatusUnavailableForLegalReasons)
|
||||||
wc.templates.Get().ExecuteTemplate(w, "451", wc.newTemplateData(w, r))
|
wc.templates.Run(w, r, "451", wc.newTemplateData(w, r))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wc *WebController) getAPIKey(r *http.Request) (key string, err error) {
|
func (wc *WebController) getAPIKey(r *http.Request) (key string, err error) {
|
||||||
|
Reference in New Issue
Block a user