shmilylty/OneForAll

View on GitHub
modules/enrich.py

Summary

Maintainability
A
0 mins
Test Coverage
from modules import iscdn
from common import utils
from common.database import Database
from common.ipasn import IPAsnInfo
from common.ipreg import IpRegData


def get_ips(info):
    ip = info.get('ip')
    if not ip:
        return None
    ips = ip.split(',')
    return ips


def enrich_info(data):
    ip_asn = IPAsnInfo()
    ip_reg = IpRegData()
    for index, info in enumerate(data):
        ips = get_ips(info)
        if not ips:
            continue
        public = list()
        cidr = list()
        asn = list()
        org = list()
        addr = list()
        isp = list()
        for ip in ips:
            public.append(str(utils.ip_is_public(ip)))
            asn_info = ip_asn.find(ip)
            cidr.append(asn_info.get('cidr'))
            asn.append(asn_info.get('asn'))
            org.append(asn_info.get('org'))
            ip_info = ip_reg.query(ip)
            addr.append(ip_info.get('addr'))
            isp.append(ip_info.get('isp'))
        data[index]['public'] = ','.join(public)
        data[index]['cidr'] = ','.join(cidr)
        data[index]['asn'] = ','.join(asn)
        data[index]['org'] = ','.join(org)
        data[index]['addr'] = ','.join(addr)
        data[index]['isp'] = ','.join(isp)
    return data


class Enrich(object):
    def __init__(self, domain):
        self.domain = domain

    def get_data(self):
        db = Database()
        fields = ['url', 'cname', 'ip', 'public', 'cdn', 'header',
                  'cidr', 'asn', 'org', 'addr', 'isp']
        results = db.get_data_by_fields(self.domain, fields)
        return results.as_dict()

    def save_db(self, data):
        db = Database()
        for info in data:
            url = info.pop('url')
            info.pop('cname')
            info.pop('ip')
            info.pop('header')
            db.update_data_by_url(self.domain, info, url)
        db.close()

    def run(self):
        data = self.get_data()
        data = enrich_info(data)
        data = iscdn.do_check(data)
        self.save_db(data)