diff options
author | Paul Nasrat <pnasrat@google.com> | 2014-08-07 11:22:15 +1000 |
---|---|---|
committer | Andrew Gerrand <adg@golang.org> | 2014-08-07 11:22:15 +1000 |
commit | 307baecee6ef4c1824ef9c39845ae6f12e4e037f (patch) | |
tree | 3bff37cafa05a89142c878db0987accc88af2a1a /content/context | |
parent | ce4d092e56cc72b8d7e5568bad5154e5deeface3 (diff) |
go.blog/context: userip support for IPv6 host/port.
Makes example usable on IPv6 systems eg where localhost is ::1.
Fixes golang/go#8486.
LGTM=adg
R=golang-codereviews, dave, adg
CC=golang-codereviews, sameer
https://golang.org/cl/117530044
Diffstat (limited to 'content/context')
-rw-r--r-- | content/context/userip/userip.go | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/content/context/userip/userip.go b/content/context/userip/userip.go index ba3851e..616dd04 100644 --- a/content/context/userip/userip.go +++ b/content/context/userip/userip.go @@ -6,15 +6,18 @@ import ( "fmt" "net" "net/http" - "strings" "code.google.com/p/go.net/context" ) // FromRequest extracts the user IP address from req, if present. func FromRequest(req *http.Request) (net.IP, error) { - s := strings.SplitN(req.RemoteAddr, ":", 2) - userIP := net.ParseIP(s[0]) + ip, _, err := net.SplitHostPort(req.RemoteAddr) + if err != nil { + return nil, fmt.Errorf("userip: %q is not IP:port", req.RemoteAddr) + } + + userIP := net.ParseIP(ip) if userIP == nil { return nil, fmt.Errorf("userip: %q is not IP:port", req.RemoteAddr) } |