3
@6^                 @   s@   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               @   sZ   e Zd ZdZdddZddd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_builtwithzBuiltWith:Footprint,Investigate,Passive:Search Engines:apikey:Query BuiltWith.com's Domain API for information about your target's web technology stack, e-mail addresses and more.    )api_keymaxagezBuiltwith.com Domain API key.zOThe maximum age of the data returned, in days, in order to be considered valid.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   8/var/www/spiderfoot.crq.systems/modules/sfp_builtwith.pysetup(   s
    
zsfp_builtwith.setupc             C   s   dgS )NDOMAIN_NAMEr   )r   r   r   r   watchedEvents4   s    zsfp_builtwith.watchedEventsc             C   s   ddddddgS )NINTERNET_NAME	EMAILADDRRAW_RIR_DATAWEBSERVER_TECHNOLOGYPHONE_NUMBERr   r   )r   r   r   r   producedEvents8   s    zsfp_builtwith.producedEventsc             C   s   d }d| d | j d  }| jj|| j d dd}|d dkrBd S |d	 sNd S ytj|d	 d
 d }W n6 tk
r } z| jjdt| d d S d }~X nX |S )Nz.https://api.builtwith.com/v11/api.json?LOOKUP=z&KEY=r   _fetchtimeoutr   )timeout	useragentcode404contentZResultsr   z3Error processing JSON response from builtwith.com: F)r   r
   fetchUrljsonloads	Exceptionerrorstr)r   treturlreser   r   r   query<   s    zsfp_builtwith.queryc             C   s  |j }|j}|j}| jrd S | jjd| d |  | jd dkrZ| jjdd d| _d S || jkr|| jjd| d	  d S d| j|< | j	|}|d krd S d
|krt
jd}|d
 jdg r4xp|d
 d D ]`}tdd|d  | j|}| j| |jdd rt
j||d rtd|d | j|}| j| qW |d
 jdg rx>|d
 d D ].}	t
j||	rTtd|	| j|}| j| qTW |d
 jdg rx0|d
 d D ] }
td|
| j|}| j| qW d|jdg krx
|d d D ]}|jddrZ|d d | }td|| j|}| j| | jj|| jd r^td|| j|}| j| nd }x|jdg D ]t}|r||}n|}ttj d d| jd   }|jd d!|k r| jjd" qltd#|d | j|}| j| qlW qW d S )$NzReceived event, z, from r   r   z5You enabled sfp_builtwith but did not set an API key!FTz	Skipping z as already mapped.Metaz:([\%a-zA-Z\.0-9_\-\+]+@[a-zA-Z\.0-9\-]+\.[a-zA-Z\.0-9\-]+)ZNamesr   zPossible full name: NameZEmailr   ZEmailsZ
Telephonesr   PathsZResultZ	SubDomain.r   _internettldsr   ZTechnologiesi  i \&r	   ZLastDetectedr   zData found too old, skipping.r   )	eventTypemoduledatar   r
   debugr   r*   r   r1   recompilegetr   __name__notifyListenersmatchisDomaininttime)r   event	eventNamesrcModuleName	eventDatar9   patnbr0   emailZphonephevr,   srcZagelimitr   r   r   handleEventS   sz    













zsfp_builtwith.handleEvent)r>   
__module____qualname____doc__r   optdescsr   r   dictr   r   r   r1   rO   r   r   r   r   r      s   r   )r'   rC   r;   sflibr   r   r   r   r   r   r   r   <module>   s   