U
    @6^                     @   sX   d dl Z d dlZd dlZd dlZd dlZ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                   @   sN   e Zd ZdZi Zi ZdZdZe fddZ	dd Z
dd	 Zd
d Zdd ZdS )sfp_fringeprojectzpFringe Project:Investigate,Footprint,Passive:Search Engines::Obtain network information from Fringe Project API.NFc                 C   s4   || _ |  | _t| D ]}|| | j|< qd S )N)sftempStorageresultslistkeysopts)selfsfcuserOptsopt r   </var/www/spiderfoot.crq.systems/modules/sfp_fringeproject.pysetup    s    
zsfp_fringeproject.setupc                 C   s   ddgS )NDOMAIN_NAMEINTERNET_NAMEr   r   r   r   r   watchedEvents'   s    zsfp_fringeproject.watchedEventsc                 C   s   ddddddgS )Nr   LINKED_URL_INTERNALr   TCP_PORT_OPENSOFTWARE_USEDRAW_RIR_DATAr   r   r   r   r   producedEvents*   s
      z sfp_fringeproject.producedEventsc              
   C   s   d| djdddi}| jjdtj| | jd | jd d	}t	d
 |d d kr\d S zt
|d }W n< tk
r } z| jdt|  W Y d S d }~X Y nX |d}|s| jd|  d S |S )Nqraw_unicode_escapeasciireplace)errorsz)https://api.fringeproject.com/api/search?
_useragent_fetchtimeout)	useragenttimeout   contentz4Error processing JSON response from Fringe Project: r   No results found for )encodedecoder   fetchUrlurllibparse	urlencoder   timesleepjsonloadsBaseExceptiondebugstrget)r   qryparamsres	json_dataedatar   r   r   query.   s(     

zsfp_fringeproject.queryc                 C   sJ  |j }|j}|j}| jrd S | jd| d |  |dkrT| jd| d  d S || jkrv| jd| d  d S d| j|< | |}|s| jd	|  d S t	d
t
|| j|}| | t }|D ]}|d}	|	dkr| jd|	  q|d}
|
sq|	dkr2|  j|
ddds(q||
 |	dkr| j|
 }|  j|dddsdq|| t	d|
| j|}| | |d}|sq|D ]J}td|}t|dkrt	d|
d t
|d  | j|}| | qqt|D ]P}t	d|| j|}| | | j|| jd rt	d|| j|}| | qd S )NzReceived event, z, from r   z	Ignoring z, from self.z	Skipping z as already mapped.Tr'   r   type)urlhostnamezUnknown result data type: valuer?   )includeChildrenincludeParentsr>   r   tagsz^port:([0-9]+)r   r   :r   _internettldsr   )	eventTypemoduler;   
errorStater   r3   r   r<   infor   r4   __name__notifyListenersr	   r5   	getTargetmatchesappendurlFQDNlowerrefindalllensetisDomainr   )r   event	eventNamesrcModuleName	eventDatar;   r:   hostsresult	data_typer@   hostevtrC   tagportr   r   r   handleEventJ   sj    












 
zsfp_fringeproject.handleEvent)rJ   
__module____qualname____doc__r   optdescsr   rH   dictr   r   r   r<   ra   r   r   r   r   r      s   r   )r0   rQ   r.   urllib.requestr+   urllib.parseurllib.errorsflibr   r   r   r   r   r   r   r   <module>   s
   