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               @   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>   || _ | j | _d| _x"t|j D ]}|| | j|< q$W 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$|jd}d| }tj|djd }dd|jd d}| jj|| j d d	|d
}|d dkr| jj	dd d S yt
j|d }W n6 tk
r } z| jj	dt| d d S d }~X 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   s*    


zsfp_clearbit.queryc             C   sF  |j }|j}|j}| jrd S | jd dkrB| jjdd d| _d S | jjd| d |  || jkr|| jjd| d	  d S d| j|< | j	|}|sd S y:d
|kr|d
 d d }t
dd| | j|}| j| W n  tk
r   | jjd Y nX yd|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|}| j| W n" tk
r
   | jjd Y nX yd|krd|d krZx0|d d D ] }	t
d|	| j|}| j| q6W d|d krd|d d krx4|d d d D ] }
t
d|
| j|}| j| qW d |d d krx4|d d d  D ] }t
d!|| j|}| j| qW d|d krd}d|d d kr4||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 d 7 }d|d d kr||d d d 7 }t
d|| j|}| j| W n" tk
r@   | j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
   r8   r   __name__notifyListenersr1   )r   event	eventNamesrcModuleName	eventDatarB   r9   evtlocdpr7   r   r   r   handleEventV   s    







zsfp_clearbit.handleEvent)rD   
__module____qualname____doc__r   optdescsr
   r   dictr   r   r   r8   rN   r   r   r   r   r      s   r   )r/   r*   sflibr   r   r   r   r   r   r   r   <module>   s   