X-Forward-For can return a list

This commit is contained in:
Vincent Batts 2015-09-28 17:03:07 -04:00
parent a7023cee3a
commit becd5526f5

View file

@ -63,19 +63,27 @@ func LogRequest(r *http.Request, statusCode int) {
r.ContentLength) r.ContentLength)
} }
func RealIP(r *http.Request) (ip string) { func RealIP(r *http.Request) string {
ip = r.RemoteAddr rip := RealIPs(r)
return rip[len(rip)]
}
func RealIPs(r *http.Request) (ips []string) {
ip := r.RemoteAddr
port_pos := strings.LastIndex(ip, ":") port_pos := strings.LastIndex(ip, ":")
if port_pos != -1 { if port_pos != -1 {
ip = ip[0:port_pos] ip = ip[0:port_pos]
} }
if ip != "" {
for k, v := range r.Header { ips = append(ips, ip)
if k == "X-Forwarded-For" {
ip = strings.Join(v, " ")
}
} }
return ip val := r.Header.Get("X-Forwarded-For")
if val != "" {
for _, ip := range strings.Split(val, ", ") {
ips = append(ips, ip)
}
}
return ips
} }