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dZdd ZdS )
sfp_scyllazcScylla:Footprint,Investigate,Passive:Leaks, Dumps and Breaches::Gather breach data from Scylla API.      )pauseper_page	max_pagesz+Number of seconds to pause between fetches.z#Maximum number of results per page.z,Maximum number of pages of results to fetch.NFc             C   s>   || _ | j | _d| _x"t|j D ]}|| | j|< q$W d S )NF)sftempStorageresults
errorStatelistkeysopts)selfsfcuserOptsopt r   5/var/www/spiderfoot.crq.systems/modules/sfp_scylla.pysetup%   s
    
zsfp_scylla.setupc             C   s   dgS )NINTERNET_NAMEr   )r   r   r   r   watchedEvents.   s    zsfp_scylla.watchedEventsc             C   s   ddddgS )NEMAILADDR_COMPROMISEDPASSWORD_COMPROMISEDHASH_COMPROMISEDRAW_RIR_DATAr   )r   r   r   r   producedEvents2   s    zsfp_scylla.producedEventsr   c       	      C   s   d|j djddd t|t|d}ddi}| jjd	tjj| |d
| jd d}t	j
| jd  |d dkr| jjdd d| _d S |d d kr| jjd d S ytj|d }W n4 tk
r } z| jjdt|  d S d }~X nX |S )NzEmail:@raw_unicode_escapeasciireplace)errors)qnumfromAcceptzapplication/jsonzhttps://scylla.sh/search?   
_useragent)headerstimeout	useragentr   code200zSyclla.sh is having problems.FTcontentzNo response from Scylla.shz Error processing JSON response: )encodedecodestrr   fetchUrlurllibparse	urlencoder   timesleeperrorr   debugjsonloadsBaseException)	r   qryr	   startparamsr*   resdataer   r   r   query6   s,    zsfp_scylla.queryc             C   s  |j }|j}|j}|| jkr d S | jr*d S d| j|< | jjd| d |  d}t| jd }t| jd }t	 }t	 }	t	 }
x||| k r6| j
 rd S | jrP | j|||}|sd S ||7 }x`|D ]V}|jd}|sq|jd}|sqy|j jd	d
 }W n6 tk
r< } z| jjd|  wW Y d d }~X nX | j j|dddsf| jjd|  q|jd}|szd}|j|d | d  |jd}|r|jd}|r|	j|d | d | d | d  n|	j|d | d | d  |jd}|r|
j|d | d | d  qW t||k rP qW x,t|	D ] }td|| j|}| j| qBW x,t|D ] }td|| j|}| j| qpW x,t|
D ] }td|| j|}| j| qW d S )NTzReceived event, z, from r   r
   r	   _sourceEmail@   zEncountered strange result: )includeChildrenincludeParentszSkipped address: DomainUnknownz []ZPassHashZPassSalt:z (Salt: z) [ZPasswordr   r   r   )	eventTypemodulerB   r   r   r   r:   intr   r   checkForStoprD   getlowersplitr=   	getTargetmatchesappendlensetr   __name__notifyListeners)r   event	eventNamesrcModuleName	eventDatapositionr
   r	   emailshashesZ	passwordsrB   resultsourceemailmailDomrC   ZbreachZ	pass_hashZ	pass_saltpasswordevtr   r   r   handleEventY   s~    






(
"zsfp_scylla.handleEvent)r   r   )r[   
__module____qualname____doc__r   optdescsr   r   dictr   r   r   rD   rj   r   r   r   r   r      s   	
#r   )r;   r7   urllib.requestr4   urllib.parseurllib.errorsflibr   r   r   r   r   r   r   r   <module>   s   