Repository URL to install this package:
Version:
1.0.2-1.el8 ▾
|
local _M = { }
local util = require('resty.woothee.util')
local dataset = require('resty.woothee.dataset')
function _M.challenge_MSIE(ua, result)
if not string.find(ua, 'compatible; MSIE', 1, true) and not string.find(ua, 'Trident/', 1, true) and not string.find(ua, 'IEMobile/', 1, true) then
return false;
end
local version = dataset.VALUE_UNKNOWN;
local match, err
match, err = util.check_regex_single(ua, [[MSIE ([.0-9]+);]])
if match then
version = match[1]
else
local match1, err1 = util.check_regex_single(ua, [[Trident/([.0-9]+);]])
local match2, err2 = util.check_regex_single(ua, [[ rv:([.0-9]+)]])
if match1 and match2 then
version = match2[1]
else
match, err = util.check_regex_single(ua, [[IEMobile/([.0-9]+);]])
if match then
version = match[1]
end
end
end
util.update_map(result, dataset.get('MSIE'))
util.update_version(result, version)
return true;
end
function _M.challenge_safari_chrome(ua, result)
if not string.find(ua, 'Safari/', 1, true) then
return false
elseif string.find(ua, 'Chrome', 1, true) and string.find(ua, 'wv', 1, true) then
return false
elseif string.find(ua, 'Google Web Preview', 1, true) then
-- really????
return false
end
local version = dataset.VALUE_UNKNOWN;
local match_regex_list = {
"Edge/([.0-9]+)",
"Edg/([.0-9]+)",
"EdgiOS/([.0-9]+)",
"EdgA/([.0-9]+)"
}
for _, regex in ipairs(match_regex_list) do
local match, err = util.check_regex_single(ua, regex)
if match then
version = match[1]
util.update_map(result, dataset.get('Edge'))
util.update_version(result, version)
return true
end
end
local match, err = util.check_regex_single(ua, [[FxiOS/([.0-9]+)]])
if match then
version = match[1]
util.update_map(result, dataset.get('Firefox'))
util.update_version(result, version)
return true
end
local match_regex_list = {
"Chrome/([.0-9]+)",
"CrMo/([.0-9]+)",
"CriOS/([.0-9]+)"
}
for _, regex in ipairs(match_regex_list) do
local match, err = util.check_regex_single(ua, regex)
if match then
local match_ob, err = util.check_regex_single(ua, [[OPR/([.0-9]+)]])
if match_ob then
-- Opera w/ blink
version = match_ob[1]
util.update_map(result, dataset.get('Opera'))
util.update_version(result, version)
return true
end
-- Chrome
version = match[1]
util.update_map(result, dataset.get('Chrome'))
util.update_version(result, version)
return true
end
end
match, err = util.check_regex_single(ua, [[GSA/([.0-9]+)]])
if match then
version = match[1]
util.update_map(result, dataset.get('GSA'))
util.update_version(result, version)
return true
end
match, err = util.check_regex_single(ua, [[Version/([.0-9]+)]])
if match then
version = match[1]
end
util.update_map(result, dataset.get('Safari'))
util.update_version(result, version)
return true;
end
function _M.challenge_firefox(ua, result)
if not string.find(ua, 'Firefox/', 1, true) then
return false
end
local version = dataset.VALUE_UNKNOWN
local match, err = util.check_regex_single(ua, [[Firefox/([.0-9]+)]])
if match then
version = match[1]
end
util.update_map(result, dataset.get('Firefox'))
util.update_version(result, version)
return true
end
function _M.challenge_yandexbrowser(ua, result)
if not string.find(ua, 'YaBrowser/', 1, true) then
return false
end
local version = dataset.VALUE_UNKNOWN
local match, err = util.check_regex_single(ua, [[YaBrowser/(%d+%.%d+%.%d+%.%d+)]])
if match then
version = match[1]
end
util.update_map(result, dataset.get('YaBrowser'))
util.update_version(result, version)
return true
end
function _M.challenge_opera(ua, result)
if not string.find(ua, 'Opera', 1, true) then
return false
end
local version = dataset.VALUE_UNKNOWN
local match, err = util.check_regex_single(ua, [[Version/([.0-9]+)]])
if match then
version = match[1]
else
local match, err = util.check_regex_single(ua, [[Opera[/ ]([.0-9]+)]])
if match then
version = match[1]
end
end
util.update_map(result, dataset.get('Opera'))
util.update_version(result, version)
return true;
end
function _M.challenge_webview(ua, result)
local version = dataset.VALUE_UNKNOWN
if string.find(ua, 'Chrome', 1, true) and string.find(ua, 'wv', 1, true) then
local match, err = util.check_regex_single(ua, [[Version/([.0-9]+)]])
if match then
version = match[1]
end
util.update_map(result, dataset.get('Webview'))
util.update_version(result, version)
return true
end
local match_regex_list = {
"iPhone; (.*)like Mac OS X",
"iPad; (.*)like Mac OS X",
"iPod (.*)like Mac OS"
}
for _, regex in ipairs(match_regex_list) do
local match, err = util.check_regex_single(ua, regex)
if match then
if string.find(ua, 'Safari/', 1, true) then
return false
end
local match, err = util.check_regex_single(ua, [[Version/([.0-9]+)]])
if match then
version = match[1]
end
util.update_map(result, dataset.get('Webview'))
util.update_version(result, version)
return true
end
end
return false
end
function _M.challenge_sleipnir(ua, result)
if not string.find(ua, 'Sleipnir/', 1, true) then
return false
end
local version = dataset.VALUE_UNKNOWN
local match, err = util.check_regex_single(ua, [[Sleipnir/([.0-9]+)]])
if match then
version = match[1]
end
util.update_map(result, dataset.get('Sleipnir'))
util.update_version(result, version)
-- [[
-- Sleipnir's user-agent doesn't contain Windows version, so put 'Windows UNKNOWN Ver'.
-- Sleipnir is IE component browser, so for Windows only.
-- ]]
local win = dataset.get('Win')
util.update_category(result, win[dataset.KEY_CATEGORY])
util.update_os(result, win[dataset.KEY_NAME])
return true
end
function _M.challenge_vivaldi(ua, result)
if not string.find(ua, 'Vivaldi/', 1, true) then
return false
end
local version = dataset.VALUE_UNKNOWN
local match, err = util.check_regex_single(ua, [[Vivaldi/([.0-9]+)]])
if match then
version = match[1]
end
util.update_map(result, dataset.get('Vivaldi'))
util.update_version(result, version)
return true
end
function _M.challenge_samsung(ua, result)
if not string.find(ua, 'SamsungBrowser/', 1, true) then
return false
end
local version = dataset.VALUE_UNKNOWN
local match, err = util.check_regex_single(ua, [[SamsungBrowser/([.0-9]+)]])
if match then
version = match[1]
end
util.update_map(result, dataset.get('SamsungBrowser'))
util.update_version(result, version)
return true
end
return _M