first commit

This commit is contained in:
thuanle
2024-07-13 23:58:47 +07:00
parent 5a47b94c85
commit 4bb5ee09f0
23 changed files with 650316 additions and 0 deletions

37
internal/data/ipdb.go Normal file
View File

@@ -0,0 +1,37 @@
package data
import (
"github.com/rs/zerolog/log"
"sync"
"thuanle.me/ip-info/configs"
)
import reader "github.com/oschwald/maxminddb-golang"
type IpDb struct {
r *reader.Reader
}
var (
ins *IpDb
once sync.Once
)
func Ins() *IpDb {
once.Do(func() {
ins = &IpDb{}
_ = ins.Reload()
})
return ins
}
func (d *IpDb) Reload() error {
r, err := reader.Open(configs.MmdbDbFile)
if err != nil {
log.Err(err).Msg("Failed to open mmdb")
return err
}
defer r.Close()
d.r = r
return nil
}

23
internal/data/query.go Normal file
View File

@@ -0,0 +1,23 @@
package data
import (
"fmt"
"net"
)
func (d *IpDb) Query(ipArg string) (map[string]any, *net.IPNet, error) {
ip := net.ParseIP(ipArg)
if ip == nil {
return nil, nil, fmt.Errorf("invalid IP: %s", ipArg)
}
// Get data of IP.
anyData := make(map[string]any)
recordNet, ok, err := d.r.LookupNetwork(ip, &anyData)
if err != nil {
return nil, nil, err
}
if !ok {
return nil, nil, fmt.Errorf("IP not found: %s", ipArg)
}
return anyData, recordNet, nil
}