Skip to content

Commit a1a1a6d

Browse files
committed
Merge pull request #43 from getlantern/issue-42
split host from RemoteAddr fixes #42
2 parents 42981d9 + c468983 commit a1a1a6d

2 files changed

Lines changed: 25 additions & 11 deletions

File tree

configserverfilter/headers.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package configserverfilter
55

66
import (
77
"errors"
8+
"net"
89
"net/http"
910

1011
"github.com/getlantern/golog"
@@ -69,7 +70,12 @@ next:
6970
func (f *ConfigServerFilter) attachHeader(req *http.Request) *http.Request {
7071
req.Header.Set(common.CfgSvrAuthTokenHeader, f.authToken)
7172
log.Debugf("Attached %s header to \"GET %s\"", common.CfgSvrAuthTokenHeader, req.URL.String())
72-
req.Header.Set(common.CfgSvrClientIPHeader, req.RemoteAddr)
73-
log.Debugf("Set %s as %s to \"GET %s\"", common.CfgSvrClientIPHeader, req.RemoteAddr, req.URL.String())
73+
host, _, err := net.SplitHostPort(req.RemoteAddr)
74+
if err != nil {
75+
log.Errorf("Unable to split host from '%s': %s", req.RemoteAddr, err)
76+
return req
77+
}
78+
req.Header.Set(common.CfgSvrClientIPHeader, host)
79+
log.Debugf("Set %s as %s to \"GET %s\"", common.CfgSvrClientIPHeader, host, req.URL.String())
7480
return req
7581
}

configserverfilter/headers_test.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,33 @@ func (h *dummyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
1818
func TestAttachAuthToken(t *testing.T) {
1919
fakeToken := "fake-token"
2020
dummyClientIP := "1.1.1.1"
21+
dummyAddr := dummyClientIP + ":12345"
2122
dummy := dummyHandler{}
2223
am, _ := New(&dummy, AuthToken(fakeToken), Domains([]string{"site1.com", "site2.org"}))
24+
2325
req, _ := http.NewRequest("GET", "http://site1.com/abc.gz", nil)
24-
req.RemoteAddr = dummyClientIP
26+
req.RemoteAddr = dummyAddr
27+
am.ServeHTTP(nil, req)
28+
assert.Equal(t, fakeToken, dummy.req.Header.Get(common.CfgSvrAuthTokenHeader), "should attach token")
29+
assert.Equal(t, dummyClientIP, dummy.req.Header.Get(common.CfgSvrClientIPHeader), "should attach client ip")
30+
31+
req, _ = http.NewRequest("GET", "http://site2.org/abc.gz", nil)
32+
req.RemoteAddr = dummyAddr
2533
am.ServeHTTP(nil, req)
26-
assert.Equal(t, fakeToken, dummy.req.Header.Get(common.CfgSvrAuthTokenHeader))
27-
assert.Equal(t, dummyClientIP, dummy.req.Header.Get(common.CfgSvrClientIPHeader))
34+
assert.Equal(t, fakeToken, dummy.req.Header.Get(common.CfgSvrAuthTokenHeader), "should attach token")
35+
assert.Equal(t, dummyClientIP, dummy.req.Header.Get(common.CfgSvrClientIPHeader), "should attach client ip")
2836

2937
req, _ = http.NewRequest("GET", "http://site2.org/abc.gz", nil)
30-
req.RemoteAddr = dummyClientIP
38+
req.RemoteAddr = "bad-addr"
3139
am.ServeHTTP(nil, req)
32-
assert.Equal(t, fakeToken, dummy.req.Header.Get(common.CfgSvrAuthTokenHeader))
33-
assert.Equal(t, dummyClientIP, dummy.req.Header.Get(common.CfgSvrClientIPHeader))
40+
assert.Equal(t, fakeToken, dummy.req.Header.Get(common.CfgSvrAuthTokenHeader), "should attach token")
41+
assert.Equal(t, "", dummy.req.Header.Get(common.CfgSvrClientIPHeader), "should not attach client ip if remote address is invalid")
3442

3543
req, _ = http.NewRequest("GET", "http://not-config-server.org/abc.gz", nil)
36-
req.RemoteAddr = dummyClientIP
44+
req.RemoteAddr = dummyAddr
3745
am.ServeHTTP(nil, req)
38-
assert.Equal(t, "", dummy.req.Header.Get(common.CfgSvrAuthTokenHeader))
39-
assert.Equal(t, "", dummy.req.Header.Get(common.CfgSvrClientIPHeader))
46+
assert.Equal(t, "", dummy.req.Header.Get(common.CfgSvrAuthTokenHeader), "should not attach token for other sites")
47+
assert.Equal(t, "", dummy.req.Header.Get(common.CfgSvrClientIPHeader), "should not attach client ip for other sites")
4048
}
4149

4250
func TestInitialize(t *testing.T) {

0 commit comments

Comments
 (0)