refactor(geoip): Open takes dir, derives canonical edition paths

Filenames are deterministic (<dir>/GeoLite2-City.mmdb,
<dir>/GeoLite2-ASN.mmdb) — callers no longer pass both paths. cmd/check-ip
drops its cityPath/asnPath locals and just hands the maxmind dir to
geoip.Open and the fetcher builder.
This commit is contained in:
AJ ONeal 2026-04-20 16:12:46 -06:00
parent 9b92136f91
commit 359b740cec
No known key found for this signature in database
2 changed files with 10 additions and 7 deletions

View File

@ -103,11 +103,9 @@ func main() {
} }
maxmind := filepath.Join(cfg.CacheDir, "maxmind") maxmind := filepath.Join(cfg.CacheDir, "maxmind")
cityPath := filepath.Join(maxmind, geoip.CityEdition+".mmdb") geoGroup := dataset.NewGroup(geoFetcher(cfg.ConfPath, maxmind))
asnPath := filepath.Join(maxmind, geoip.ASNEdition+".mmdb")
geoGroup := dataset.NewGroup(geoFetcher(cfg.ConfPath, cityPath, asnPath))
cfg.geo = dataset.Add(geoGroup, func() (*geoip.Databases, error) { cfg.geo = dataset.Add(geoGroup, func() (*geoip.Databases, error) {
return geoip.Open(cityPath, asnPath) return geoip.Open(maxmind)
}) })
if err := geoGroup.Load(context.Background()); err != nil { if err := geoGroup.Load(context.Background()); err != nil {
log.Fatalf("geoip: %v", err) log.Fatalf("geoip: %v", err)
@ -135,7 +133,9 @@ func main() {
// With a GeoIP.conf (explicit path or auto-discovered) both files are // With a GeoIP.conf (explicit path or auto-discovered) both files are
// downloaded via httpcache conditional GETs; otherwise the files are // downloaded via httpcache conditional GETs; otherwise the files are
// expected to exist on disk and are polled for out-of-band changes. // expected to exist on disk and are polled for out-of-band changes.
func geoFetcher(confPath, cityPath, asnPath string) dataset.Fetcher { func geoFetcher(confPath, dir string) dataset.Fetcher {
cityPath := filepath.Join(dir, geoip.CityEdition+".mmdb")
asnPath := filepath.Join(dir, geoip.ASNEdition+".mmdb")
if confPath == "" { if confPath == "" {
for _, p := range geoip.DefaultConfPaths() { for _, p := range geoip.DefaultConfPaths() {
if _, err := os.Stat(p); err == nil { if _, err := os.Stat(p); err == nil {

View File

@ -4,6 +4,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"net/netip" "net/netip"
"path/filepath"
"github.com/oschwald/geoip2-golang" "github.com/oschwald/geoip2-golang"
) )
@ -14,8 +15,10 @@ type Databases struct {
ASN *geoip2.Reader ASN *geoip2.Reader
} }
// Open opens city and ASN .mmdb files from the given paths. // Open opens <dir>/GeoLite2-City.mmdb and <dir>/GeoLite2-ASN.mmdb.
func Open(cityPath, asnPath string) (*Databases, error) { func Open(dir string) (*Databases, error) {
cityPath := filepath.Join(dir, CityEdition+".mmdb")
asnPath := filepath.Join(dir, ASNEdition+".mmdb")
city, err := geoip2.Open(cityPath) city, err := geoip2.Open(cityPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("open %s: %w", cityPath, err) return nil, fmt.Errorf("open %s: %w", cityPath, err)