3
@6^                 @   s0   d dl Z d dlmZmZmZ G dd deZdS )    N)
SpiderFootSpiderFootPluginSpiderFootEventc               @   s~   e Zd ZdZddddZddddZdZd	Ze fd
dZ	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )sfp_neutrinoapizNeutrinoAPI:Footprint,Investigate,Passive:Reputation Systems:apikey:Search NeutrinoAPI for IP address info and check IP reputation.    )user_idapi_keytimeoutzNeutrinoAPI user ID.zNeutrinoAPI API key.zQuery timeout, in seconds.NFc             C   sD   || _ d| _| j | _d| _x"t|j D ]}|| | j|< q*W d S )NZNeutrinoAPIF)sf__dataSource__tempStorageresults
errorStatelistkeysopts)selfsfcuserOptsopt r   :/var/www/spiderfoot.crq.systems/modules/sfp_neutrinoapi.pysetup&   s    
zsfp_neutrinoapi.setupc             C   s   ddgS )N
IP_ADDRESSPHONE_NUMBERr   )r   r   r   r   watchedEvents0   s    zsfp_neutrinoapi.watchedEventsc             C   s
   dddgS )NRAW_RIR_DATAMALICIOUS_IPADDRGEOINFOr   )r   r   r   r   producedEvents4   s    zsfp_neutrinoapi.producedEventsc             C   s@   | j jdd|| jd | jd d| jd | jd d}| j|S )	Nz&https://neutrinoapi.com/phone-validatejsonr   r	   )zoutput-formatnumberzuser-idzapi-keyr
   
_useragent)postDatar
   	useragent)r   fetchUrlr   parseApiResponse)r   qryresr   r   r   queryPhoneValidate9   s    z"sfp_neutrinoapi.queryPhoneValidatec             C   s@   | j jdd|| jd | jd d| jd | jd d}| j|S )	Nzhttps://neutrinoapi.com/ip-infor!   r   r	   )zoutput-formatipzuser-idzapi-keyr
   r#   )r$   r
   r%   )r   r&   r   r'   )r   r(   r)   r   r   r   queryIpInfoB   s    zsfp_neutrinoapi.queryIpInfoc             C   s@   | j jdd|| jd | jd d| jd | jd d}| j|S )	Nz$https://neutrinoapi.com/ip-blocklistr!   r   r	   )zoutput-formatr+   zuser-idzapi-keyr
   r#   )r$   r
   r%   )r   r&   r   r'   )r   r(   r)   r   r   r   queryIpBlocklistK   s    z sfp_neutrinoapi.queryIpBlocklistc             C   s@   | j jdd|| jd | jd d| jd | jd d}| j|S )	Nz'https://neutrinoapi.com/host-reputationr!   r   r	   )zoutput-formathostzuser-idzapi-keyr
   r#   )r$   r
   r%   )r   r&   r   r'   )r   r(   r)   r   r   r   queryHostReputationT   s    z#sfp_neutrinoapi.queryHostReputationc             C   s   |d dkr$| j jdd d| _d S |d d kr4d S ytj|d }W n, tk
rr } z| j jd d S d }~X nX |d dkr|jd	r| j jd
|jd	 d d|jd	krd| _d S n| j jdd d S |S )Ncode403zAuthentication failedFTcontentzError processing JSON response.400zapi-error-msgzError: ZEXCEEDzError: HTTP 400)r   errorr   r!   loads	Exceptiondebugget)r   r)   dataer   r   r   r'   \   s(    
z sfp_neutrinoapi.parseApiResponsec             C   s  |j }|j}|j}| jrd S || jkr*d S | jd dkrP| jjdd d| _d S | jd dkrv| jjdd d| _d S d| j|< | jjd| d	 |  |d
krV| j	|}|d kr| jjd|  n|j
dd k	o|j
dd k	rV|j
d|j
dkr|j
d}n|j
dd |j
d }td|| j|}| j| tdt|| j|}| j| |dkr| j|}|d kr| jjd|  np|j
dd k	r|j
dd k	r|j
dd k	r|j
dd |j
d d |j
d }td|| j|}| j| | j|}|d kr| jjd|  nL|j
drhtdd| d | j|}| j| tdt|| j|}| j| | j|}|d kr| jjd|  nL|j
drtdd| d | j|}| j| tdt|| j|}| j| d S )Nr	   r   z7You enabled sfp_neutrinoapi but did not set an API key!FTr   z6You enabled sfp_neutrinoapi but did not set a user ID!zReceived event, z, from r   z No phone info results found for locationZcountryz, r   r   r   zNo IP info results found for ZcityZregionzcountry-codez"No IP blocklist results found for z	is-listedr   zNeutrinoAPI []z%No host reputation results found for )	eventTypemoduler9   r   r   r   r   r4   r7   r*   r8   r   __name__notifyListenersstrr,   r-   r/   )r   event	eventNamesrcModuleName	eventDatar9   r;   evtr   r   r   handleEventx   sj    








0&







zsfp_neutrinoapi.handleEvent)r?   
__module____qualname____doc__r   optdescsr   r   dictr   r   r    r*   r,   r-   r/   r'   rG   r   r   r   r   r      s$   
			r   )r!   sflibr   r   r   r   r   r   r   r   <module>   s   