All checks were successful
continuous-integration/drone/push Build is passing
* removed unused columns in tables * added multithreaded support for ip scans * added health endpoint
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package models
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
|
|
"git.paulbsd.com/paulbsd/ipbl/src/config"
|
|
"xorm.io/xorm"
|
|
)
|
|
|
|
func GetIPsWithoutHostInfo(ctx *context.Context, config *config.Config) (apiips []string, err error) {
|
|
res, err := config.Db.Query(`
|
|
SELECT ip
|
|
FROM ip
|
|
WHERE ip NOT IN (
|
|
SELECT ip FROM host_info)
|
|
ORDER BY RANDOM()
|
|
LIMIT 10;`)
|
|
for _, r := range res {
|
|
apiips = append(apiips, string(r["ip"]))
|
|
}
|
|
return
|
|
}
|
|
|
|
func ProcessHostInfo(cfg *config.Config, hostinfos []HostInfo) (err error) {
|
|
session := cfg.Db.NewSession()
|
|
defer session.Close()
|
|
for _, hi := range hostinfos {
|
|
var i IP = HostInfoToIP(session, &hi)
|
|
i.GetOrCreate(session)
|
|
}
|
|
session.Commit()
|
|
return
|
|
}
|
|
|
|
func HostInfoToIP(session *xorm.Session, hi *HostInfo) (ip IP) {
|
|
ip = IP{
|
|
IP: hi.IP,
|
|
Rdns: sql.NullString{
|
|
String: hi.Rdns,
|
|
Valid: true},
|
|
City: &City{CityName: hi.City},
|
|
Country: &Country{CountryName: hi.Country},
|
|
AutonomousSystem: &AutonomousSystem{ID: 0},
|
|
}
|
|
return
|
|
}
|
|
|
|
type HostInfo struct {
|
|
IP string `json:"ip"`
|
|
Whois string `json:"whois"`
|
|
Rdns string `json:"rdns"`
|
|
City string `json:"city"`
|
|
Country string `json:"country"`
|
|
}
|