U
    @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:   || _ |  | _d| _t| D ]}|| | j|< q"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 zt|d	 d
 d }W n> tk
r } z | jdt| d W Y d S d }~X Y 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d| d |  | jd dkrZ| jdd d| _d S || jkr|| jd| d	  d S d| j|< | 	|}|d krd S d
|krt
d}|d
 dg r0|d
 d D ]`}tdd|d  | j|}| | |dd rt
||d rtd|d | j|}| | q|d
 dg r~|d
 d D ].}	t
||	rNtd|	| j|}| | qN|d
 dg r|d
 d D ] }
td|
| j|}| | qd|dg kr|d d D ]}|ddrJ|d d | }td|| j|}| | | j|| jd rNtd|| j|}| | nd }|dg D ]t}|rj|}n|}tt d d| jd   }|d d!|k r| jd" qZtd#|d | j|}| | qZqd 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   r2   recompilegetr   __name__notifyListenersmatchisDomaininttime)r   event	eventNamesrcModuleName	eventDatar:   patnbr1   emailZphonephevr-   srcZagelimitr   r   r   handleEventS   s    




 

   

 zsfp_builtwith.handleEvent)r?   
__module____qualname____doc__r   optdescsr   r   dictr   r   r    r2   rP   r   r   r   r   r      s   r   )r(   rD   r<   sflibr   r   r   r   r   r   r   r   <module>   s   