Add strict transport security header in middleware
This commit is contained in:
@@ -140,7 +140,7 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request,
|
|||||||
}
|
}
|
||||||
|
|
||||||
err = wc.templates.Get().ExecuteTemplate(w, templateName, templateData)
|
err = wc.templates.Get().ExecuteTemplate(w, templateName, templateData)
|
||||||
if err != nil && !strings.Contains(err.Error(), "broken pipe") {
|
if err != nil && !isNetError(err) {
|
||||||
log.Error("Error executing template file_viewer: %s", err)
|
log.Error("Error executing template file_viewer: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -202,7 +202,7 @@ func (wc *WebController) serveListViewer(w http.ResponseWriter, r *http.Request,
|
|||||||
}
|
}
|
||||||
|
|
||||||
err = wc.templates.Get().ExecuteTemplate(w, templateName, templateData)
|
err = wc.templates.Get().ExecuteTemplate(w, templateName, templateData)
|
||||||
if err != nil && !strings.Contains(err.Error(), "broken pipe") {
|
if err != nil && !isNetError(err) {
|
||||||
log.Error("Error executing template file_viewer: %s", err)
|
log.Error("Error executing template file_viewer: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -233,7 +233,7 @@ func (wc *WebController) serveViewerDemo(w http.ResponseWriter, r *http.Request)
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
err := wc.templates.Get().ExecuteTemplate(w, "file_viewer_svelte", templateData)
|
err := wc.templates.Get().ExecuteTemplate(w, "file_viewer_svelte", templateData)
|
||||||
if err != nil && !strings.Contains(err.Error(), "broken pipe") {
|
if err != nil && !isNetError(err) {
|
||||||
log.Error("Error rendering demo file: %s", err)
|
log.Error("Error rendering demo file: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -35,7 +35,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
|
||||||
err = wc.templates.Get().ExecuteTemplate(w, "filesystem", td)
|
err = wc.templates.Get().ExecuteTemplate(w, "filesystem", td)
|
||||||
if err != nil && !strings.Contains(err.Error(), "broken pipe") {
|
if err != nil && !isNetError(err) {
|
||||||
log.Error("Error executing template filesystem: %s", err)
|
log.Error("Error executing template filesystem: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httputil"
|
"net/http/httputil"
|
||||||
"net/url"
|
"net/url"
|
||||||
@@ -214,12 +215,20 @@ func New(r *httprouter.Router, prefix string, conf Config) (wc *WebController) {
|
|||||||
{GET, "misc/sharex/pixeldrain.com.sxcu", wc.serveShareXConfig},
|
{GET, "misc/sharex/pixeldrain.com.sxcu", wc.serveShareXConfig},
|
||||||
{GET, "theme.css", wc.themeHandler},
|
{GET, "theme.css", wc.themeHandler},
|
||||||
} {
|
} {
|
||||||
r.Handle(h.method, prefix+"/"+h.path, h.handler)
|
r.Handle(h.method, prefix+"/"+h.path, middleware(h.handler))
|
||||||
}
|
}
|
||||||
|
|
||||||
return wc
|
return wc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func middleware(handle httprouter.Handle) httprouter.Handle {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
|
w.Header().Set("Strict-Transport-Security", "max-age=31536000")
|
||||||
|
w.Header().Set("X-Clacks-Overhead", "GNU Terry Pratchett")
|
||||||
|
handle(w, r, p)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type handlerOpts struct {
|
type handlerOpts struct {
|
||||||
Auth bool
|
Auth bool
|
||||||
NoEmbed bool
|
NoEmbed bool
|
||||||
@@ -237,7 +246,7 @@ func (wc *WebController) serveTemplate(tpl string, opts handlerOpts) httprouter.
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
err := wc.templates.Get().ExecuteTemplate(w, tpl, td)
|
err := wc.templates.Get().ExecuteTemplate(w, tpl, td)
|
||||||
if err != nil && !strings.Contains(err.Error(), "broken pipe") {
|
if err != nil && !isNetError(err) {
|
||||||
log.Error("Error executing template '%s': %s", tpl, err)
|
log.Error("Error executing template '%s': %s", tpl, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -258,7 +267,8 @@ 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
|
||||||
if err = wc.templates.Get().ExecuteTemplate(&tplBuf, tpl, tpld); err != nil {
|
err = wc.templates.Get().ExecuteTemplate(&tplBuf, tpl, tpld)
|
||||||
|
if err != nil && !isNetError(err) {
|
||||||
log.Error("Error executing template '%s': %s", tpl, err)
|
log.Error("Error executing template '%s': %s", tpl, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -299,7 +309,7 @@ func (wc *WebController) serveMarkdown(tpl string, opts handlerOpts) httprouter.
|
|||||||
|
|
||||||
// Execute the wrapper template
|
// Execute the wrapper template
|
||||||
err = wc.templates.Get().ExecuteTemplate(w, "markdown_wrapper", tpld)
|
err = wc.templates.Get().ExecuteTemplate(w, "markdown_wrapper", tpld)
|
||||||
if err != nil && !strings.Contains(err.Error(), "broken pipe") {
|
if err != nil && !isNetError(err) {
|
||||||
log.Error("Error executing template '%s': %s", tpl, err)
|
log.Error("Error executing template '%s': %s", tpl, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -374,7 +384,7 @@ func (wc *WebController) serveForm(
|
|||||||
}
|
}
|
||||||
|
|
||||||
err := wc.templates.Get().ExecuteTemplate(w, "form_page", td)
|
err := wc.templates.Get().ExecuteTemplate(w, "form_page", td)
|
||||||
if err != nil && !strings.Contains(err.Error(), "broken pipe") {
|
if err != nil && !isNetError(err) {
|
||||||
log.Error("Error executing form page: %s", err)
|
log.Error("Error executing form page: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -412,3 +422,11 @@ func (wc *WebController) captchaKey() string {
|
|||||||
|
|
||||||
return wc.captchaSiteKey
|
return wc.captchaSiteKey
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isNetError(err error) bool {
|
||||||
|
if _, ok := err.(*net.OpError); ok {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return strings.HasSuffix(err.Error(), "connection reset by peer") ||
|
||||||
|
strings.HasSuffix(err.Error(), "broken pipe")
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user