kpcyrd/intelx-domain
function add_email(value)
debug({email=value})
db_add('email', {
value=value,
})
end
function add_domain(value)
debug({domain=value})
local psl_domain = psl_domain_from_dns_name(value)
local domain_id = db_add('domain', {
value=psl_domain,
})
if not domain_id then return end
return db_add('subdomain', {
domain_id=domain_id,
value=value,
})
end
function add_url(value)
debug({url=value})
local parts = url_parse(value)
local host = parts['host']
local subdomain_id = add_domain(parts['host'])
if not subdomain_id then return end
db_add('url', {
subdomain_id=subdomain_id,
value=value,
})
end
function run(arg)
local key = keyring('intelx')[1]
if not key then
return 'Missing required intelx access key'
end
local headers = {}
headers['x-key'] = key['access_key']
local session = http_mksession()
local req = http_request(session, 'POST', 'https://public.intelx.io/phonebook/search', {
headers=headers,
json={
term=arg['value'],
lookuplevel=0,
maxresults=10,
timeout=0,
datefrom="",
dateto="",
sort=4,
media=0,
},
})
local r = http_fetch_json(req)
if last_err() then return end
if r['status'] == 1 then
return 'invalid term used'
elseif r['status'] == 2 then
return 'reached the max number of concurrent connections for this api key'
elseif r['status'] > 0 then
return 'unknown status code: ' .. r['status']
end
debug({search=r})
local id = r['id']
local status = 3
while status == 3 or status == 0 do
req = http_request(session, 'GET', 'https://public.intelx.io/phonebook/search/result', {
query={
id=id,
},
headers=headers,
})
local r = http_fetch_json(req)
if last_err() then return end
status = r['status']
local selectors = r['selectors']
for i=1, #selectors do
local s = selectors[i]
if s['selectortype'] == 1 then
add_email(s['selectorvalue'])
elseif s['selectortype'] == 2 then
add_domain(s['selectorvalue'])
elseif s['selectortype'] == 3 then
add_url(s['selectorvalue'])
elseif s['selectortype'] == 23 then
add_url(s['selectorvalue'])
else
info({unknown=s})
end
end
sleep(1)
end
end