Pull request: home: print client ip after failed logins

Updates .

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:
Ainar Garipov 2021-04-06 14:31:20 +03:00
parent 2a43560176
commit 8746005d19
3 changed files with 176 additions and 33 deletions
internal/home

View file

@ -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())
}
})
}
}