From 3d30102ade87df92808b9119ebec3fac8ce7a235 Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Sat, 24 Jun 2023 15:51:53 -0700 Subject: [PATCH] Bugfix on geogate --- pkg/config/geo_gate.go | 2 +- pkg/middleware/geo_gate.go | 42 +++++++++++++++++--------------------- pkg/utility/ip_address.go | 8 +++++++- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/pkg/config/geo_gate.go b/pkg/config/geo_gate.go index c017071..a134b50 100644 --- a/pkg/config/geo_gate.go +++ b/pkg/config/geo_gate.go @@ -16,5 +16,5 @@ var BlockUSStates = map[string]interface{}{ // Countries to block. var BlockCountries = map[string]interface{}{ - // "DE": nil, + // "US": nil, // TEST } diff --git a/pkg/middleware/geo_gate.go b/pkg/middleware/geo_gate.go index bdf3a94..83fe7ed 100644 --- a/pkg/middleware/geo_gate.go +++ b/pkg/middleware/geo_gate.go @@ -1,14 +1,11 @@ package middleware import ( - "fmt" "net" "net/http" - "strings" "code.nonshy.com/nonshy/website/pkg/config" "code.nonshy.com/nonshy/website/pkg/controller/index" - "code.nonshy.com/nonshy/website/pkg/log" "code.nonshy.com/nonshy/website/pkg/session" "code.nonshy.com/nonshy/website/pkg/utility" "github.com/oschwald/geoip2-golang" @@ -33,9 +30,8 @@ func GeoGate(handler http.Handler) http.Handler { defer db.Close() // If you are using strings that may be invalid, check that ip is not nil - addr := strings.SplitN(utility.IPAddress(r), ":", 2)[0] - ip := net.ParseIP(utility.IPAddress(r)) - log.Info("IP addr: %s (raw: %s)", ip, addr) + addr := utility.IPAddress(r) + ip := net.ParseIP(addr) if ip != nil { record, err := db.City(ip) if err != nil { @@ -43,8 +39,6 @@ func GeoGate(handler http.Handler) http.Handler { return } - log.Info("Raw: %+v", record) - // Blocked by US states if record.Country.IsoCode == "US" { for _, sub := range record.Subdivisions { @@ -66,21 +60,23 @@ func GeoGate(handler http.Handler) http.Handler { } // Debug info - fmt.Printf("Portuguese (BR) city name: %v\n", record.City.Names["pt-BR"]) - if len(record.Subdivisions) > 0 { - fmt.Printf("English subdivision name: %v\n", record.Subdivisions[0].Names["en"]) - } - fmt.Printf("Russian country name: %v\n", record.Country.Names["ru"]) - fmt.Printf("ISO country code: %v\n", record.Country.IsoCode) - fmt.Printf("Time zone: %v\n", record.Location.TimeZone) - fmt.Printf("Coordinates: %v, %v\n", record.Location.Latitude, record.Location.Longitude) - // Output: - // Portuguese (BR) city name: Londres - // English subdivision name: England - // Russian country name: Великобритания - // ISO country code: GB - // Time zone: Europe/London - // Coordinates: 51.5142, -0.0931 + /* + fmt.Printf("Portuguese (BR) city name: %v\n", record.City.Names["pt-BR"]) + if len(record.Subdivisions) > 0 { + fmt.Printf("English subdivision name: %v\n", record.Subdivisions[0].Names["en"]) + } + fmt.Printf("Russian country name: %v\n", record.Country.Names["ru"]) + fmt.Printf("ISO country code: %v\n", record.Country.IsoCode) + fmt.Printf("Time zone: %v\n", record.Location.TimeZone) + fmt.Printf("Coordinates: %v, %v\n", record.Location.Latitude, record.Location.Longitude) + // Output: + // Portuguese (BR) city name: Londres + // English subdivision name: England + // Russian country name: Великобритания + // ISO country code: GB + // Time zone: Europe/London + // Coordinates: 51.5142, -0.0931 + */ } handler.ServeHTTP(w, r) diff --git a/pkg/utility/ip_address.go b/pkg/utility/ip_address.go index 4438001..d176f7a 100644 --- a/pkg/utility/ip_address.go +++ b/pkg/utility/ip_address.go @@ -1,6 +1,7 @@ package utility import ( + "net" "net/http" "strings" @@ -19,5 +20,10 @@ func IPAddress(r *http.Request) string { return strings.SplitN(xff, " ", 1)[0] } } - return r.RemoteAddr + + ip, _, err := net.SplitHostPort(r.RemoteAddr) + if err != nil { + return r.RemoteAddr + } + return ip }