From 35ad0853f0deff43983dd706fef35c2cb22ff013 Mon Sep 17 00:00:00 2001
From: a <a@a.a>
Date: Tue, 30 Aug 2022 23:04:29 -0500
Subject: [PATCH] add original headers for connection to PeerInfo

---
 http.go      |  8 +++++++-
 server.go    |  3 +++
 websocket.go | 10 +++++++---
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/http.go b/http.go
index 24c62cb..e17a97d 100644
--- a/http.go
+++ b/http.go
@@ -282,8 +282,14 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	connInfo := PeerInfo{Transport: "http", RemoteAddr: r.RemoteAddr}
 	connInfo.HTTP.Version = r.Proto
 	connInfo.HTTP.Host = r.Host
-	connInfo.HTTP.Origin = r.Header.Get("Origin")
+	connInfo.HTTP.Origin = r.Header.Get("X-Real-Ip")
+	if connInfo.HTTP.Origin == "" {
+		connInfo.HTTP.Origin = r.Header.Get("X-Forwarded-For")
+	}
 	connInfo.HTTP.UserAgent = r.Header.Get("User-Agent")
+	// the headers used
+	connInfo.HTTP.Headers = r.Header
+
 	ctx := r.Context()
 	ctx = context.WithValue(ctx, peerInfoContextKey{}, connInfo)
 
diff --git a/server.go b/server.go
index 50d3560..99da306 100644
--- a/server.go
+++ b/server.go
@@ -3,6 +3,7 @@ package jrpc
 import (
 	"context"
 	"io"
+	"net/http"
 	"sync/atomic"
 
 	"git.tuxpa.in/a/zlog/log"
@@ -141,6 +142,8 @@ type PeerInfo struct {
 		UserAgent string
 		Origin    string
 		Host      string
+
+		Headers http.Header
 	}
 }
 
diff --git a/websocket.go b/websocket.go
index 052662b..76e6aee 100644
--- a/websocket.go
+++ b/websocket.go
@@ -120,6 +120,7 @@ func wsClientHeaders(endpoint, origin string) (string, http.Header, error) {
 	header := make(http.Header)
 	if origin != "" {
 		header.Add("origin", origin)
+		header.Add("X-Forwarded-For", origin)
 	}
 	if endpointURL.User != nil {
 		b64auth := base64.StdEncoding.EncodeToString([]byte(endpointURL.User.String()))
@@ -171,14 +172,17 @@ func newWebsocketCodec(ctx context.Context, c *websocket.Conn, host string, req
 		conn:      c,
 		pingReset: make(chan struct{}, 1),
 		info: PeerInfo{
-			Transport:  "ws",
-			RemoteAddr: conn.RemoteAddr().String(),
+			Transport: "ws",
 		},
 	}
 	// Fill in connection details.
 	wc.info.HTTP.Host = host
-	wc.info.HTTP.Origin = req.Get("Origin")
+	wc.info.HTTP.Origin = req.Get("X-Real-Ip")
+	if wc.info.HTTP.Origin == "" {
+		wc.info.HTTP.Origin = req.Get("X-Forwarded-For")
+	}
 	wc.info.HTTP.UserAgent = req.Get("User-Agent")
+	wc.info.HTTP.Headers = req
 	// Start pinger.
 	go heartbeat(ctx, c, wsPingInterval)
 	return wc
-- 
GitLab