aboutsummaryrefslogtreecommitdiff
path: root/content/context
diff options
context:
space:
mode:
authorPaul Nasrat <pnasrat@google.com>2014-08-07 11:22:15 +1000
committerAndrew Gerrand <adg@golang.org>2014-08-07 11:22:15 +1000
commit307baecee6ef4c1824ef9c39845ae6f12e4e037f (patch)
tree3bff37cafa05a89142c878db0987accc88af2a1a /content/context
parentce4d092e56cc72b8d7e5568bad5154e5deeface3 (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.go9
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)
}