U
    @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   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_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 dd| j d ddd}ddi}| jjdt||| j d	 | j d
 d}|d d krnd S zt|d }W n< tk
r } z| j	dt
|  W Y d S d }~X Y nX z|ddd}W n"   | jdd d| _Y d S X |s| jdd d| _d S || _d S )Nr   raw_unicode_escapeasciir	   )emailr	   Content-Typeapplication/jsonzhttps://riddler.io/auth/login
_useragent_fetchtimeoutpostDataheaders	useragenttimeoutcontent6Error 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   s>     zsfp_fsecure_riddler.loginc              
   C   s   d| djdddi}| jdd}| jjdt||| jd	 | jd
 d}t	d |d dkr| j
d|d  d d| _d S |d d krd S zt|d }W n< tk
r } z| jdt|  W Y d S d }~X Y nX |s| jd|  d S |S )Nqueryr#   r$   replace)errorsr'   )zAuthentication-Tokenr&   zhttps://riddler.io/api/searchr(   r)   r*      code)400401402403zUnexpected HTTP response code: FTr/   r0   No results found for )r3   r4   r?   r
   r5   r6   r7   r   timesleepr=   r>   r8   r9   r:   r;   )r   qryr@   r,   rA   rB   rC   r   r   r   rE   `   s8     
zsfp_fsecure_riddler.queryc                 C   sT  |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 | jd d	ks| jd
 d	kr| jdd d| _d S | j	s| 
  d| j|< d }|dkr| d| }n|dkr| d| }|s| jd|  d S tdt|| j|}| | t }t }t }	|D ]}
|
d}|sZqB|  j|dddstqB|| |
d}|r|| |
d}|rBt|dkrB|	t|d d t|d   qB| jd rt|dkr| jdttt| d  t|D ]}|  j|dddr>d}nd }| jd rx| j|sx| jd!| d"  |d#7 }t||| j|}| | | j|| jd$ r|d%rtd&|| j|}| | ntd'|| j|}| | qt|D ].}| j|rtd|| j|}| | qt|	D ] }td(|| j|}| | q.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!FT)r   r   zpld:r   zip:rN   r!   host)includeChildrenincludeParentsaddrZ
cordinates   r   z, rH   r   z
Resolving z domains ...r   r   zHost z could not be resolved_UNRESOLVED_internettlds	AFFILIATEr   r   r    )	eventTypemodulerB   r>   r
   r:   r   r   r=   r?   rD   rE   infor   r;   __name__notifyListenersr   r<   	getTargetmatchesappendlensetresolveHostisDomain
startswithvalidIP)r   event	eventNamesrcModuleName	eventDatarB   rC   hostsaddrscoordsresultrR   rU   coordevt_typeevtr   r   r   handleEvent   s    







& 
zsfp_fsecure_riddler.handleEvent)r]   
__module____qualname____doc__r   optdescsr   r?   r>   dictr   r   r"   rD   rE   rs   r   r   r   r   r      s$   )&r   )r6   rO   sflibr   r   r   r   r   r   r   r   <module>   s   