mirror of
https://github.com/skidoodle/ipinfo.git
synced 2025-02-15 08:29:17 +01:00
Update dependencies, enhance database handling, and improve request parsing
This commit is contained in:
parent
bc9f481717
commit
a36241f263
7 changed files with 157 additions and 162 deletions
48
db.go
48
db.go
|
@ -1,32 +1,70 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"sync"
|
||||
|
||||
"github.com/oschwald/maxminddb-golang"
|
||||
)
|
||||
|
||||
var cityDB *maxminddb.Reader
|
||||
var asnDB *maxminddb.Reader
|
||||
var dbMtx = new(sync.RWMutex)
|
||||
var (
|
||||
cityDB *maxminddb.Reader
|
||||
asnDB *maxminddb.Reader
|
||||
dbMtx = new(sync.RWMutex)
|
||||
)
|
||||
|
||||
const (
|
||||
cityDBPath = "./GeoLite2-City.mmdb"
|
||||
asnDBPath = "./GeoLite2-ASN.mmdb"
|
||||
)
|
||||
|
||||
func downloadDB() error {
|
||||
cmd := exec.Command("geoipupdate", "-d", "./")
|
||||
if err := cmd.Run(); err != nil {
|
||||
return fmt.Errorf("failed to download database: %v. Ensure geoipupdate is installed and configured", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func initDatabases() {
|
||||
var err error
|
||||
|
||||
dbMtx.Lock()
|
||||
defer dbMtx.Unlock()
|
||||
|
||||
cityDB, err = maxminddb.Open(cityDBPath)
|
||||
if err != nil {
|
||||
log.Fatalf("Error opening city database: %v", err)
|
||||
if os.IsNotExist(err) {
|
||||
log.Println("City database not found, attempting to download...")
|
||||
if errDownload := downloadDB(); errDownload != nil {
|
||||
log.Fatalf("Error downloading city database: %v", errDownload)
|
||||
}
|
||||
cityDB, err = maxminddb.Open(cityDBPath)
|
||||
if err != nil {
|
||||
log.Fatalf("Error opening city database after download: %v", err)
|
||||
}
|
||||
} else {
|
||||
log.Fatalf("Error opening city database: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
asnDB, err = maxminddb.Open(asnDBPath)
|
||||
if err != nil {
|
||||
log.Fatalf("Error opening ASN database: %v", err)
|
||||
if os.IsNotExist(err) {
|
||||
log.Println("ASN database not found, attempting to download...")
|
||||
if errDownload := downloadDB(); errDownload != nil {
|
||||
log.Fatalf("Error downloading ASN database: %v", errDownload)
|
||||
}
|
||||
asnDB, err = maxminddb.Open(asnDBPath)
|
||||
if err != nil {
|
||||
log.Fatalf("Error opening ASN database after download: %v", err)
|
||||
}
|
||||
} else {
|
||||
log.Fatalf("Error opening ASN database: %v", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue