mirror of
https://github.com/AdguardTeam/AdGuardHome.git
synced 2025-05-03 14:32:56 +03:00
Pull request: home: print client ip after failed logins
Updates #2824. Squashed commit of the following: commit 4457725b00b13b52e4fe99a59e7ef8036bb56276 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Tue Apr 6 14:23:12 2021 +0300 home: imp docs, spacing commit 7392cba8b3a32d874042805eb904af7455b1da9a Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Tue Apr 6 14:10:12 2021 +0300 home: print client ip after failed logins
This commit is contained in:
parent
2a43560176
commit
8746005d19
3 changed files with 176 additions and 33 deletions
internal/home
|
@ -4,7 +4,9 @@ import (
|
|||
"bytes"
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/textproto"
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
@ -212,3 +214,65 @@ func TestAuthHTTP(t *testing.T) {
|
|||
|
||||
Context.auth.Close()
|
||||
}
|
||||
|
||||
func TestRealIP(t *testing.T) {
|
||||
const remoteAddr = "1.2.3.4:5678"
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
header http.Header
|
||||
remoteAddr string
|
||||
wantErrMsg string
|
||||
wantIP net.IP
|
||||
}{{
|
||||
name: "success_no_proxy",
|
||||
header: nil,
|
||||
remoteAddr: remoteAddr,
|
||||
wantErrMsg: "",
|
||||
wantIP: net.IPv4(1, 2, 3, 4),
|
||||
}, {
|
||||
name: "success_proxy",
|
||||
header: http.Header{
|
||||
textproto.CanonicalMIMEHeaderKey("X-Real-IP"): []string{"1.2.3.5"},
|
||||
},
|
||||
remoteAddr: remoteAddr,
|
||||
wantErrMsg: "",
|
||||
wantIP: net.IPv4(1, 2, 3, 5),
|
||||
}, {
|
||||
name: "success_proxy_multiple",
|
||||
header: http.Header{
|
||||
textproto.CanonicalMIMEHeaderKey("X-Forwarded-For"): []string{
|
||||
"1.2.3.6, 1.2.3.5",
|
||||
},
|
||||
},
|
||||
remoteAddr: remoteAddr,
|
||||
wantErrMsg: "",
|
||||
wantIP: net.IPv4(1, 2, 3, 6),
|
||||
}, {
|
||||
name: "error_no_proxy",
|
||||
header: nil,
|
||||
remoteAddr: "1:::2",
|
||||
wantErrMsg: `getting ip from client addr: address 1:::2: ` +
|
||||
`too many colons in address`,
|
||||
wantIP: nil,
|
||||
}}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
r := &http.Request{
|
||||
Header: tc.header,
|
||||
RemoteAddr: tc.remoteAddr,
|
||||
}
|
||||
|
||||
ip, err := realIP(r)
|
||||
assert.Equal(t, tc.wantIP, ip)
|
||||
|
||||
if tc.wantErrMsg == "" {
|
||||
assert.NoError(t, err)
|
||||
} else {
|
||||
require.Error(t, err)
|
||||
assert.Equal(t, tc.wantErrMsg, err.Error())
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue