70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
package external
|
|
|
|
import (
|
|
"fmt"
|
|
"go-account-register/models"
|
|
"go-account-register/utils"
|
|
"time"
|
|
)
|
|
|
|
func GetIpInfo(ip string) models.Ip {
|
|
db := utils.GetDB()
|
|
var ipInfo models.Ip
|
|
if ip == "" {
|
|
var ipRequest utils.IpRequest
|
|
res, err := ipRequest.IpApi(ip)
|
|
if err != nil {
|
|
}
|
|
resIp := db.Model(&models.Ip{}).Where("query = ?", res.Query).First(&ipInfo)
|
|
if resIp.Error != nil {
|
|
createIp(res)
|
|
db.Model(&models.Ip{}).Where("query = ?", res.Query).First(&ipInfo)
|
|
return ipInfo
|
|
}
|
|
return ipInfo
|
|
}
|
|
resIp := db.Model(&models.Ip{}).Where("query = ?", ip).First(&ipInfo)
|
|
if resIp.Error != nil {
|
|
var ipRequest utils.IpRequest
|
|
res, err := ipRequest.IpApi(ip)
|
|
if err != nil {
|
|
}
|
|
createIp(res)
|
|
db.Model(&models.Ip{}).Where("query = ?", ip).First(&ipInfo)
|
|
return ipInfo
|
|
}
|
|
|
|
return ipInfo
|
|
}
|
|
|
|
func createIp(res utils.IPAPIResponse) {
|
|
db := utils.GetDB()
|
|
|
|
db.Model(&models.Ip{}).Create(&models.Ip{
|
|
As: res.As,
|
|
Asname: res.Asname,
|
|
City: res.City,
|
|
Continent: res.Continent,
|
|
ContinentCode: res.ContinentCode,
|
|
Country: res.Country,
|
|
CountryCode: res.CountryCode,
|
|
Currency: res.Currency,
|
|
District: res.District,
|
|
Hosting: utils.BoolToInt(res.Hosting),
|
|
Isp: res.Isp,
|
|
Lat: fmt.Sprint(res.Lat),
|
|
Lon: fmt.Sprint(res.Lon),
|
|
Mobile: utils.BoolToInt(res.Mobile),
|
|
Offset: fmt.Sprint(res.Offset),
|
|
Org: res.Org,
|
|
Proxy: utils.BoolToInt(res.Proxy),
|
|
Query: res.Query,
|
|
Region: res.Region,
|
|
RegionName: res.RegionName,
|
|
Timezone: res.Timezone,
|
|
Zip: res.Zip,
|
|
UpdateTime: time.Now().Unix(),
|
|
CreateTime: time.Now().Unix(),
|
|
})
|
|
}
|