U
    @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:   || _ |  | _d| _t| D ]}|| | j|< q"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| djddd t|t|d}ddi}| jjd	tj| |d
| jd d}t	
| jd  |d dkr| jdd d| _d S |d d kr| jd d S zt|d }W n< tk
r } z| jdt|  W Y d S d }~X Y 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   s4     zsfp_scylla.queryc                 C   s  |j }|j}|j}|| jkr d S | jr*d S d| j|< | jd| d |  d}t| jd }t| jd }t	 }t	 }	t	 }
||| k r6| 
 rd S | jrq6| |||}|sd S ||7 }|D ]\}|d}|sq|d}|sqz| d	d
 }W n< tk
r< } z| jd|  W Y qW 5 d }~X Y nX |  j|dddsf| jd|  q|d}|szd}||d | d  |d}|r|d}|r|	|d | d | d | d  n|	|d | d | d  |d}|r|
|d | d | d  qt||k r~q6q~t|	D ] }td|| j|}| | q>t|D ] }td|| j|}| | qht|
D ] }td|| j|}| | qd 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modulerC   r   r   r   r;   intr   r   checkForStoprE   getlowersplitr>   	getTargetmatchesappendlensetr   __name__notifyListeners)r   event	eventNamesrcModuleName	eventDatapositionr
   r	   emailshashesZ	passwordsrC   resultsourceemailmailDomrD   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    rE   rk   r   r   r   r   r      s    	
#r   )r<   r8   urllib.requestr5   urllib.parseurllib.errorsflibr   r   r   r   r   r   r   r   <module>   s   