U
    @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   s@   || _ d| _|  | _d| _t| D ]}|| | j|< q(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}| |S )	Nz&https://neutrinoapi.com/phone-validatejsonr   r	   )output-formatnumberuser-id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}| |S )	Nzhttps://neutrinoapi.com/ip-infor"   r   r	   r#   ipr%   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}| |S )	Nz$https://neutrinoapi.com/ip-blocklistr"   r   r	   r2   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}| |S )	Nz'https://neutrinoapi.com/host-reputationr"   r   r	   )r#   hostr%   r&   r
   r'   r(   r+   r.   r   r   r   queryHostReputationT   s     z#sfp_neutrinoapi.queryHostReputationc              
   C   s   |d dkr$| j dd d| _d S |d d kr4d S zt|d }W n4 tk
rz } z| j d W Y d S d }~X Y nX |d dkr|d	r| j d
|d	 d d|d	krd| _d S n| 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   r0   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dd d| _d S | jd dkrv| jdd d| _d S d| j|< | jd| d	 |  |d
krX| 	|}|d kr| jd|  n|
dd k	rX|
dd k	rX|
d|
dkr|
d}n|
dd |
d }td|| j|}| | tdt|| j|}| | |dkr| |}|d kr| jd|  np|
dd k	r|
dd k	r|
dd k	r|
dd |
d d |
d }td|| j|}| | | |}|d kr| jd|  nL|
drjtdd| d | j|}| | tdt|| j|}| | | |}|d kr| jd|  nL|
drtdd| d | j|}| | tdt|| 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modulerA   r   r   r   r   r<   r?   r1   r@   r   __name__notifyListenersstrr4   r5   r7   )r   event	eventNamesrcModuleName	eventDatarA   rC   evtr   r   r   handleEventx   sj    



 




0&







zsfp_neutrinoapi.handleEvent)rG   
__module____qualname____doc__r   optdescsr   r   dictr   r   r!   r1   r4   r5   r7   r-   rO   r   r   r   r   r      s(   
			r   )r"   sflibr   r   r   r   r   r   r   r   <module>   s   