diff --git a/REQUIREMENTS b/REQUIREMENTS index 4799b39..bde8f24 100644 --- a/REQUIREMENTS +++ b/REQUIREMENTS @@ -8,3 +8,4 @@ pypssl redis pyeupi ipasn-redis +asnhistory diff --git a/modules/expansion/asn_history.py b/modules/expansion/asn_history.py new file mode 100755 index 0000000..9f1dbc4 --- /dev/null +++ b/modules/expansion/asn_history.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- + +import json +from asnhistory import ASNHistory + +misperrors = {'error': 'Error'} +mispattributes = {'input': ['asn'], 'output': ['freetext']} +moduleinfo = {'version': '0.1', 'author': 'Raphaƫl Vinot', + 'description': 'Query an ASN Description history service (https://github.com/CIRCL/ASN-Description-History.git)', + 'module-type': ['expansion', 'hover']} + +moduleconfig = ['host', 'port', 'db'] + + +def handler(q=False): + if q is False: + return False + request = json.loads(q) + if request.get('asn'): + toquery = request['asn'] + else: + misperrors['error'] = "Unsupported attributes type" + return misperrors + + if not request.get('config') and not (request['config'].get('host') and + request['config'].get('port') and + request['config'].get('db')): + misperrors['error'] = 'ASN description history configuration is missing' + return misperrors + + asnhistory = ASNHistory(host=request['config'].get('host'), + port=request['config'].get('port'), db=request['config'].get('db')) + + values = ['{} {}'.format(date.isoformat(), description) for date, description in asnhistory.get_all_descriptions(toquery)] + + if not values: + misperrors['error'] = 'Unable to find descriptions for this ASN' + return misperrors + return {'results': [{'types': mispattributes['output'], 'values': values}]} + + +def introspection(): + return mispattributes + + +def version(): + moduleinfo['config'] = moduleconfig + return moduleinfo