3
@6^                 @   sP   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               @   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S )sfp_darksearchz~Darksearch:Footprint,Investigate:Search Engines::Search the Darksearch.io Tor search engine for mentions of the target domain.T   )
fetchlinks	max_pages	fullnameszQFetch the darknet pages (via TOR, if enabled) to verify they mention your target.z,Maximum number of pages of results to fetch.zSearch for human names?NFc             C   sD   || _ d| _| j | _d| _x"t|j D ]}|| | j|< q*W d S )NZ
DarksearchF)sf__dataSource__tempStorageresults
errorStatelistkeysopts)selfsfcuserOptsopt r   9/var/www/spiderfoot.crq.systems/modules/sfp_darksearch.pysetup'   s    
zsfp_darksearch.setupc             C   s
   dddgS )NDOMAIN_NAME
HUMAN_NAME	EMAILADDRr   )r   r   r   r   watchedEvents0   s    zsfp_darksearch.watchedEventsc             C   s
   dddgS )NDARKNET_MENTION_URLDARKNET_MENTION_CONTENTSEARCH_ENGINE_WEB_CONTENTr   )r   r   r   r   producedEvents3   s    zsfp_darksearch.producedEventsc             C   s   d|j djddd d t|d}| jjdtjj| | jd | jd	 d
}t	j
d |d d krjd S ytj|d }W n4 tk
r } z| jjdt|  d S d }~X nX |S )N"raw_unicode_escapeasciireplace)errors)querypagez!https://darksearch.io/api/search?
_useragent_fetchtimeout)	useragenttimeout   contentz Error processing JSON response: )encodedecodestrr
   fetchUrlurllibparse	urlencoder   timesleepjsonloadsBaseExceptiondebug)r   qryr'   paramsresdataer   r   r   r&   7   s    
zsfp_darksearch.queryc             C   s  |j }|j}|j}| jd  r*|dkr*d S || jkr8d S d| j|< | jjd| d |  d}| jd }x||kr| j rd S | j||}|d krd S |d7 }|j	d}|d krd	}||k r|}|j	d
}	|	d krd S x6|	D ],}
|
d krqt
dt|
| j|}| j| |
j	d}|d kr&q|| jkr4q| jj|jdsJqd| j|< | jjd|  | jd r| jj|| jd | jd d}|d d kr| jjd| d  q||d kr| jjd| d |  qt
d|| j|}| j| y&|d j|d }|t| d }W n2 tk
rL } z| jjd wW Y d d }~X nX |d || }	t
dd|	 d | j|}| j| qt
d|| j|}| j| |
j	dd kr|
j	dd kr| jjd| d |  qt
dd|
j	d d  d |
j	d d | j|}| j| qW qlW d S )!Nr	   r   TzReceived event, z, from    r   	last_pager   r>   r   linkz.onionzFound a darknet mention: r   r)   r(   )r+   r*   r-   z	Ignoring z as no data returnedz as no mention of r   x      zString not found in content.r   z...titledescriptionzTitle: z

)	eventTypemoduler>   r   r   r
   r:   checkForStopr&   getr   r0   __name__notifyListenersurlFQDNendswithr1   indexlenr9   )r   event	eventNamesrcModuleName	eventDatar'   pagesr=   rA   r>   resultevtrB   
startIndexendIndexr?   r   r   r   handleEventO   s    











 "zsfp_darksearch.handleEvent)rK   
__module____qualname____doc__r   optdescsr   r   dictr   r   r    r&   rZ   r   r   r   r   r      s   	r   )r7   r5   urllib.requestr2   urllib.parseurllib.errorsflibr   r   r   r   r   r   r   r   <module>   s   