package reality
import (
"net"
"github.com/oschwald/geoip2-golang"
)
// GeoResolver performs GeoIP country lookups using a MaxMind MMDB file.
type GeoResolver struct {
reader *geoip2.Reader
}
// NewGeoResolver opens an MMDB file for country lookups.
// Returns nil resolver (not an error) if path is empty — callers get "N/A" for all lookups.
func NewGeoResolver(mmdbPath string) (*GeoResolver, error) {
if mmdbPath == "" {
return nil, nil
}
reader, err := geoip2.Open(mmdbPath)
if err != nil {
return nil, err
}
return &GeoResolver{reader: reader}, nil
}
// Lookup returns the ISO country code for an IP, or "N/A" if unavailable.
func (g *GeoResolver) Lookup(ip net.IP) string {
if g == nil || g.reader == nil {
return "N/A"
}
record, err := g.reader.Country(ip)
if err != nil || record.Country.IsoCode == "" {
return "N/A"
}
return record.Country.IsoCode
}
// Close releases the MMDB reader resources.
func (g *GeoResolver) Close() {
if g != nil && g.reader != nil {
g.reader.Close()
}
}