5824: Move quoted-logging function to SDK.
authorTom Clegg <tom@curoverse.com>
Fri, 12 Jun 2015 05:53:05 +0000 (01:53 -0400)
committerTom Clegg <tom@curoverse.com>
Tue, 11 Aug 2015 00:26:41 +0000 (20:26 -0400)
sdk/go/httpserver/log.go [new file with mode: 0644]
services/arv-git-httpd/auth_handler.go

diff --git a/sdk/go/httpserver/log.go b/sdk/go/httpserver/log.go
new file mode 100644 (file)
index 0000000..7bee887
--- /dev/null
@@ -0,0 +1,23 @@
+package httpserver
+
+import (
+       "log"
+       "strings"
+)
+
+var escaper = strings.NewReplacer("\"", "\\\"", "\\", "\\\\", "\n", "\\n")
+
+// Log calls log.Println but first transforms strings so they are
+// safer to write in logs (e.g., 'foo"bar' becomes
+// '"foo\"bar"'). Non-string args are left alone.
+func Log(args ...interface{}) {
+       newargs := make([]interface{}, len(args))
+       for i, arg := range args {
+               if s, ok := arg.(string); ok {
+                       newargs[i] = "\"" + escaper.Replace(s) + "\""
+               } else {
+                       newargs[i] = arg
+               }
+       }
+       log.Println(newargs...)
+}
index ff1a1d5e9b13bc61d318596d24ad092a193712f9..741e543850709ca1f075751597778e0e7ef769d0 100644 (file)
@@ -57,7 +57,7 @@ func (h *authHandler) ServeHTTP(wOrig http.ResponseWriter, r *http.Request) {
                        passwordToLog = apiToken[0:10]
                }
 
-               log.Println(quoteStrings(r.RemoteAddr, passwordToLog, w.WroteStatus(), statusText, repoName, r.Method, r.URL.Path)...)
+               httpserver.Log(r.RemoteAddr, passwordToLog, w.WroteStatus(), statusText, repoName, r.Method, r.URL.Path)
        }()
 
        creds := auth.NewCredentialsFromHTTPRequest(r)
@@ -164,16 +164,3 @@ func (h *authHandler) ServeHTTP(wOrig http.ResponseWriter, r *http.Request) {
        handlerCopy.Env = append(handlerCopy.Env, "REMOTE_USER="+r.RemoteAddr) // Should be username
        handlerCopy.ServeHTTP(&w, r)
 }
-
-var escaper = strings.NewReplacer("\"", "\\\"", "\\", "\\\\", "\n", "\\n")
-
-// Transform strings so they are safer to write in logs (e.g.,
-// 'foo"bar' becomes '"foo\"bar"'). Non-string args are left alone.
-func quoteStrings(args ...interface{}) []interface{} {
-       for i, arg := range args {
-               if s, ok := arg.(string); ok {
-                       args[i] = "\"" + escaper.Replace(s) + "\""
-               }
-       }
-       return args
-}