From 7580c0c6410477b4d5864e2d1dfc26c380fb5290 Mon Sep 17 00:00:00 2001
From: Toby <tobyxdd@gmail.com>
Date: Mon, 11 Sep 2023 18:20:29 -0700
Subject: [PATCH] feat: log (debug) masquerade requests

---
 app/cmd/server.go | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/app/cmd/server.go b/app/cmd/server.go
index 2d20022..62b9f18 100644
--- a/app/cmd/server.go
+++ b/app/cmd/server.go
@@ -525,16 +525,15 @@ func (c *serverConfig) fillTrafficLogger(hyConfig *server.Config) error {
 }
 
 func (c *serverConfig) fillMasqHandler(hyConfig *server.Config) error {
+	var handler http.Handler
 	switch strings.ToLower(c.Masquerade.Type) {
 	case "", "404":
-		hyConfig.MasqHandler = http.NotFoundHandler()
-		return nil
+		handler = http.NotFoundHandler()
 	case "file":
 		if c.Masquerade.File.Dir == "" {
 			return configError{Field: "masquerade.file.dir", Err: errors.New("empty file directory")}
 		}
-		hyConfig.MasqHandler = http.FileServer(http.Dir(c.Masquerade.File.Dir))
-		return nil
+		handler = http.FileServer(http.Dir(c.Masquerade.File.Dir))
 	case "proxy":
 		if c.Masquerade.Proxy.URL == "" {
 			return configError{Field: "masquerade.proxy.url", Err: errors.New("empty proxy url")}
@@ -543,7 +542,7 @@ func (c *serverConfig) fillMasqHandler(hyConfig *server.Config) error {
 		if err != nil {
 			return configError{Field: "masquerade.proxy.url", Err: err}
 		}
-		hyConfig.MasqHandler = &httputil.ReverseProxy{
+		handler = &httputil.ReverseProxy{
 			Rewrite: func(r *httputil.ProxyRequest) {
 				r.SetURL(u)
 				// SetURL rewrites the Host header,
@@ -557,10 +556,11 @@ func (c *serverConfig) fillMasqHandler(hyConfig *server.Config) error {
 				w.WriteHeader(http.StatusBadGateway)
 			},
 		}
-		return nil
 	default:
 		return configError{Field: "masquerade.type", Err: errors.New("unsupported masquerade type")}
 	}
+	hyConfig.MasqHandler = &masqHandlerLogWrapper{H: handler}
+	return nil
 }
 
 // Config validates the fields and returns a ready-to-use Hysteria server config
@@ -669,3 +669,12 @@ func (l *serverLogger) UDPError(addr net.Addr, id string, sessionID uint32, err
 		logger.Error("UDP error", zap.String("addr", addr.String()), zap.String("id", id), zap.Uint32("sessionID", sessionID), zap.Error(err))
 	}
 }
+
+type masqHandlerLogWrapper struct {
+	H http.Handler
+}
+
+func (m *masqHandlerLogWrapper) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+	logger.Debug("masquerade request", zap.String("addr", r.RemoteAddr), zap.String("method", r.Method), zap.String("host", r.Host), zap.String("url", r.URL.String()))
+	m.H.ServeHTTP(w, r)
+}