]> Sergey Matveev's repositories - godlighty.git/commitdiff
Better URL escaping in output
authorSergey Matveev <stargrave@stargrave.org>
Fri, 15 Oct 2021 11:08:02 +0000 (14:08 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 15 Oct 2021 11:12:30 +0000 (14:12 +0300)
handler.go
rc/cgi.go
rc/example.cfg/proxied-host.go
rc/example.cfg/static.go
rc/redirect.go

index 4593a2f119262608082414f00e9da6713dd75260..8953a8060713f04cb3dbdd14df575afcb9ff5a02 100644 (file)
@@ -25,6 +25,7 @@ import (
        "io/ioutil"
        "log"
        "net/http"
+       "net/url"
        "os"
        "path"
        "strconv"
@@ -62,6 +63,13 @@ var (
        MainHandler Handler
 )
 
+func PathWithQuery(u *url.URL) string {
+       if u.RawQuery == "" {
+               return u.EscapedPath()
+       }
+       return u.EscapedPath() + "?" + u.RawQuery
+}
+
 type Handler struct{}
 
 func (h Handler) Handle(
@@ -70,7 +78,7 @@ func (h Handler) Handle(
 ) {
        notFound := func() {
                fmt.Printf("%s %s \"%s %+q %s\" %d \"%s\"\n",
-                       r.RemoteAddr, host, r.Method, r.URL.Path, r.Proto,
+                       r.RemoteAddr, host, r.Method, PathWithQuery(r.URL), r.Proto,
                        http.StatusNotFound,
                        r.Header.Get("User-Agent"),
                )
@@ -91,7 +99,7 @@ func (h Handler) Handle(
        }
        printErr := func(code int, err error) {
                fmt.Printf("%s %s \"%s %+q %s\" %d \"%s\" %s\"%s\"\n",
-                       r.RemoteAddr, host, r.Method, r.URL.Path, r.Proto,
+                       r.RemoteAddr, host, r.Method, PathWithQuery(r.URL), r.Proto,
                        code, err.Error(),
                        username, r.Header.Get("User-Agent"),
                )
@@ -140,7 +148,7 @@ func (h Handler) Handle(
                wc := &CountResponseWriter{ResponseWriter: w}
                dav.ServeHTTP(wc, r)
                fmt.Printf("%s %s \"WebDAV %+q\" %d %d %s\"%s\"\n",
-                       r.RemoteAddr, host, r.URL.Path,
+                       r.RemoteAddr, host, PathWithQuery(r.URL),
                        wc.Status, wc.Size,
                        username, r.Header.Get("User-Agent"),
                )
@@ -149,7 +157,7 @@ func (h Handler) Handle(
 
        if !(r.Method == "" || r.Method == http.MethodGet) {
                fmt.Printf("%s %s \"%s %+q %s\" %d %s\"%s\"\n",
-                       r.RemoteAddr, host, r.Method, r.URL.Path, r.Proto,
+                       r.RemoteAddr, host, r.Method, PathWithQuery(r.URL), r.Proto,
                        http.StatusMethodNotAllowed,
                        username, r.Header.Get("User-Agent"),
                )
@@ -286,7 +294,7 @@ IndexLookup:
                w.WriteHeader(wr.status)
                w.Write(bufCompressed.Bytes())
                fmt.Printf("%s %s \"%s %+q %s\" %d %d %s\"%s\"\n",
-                       r.RemoteAddr, host, r.Method, r.URL.Path, r.Proto,
+                       r.RemoteAddr, host, r.Method, PathWithQuery(r.URL), r.Proto,
                        wr.status, size,
                        username, r.Header.Get("User-Agent"),
                )
@@ -294,7 +302,7 @@ IndexLookup:
        }
        wr := wc.(*CountResponseWriter)
        fmt.Printf("%s %s \"%s %+q %s\" %d %d %s\"%s\"\n",
-               r.RemoteAddr, host, r.Method, r.URL.Path, r.Proto,
+               r.RemoteAddr, host, r.Method, PathWithQuery(r.URL), r.Proto,
                wr.Status, wr.Size,
                username, r.Header.Get("User-Agent"),
        )
index e17935a795af8491957492564b24fc0bf48ea2db..cce9aeec6a18e03192f2a3caae020518cf257107 100644 (file)
--- a/rc/cgi.go
+++ b/rc/cgi.go
@@ -26,13 +26,13 @@ import (
 )
 
 func RunCGIAndLog(host string, w http.ResponseWriter, r *http.Request, h *cgi.Handler) {
-       wc := &godlighty.CountResponseWriter{ResponseWriter: w}
        if r.TLS != nil && len(r.TLS.PeerCertificates) > 0 {
                h.Env = append(h.Env, "TLSREMOTEDN="+r.TLS.PeerCertificates[0].Subject.String())
        }
+       wc := &godlighty.CountResponseWriter{ResponseWriter: w}
        h.ServeHTTP(wc, r)
        fmt.Printf("%s %s \"%s %+q %s\" %d %d \"%s\"\n",
-               r.RemoteAddr, host, r.Method, r.URL.Path, r.Proto,
+               r.RemoteAddr, host, r.Method, godlighty.PathWithQuery(r.URL), r.Proto,
                wc.Status, wc.Size,
                r.Header.Get("User-Agent"),
        )
index 5b61c4ddda343fae06699eee4d20a4ee380ca14e..a11f728b61cea2e4c5ca33deea457e3acf0cfabf 100644 (file)
@@ -20,8 +20,8 @@ func init() {
                                resp, err := http.DefaultClient.Do(r)
                                if err != nil {
                                        fmt.Printf("%s %s \"%s %+q %s\" %d \"%s\" \"%s\"\n",
-                                               r.RemoteAddr, host, r.Method, r.URL.Path, r.Proto,
-                                               http.StatusBadGateway, err.Error(),
+                                               r.RemoteAddr, host, r.Method, godlighty.PathWithQuery(r.URL),
+                                               r.Proto, http.StatusBadGateway, err.Error(),
                                                r.Header.Get("User-Agent"),
                                        )
                                        http.Error(w, err.Error(), http.StatusBadGateway)
@@ -36,8 +36,8 @@ func init() {
                                size, _ := io.Copy(w, resp.Body)
                                resp.Body.Close()
                                fmt.Printf("%s %s \"%s %+q %s\" %d %d \"%s\"\n",
-                                       r.RemoteAddr, host, r.Method, r.URL.Path, r.Proto,
-                                       resp.StatusCode, size,
+                                       r.RemoteAddr, host, r.Method, godlighty.PathWithQuery(r.URL),
+                                       r.Proto, resp.StatusCode, size,
                                        r.Header.Get("User-Agent"),
                                )
                                return true
index f1559c8281ca7fd681eb9beb13ffada727074252..3cbe3fb8a84392b1e0e5cca3233756a0d035aeca 100644 (file)
@@ -27,7 +27,6 @@ func addStaticWebDAVedDir(host, root string) {
        godlighty.Hosts[host].WebDAV = true
 }
 
-
 func init() {
        addStaticCfg("www.stargrave.org", "stargrave.org")
 
index 2039a076cd0e5f394d1e68f86ef97cebdcc2accd..677479f61560fbccc41fd6e1c586733542043a27 100644 (file)
@@ -20,6 +20,8 @@ package rc
 import (
        "fmt"
        "net/http"
+
+       "go.stargrave.org/godlighty"
 )
 
 func Redirect(
@@ -29,7 +31,7 @@ func Redirect(
 ) {
        http.Redirect(w, r, to, status)
        fmt.Printf("%s %s \"%s %+q %s\" %d \"%s\"\n",
-               r.RemoteAddr, host, r.Method, r.URL.Path, r.Proto,
+               r.RemoteAddr, host, r.Method, godlighty.PathWithQuery(r.URL), r.Proto,
                status, r.Header.Get("User-Agent"),
        )
 }