openreplay/backend/internal/http/geoip/geoip.go
2022-06-06 14:13:24 +02:00

41 lines
630 B
Go

package geoip
import (
"log"
"net"
maxminddb "github.com/oschwald/maxminddb-golang"
)
type geoIPRecord struct {
Country struct {
ISOCode string `maxminddb:"iso_code"`
} `maxminddb:"country"`
}
type GeoIP struct {
r *maxminddb.Reader
}
func NewGeoIP(file string) *GeoIP {
r, err := maxminddb.Open(file)
if err != nil {
log.Fatalln(err)
}
return &GeoIP{r}
}
func (geoIP *GeoIP) ExtractISOCode(ip net.IP) string {
if ip == nil {
return "UN"
}
var code string
var record geoIPRecord
if geoIP.r.Lookup(ip, &record) == nil {
code = record.Country.ISOCode
}
if code == "" {
code = "UN"
}
return code
}