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                   @   sV   e Zd ZdZddiZddi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_clearbitzClearbit:Footprint,Investigate,Passive:Search Engines:apikey:Check for names, addresses, domains and more based on lookups of e-mail addresses on clearbit.com.api_key zClearbit.com API key.NFc                 C   s:   || _ |  | _d| _t| D ]}|| | j|< q"d S )NF)sftempStorageresults
errorStatelistkeysopts)selfsfcuserOptsopt r   7/var/www/spiderfoot.crq.systems/modules/sfp_clearbit.pysetup#   s
    
zsfp_clearbit.setupc                 C   s   dgS )N	EMAILADDRr   r   r   r   r   watchedEvents/   s    zsfp_clearbit.watchedEventsc                 C   s   dddddgS )NRAW_RIR_DATAPHONE_NUMBERPHYSICAL_ADDRESSAFFILIATE_INTERNET_NAMEr   r   r   r   r   r   producedEvents3   s     zsfp_clearbit.producedEventsc           	   
   C   s   d }| j d }t|tkr$|d}d| }t|dd }dd|d d}| jj|| j d d	|d
}|d dkr| j	dd d S zt
|d }W n> tk
r } z | j	dt| d W Y d S d }~X Y nX |S )Nr   zutf-8z3https://person.clearbit.com/v2/combined/find?email=:zapplication/jsonzBasic )AcceptAuthorization_fetchtimeoutr   )timeout	useragentheaderscode200zQReturn code indicates no results or potential API key failure or exceeded limits.Fcontentz1Error processing JSON response from clearbit.io: )r   typestrencodebase64	b64encodedecoder   fetchUrlerrorjsonloads	Exception)	r   tretr   urltokenr$   reser   r   r   query7   s8    

 zsfp_clearbit.queryc                 C   s:  |j }|j}|j}| jrd S | jd dkrB| jdd d| _d S | jd| d |  || jkr|| jd| d	  d S d| j|< | 	|}|sd S z:d
|kr|d
 d d }t
dd| | j|}| | W n  tk
r   | jd Y nX zd|krd}d|d kr&||d d d 7 }d|d krH||d d d 7 }d|d krj||d d d 7 }d|d kr||d d d 7 }d|d kr||d d d 7 }d|d kr||d d 7 }t
d|| j|}| | W n" tk
r
   | jd Y nX zd|krd|d krV|d d D ] }	t
d|	| j|}| | q4d|d krd|d d kr|d d d D ] }
t
d|
| j|}| | qd |d d kr|d d d  D ] }t
d!|| j|}| | qd|d krd}d|d d kr(||d d d d 7 }d|d d krR||d d d d 7 }d|d d kr|||d d d d 7 }d|d d kr||d d d d 7 }d|d d kr||d d d d 7 }d|d d kr||d d d 7 }t
d|| j|}| | W n" tk
r4   | jd" Y nX d S )#Nr   r   z4You enabled sfp_clearbit but did not set an API key!FTzReceived event, z, from z	Skipping z as already mapped.ZpersonnameZfullNamer   zPossible full name: z!Unable to extract name from JSON.ZgeoZstreetNumberz, Z
streetNamecity
postalCodestatecountryr   z%Unable to extract location from JSON.ZcompanyZdomainAliasesr   sitephoneNumbersr   ZemailAddressesr   z!Unable to company info from JSON.)	eventTypemoduledatar   r   r   r/   debugr
   r9   r   __name__notifyListenersr2   )r   event	eventNamesrcModuleName	eventDatarC   r:   evtlocdpr8   r   r   r   handleEventV   s    



 

 zsfp_clearbit.handleEvent)rE   
__module____qualname____doc__r   optdescsr
   r   dictr   r   r   r9   rO   r   r   r   r   r      s     r   )r0   r+   sflibr   r   r   r   r   r   r   r   <module>   s   