mirror of https://github.com/1Panel-dev/1Panel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.2 KiB
52 lines
1.2 KiB
9 months ago
|
local geo = require "resty.maxminddb"
|
||
|
|
||
|
local pcall = pcall
|
||
|
|
||
|
local _M = {}
|
||
|
local geo_ip_file = "/usr/local/openresty/1pwaf/data/GeoIP.mmdb"
|
||
|
local black_ip_file = "/usr/local/openresty/1pwaf/data/BlackIP.mmdb"
|
||
|
|
||
|
function _M.init()
|
||
|
if not geo.initted() then
|
||
|
geo.init({
|
||
|
geo_ip = geo_ip_file,
|
||
|
black_ip = black_ip_file
|
||
|
})
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function _M.is_default_black_ip(ip)
|
||
|
local pass, res, err = pcall(geo.lookup, "black_ip", ip)
|
||
|
if not pass then
|
||
|
ngx.log(ngx.ERR, 'failed to lookup black ip,reason:', err)
|
||
|
elseif res and res['isBlack'] then
|
||
|
return true
|
||
|
end
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
function _M.lookup(ip)
|
||
|
local geo_res = {
|
||
|
iso = "",
|
||
|
country = "",
|
||
|
city = "",
|
||
|
longitude = 0,
|
||
|
latitude = 0,
|
||
|
province = ""
|
||
|
}
|
||
|
local pass, res, err = pcall(geo.lookup, "geo_ip", ip)
|
||
|
if not pass then
|
||
|
ngx.log(ngx.ERR, 'failed to lookup by ip,reason:', err)
|
||
|
elseif res and res['iso'] then
|
||
|
geo_res.iso = res['iso']
|
||
|
geo_res.country = res['country']
|
||
|
geo_res.province = res['province']
|
||
|
geo_res.longitude = res['longitude']
|
||
|
geo_res.latitude = res['latitude']
|
||
|
return geo_res
|
||
|
end
|
||
|
return geo_res
|
||
|
end
|
||
|
|
||
|
return _M
|