3
@6^                 @   s8   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               @   sj   e Zd ZdZddddZddddZ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S )sfp_fsecure_riddlerzF-Secure Riddler.io:Investigate,Footprint,Passive:Search Engines:apikey:Obtain network information from F-Secure Riddler.io API.T )verifyusernamepasswordzVerify host names resolvezF-Secure Riddler.io usernamezF-Secure Riddler.io passwordNFc             C   s8   || _ | j | _x"t|j D ]}|| | j|< qW d S )N)sftempStorageresultslistkeysopts)selfsfcuserOptsopt r   >/var/www/spiderfoot.crq.systems/modules/sfp_fsecure_riddler.pysetup$   s    
zsfp_fsecure_riddler.setupc             C   s   ddddgS )NDOMAIN_NAMEINTERNET_NAMEINTERNET_NAME_UNRESOLVED
IP_ADDRESSr   )r   r   r   r   watchedEvents+   s    z!sfp_fsecure_riddler.watchedEventsc          	   C   s   ddddddddd	g	S )
Nr   AFFILIATE_INTERNET_NAMEr   "AFFILIATE_INTERNET_NAME_UNRESOLVEDr   AFFILIATE_DOMAIN_NAMEr   PHYSICAL_COORDINATESRAW_RIR_DATAr   )r   r   r   r   producedEvents/   s
    z"sfp_fsecure_riddler.producedEventsc             C   s  | j d jdjd| j d jdjdd}ddi}| jjdtj||| j d	 | j d
 d}|d d krnd S ytj|d }W n4 tk
r } z| jj	dt
|  d S d }~X nX y|jdjdjd}W n   | jjdd d| _d S |s| jjdd d| _d S || _d S )Nr   raw_unicode_escapeasciir	   )emailr	   zContent-Typezapplication/jsonzhttps://riddler.io/auth/login
_useragent_fetchtimeout)postDataheaders	useragenttimeoutcontentz6Error processing JSON response from F-Secure Riddler: responseuserZauthentication_tokenzLogin failedFT)r   encodedecoder
   fetchUrljsondumpsloadsBaseExceptiondebugstrgeterror
errorStatetoken)r   paramsr(   resdataer:   r   r   r   login7   s6    zsfp_fsecure_riddler.loginc             C   s   d|j djdddi}| jdd}| jjdtj||| jd	 | jd
 d}tj	d |d dkr| jj
d|d  d d| _d S |d d krd S ytj|d }W n4 tk
r } z| jjdt|  d S d }~X nX | s| jjd|  d S |S )Nqueryr"   r#   replace)errorszapplication/json)zAuthentication-TokenzContent-Typezhttps://riddler.io/api/searchr%   r&   )r'   r(   r)   r*      code400401402403zUnexpected HTTP response code: FTr+   z6Error processing JSON response from F-Secure Riddler: zNo results found for )rE   rF   rG   rH   )r.   r/   r:   r
   r0   r1   r2   r   timesleepr8   r9   r3   r4   r5   r6   )r   qryr;   r(   r<   r=   r>   r   r   r   r@   `   s0    
zsfp_fsecure_riddler.queryc             C   sf  |j }|j}|j}| jrd S | jjd| d |  |dkrT| jjd| d  d S || jkrv| jjd| d  d S | jd d	ks| jd
 d	kr| jjdd d| _d S | j	s| j
  d| j|< d }|d(kr| jd| }n|dkr| jd| }|s| jjd|  d S tdt|| j|}| j| t }t }t }	x|D ]}
|
jd}|s\qD| j j|dddsvqD|j| |
jd}|r|j| |
jd}|rDt|dkrD|	jt|d d t|d   qDW | jd rt|dkr| jjdttt| d  xt|D ]}| j j|dddrDd}nd }| jd r| jj| r| jjd!| d"  |d#7 }t||| j|}| j| | jj|| jd$ r$|jd%rtd&|| j|}| j| ntd|| j|}| j| q$W x:t|D ].}| jj|rtd|| j|}| j| qW x,t|	D ] }td'|| j|}| j| q>W d S ))NzReceived event, z, from r   z	Ignoring z, from self.z	Skipping z as already mapped.r   r   r	   zIYou enabled sfp_fsecure_riddler but did not set an API username/password!FTr   r   zpld:r   zip:zNo results found for r    host)includeChildrenincludeParentsaddrZ
cordinates   r   z, rC   r   z
Resolving z domains ...r   zHost z could not be resolved_UNRESOLVED_internettlds	AFFILIATEr   r   )r   r   )	eventTypemoduler=   r9   r
   r5   r   r   r8   r:   r?   r@   infor   r6   __name__notifyListenersr   r7   	getTargetmatchesappendlensetresolveHostisDomain
startswithvalidIP)r   event	eventNamesrcModuleName	eventDatar=   r>   hostsaddrscoordsresultrL   rO   coordevt_typeevtr   r   r   handleEvent   s    








( 
zsfp_fsecure_riddler.handleEvent)rW   
__module____qualname____doc__r   optdescsr   r:   r9   dictr   r   r!   r?   r@   rm   r   r   r   r   r      s    )&r   )r1   rI   sflibr   r   r   r   r   r   r   r   <module>   s   