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iZddiZdZe fddZdd	 Z	d
d Z
dd ZdS )sfp_crtzCertificate Transparency:Footprint,Investigate,Passive:Search Engines::Gather hostnames from historical certificates in crt.sh.verifyTz5Verify certificate subject alternative names resolve.Nc                 C   s4   || _ |  | _t| D ]}|| | j|< qd S )N)sftempStorageresultslistkeysopts)selfsfcuserOptsopt r   2/var/www/spiderfoot.crq.systems/modules/sfp_crt.pysetup    s    
zsfp_crt.setupc                 C   s   ddgS )NDOMAIN_NAMEINTERNET_NAMEr   r   r   r   r   watchedEvents(   s    zsfp_crt.watchedEventsc                 C   s   ddddddddgS )	NSSL_CERTIFICATE_RAWRAW_RIR_DATAr   INTERNET_NAME_UNRESOLVEDr   AFFILIATE_INTERNET_NAME"AFFILIATE_INTERNET_NAME_UNRESOLVEDAFFILIATE_DOMAIN_NAMEr   r   r   r   r   producedEvents.   s       zsfp_crt.producedEventsc                 C   s  |j }|j}|j}|| jkr d S d| j|< | jd| d |  dt| dd}| jjdtj	
| d| jd	 d
}|d d kr| jd|  d S zt|d }W n< tk
r } z| jdt|  W Y d S d }~X Y nX |d ks t|dkrd S tdt|| j|}	| |	 t }
t }|D ]}|d}|rP|
| |d}d|kr|d}|D ]}||dd qrn"|r2||kr2||dd q2| jd rt|dkr| jdttt| d  t|D ]}|| jkr
q| j|| jd s$q|  j|dddr@d}nd}| jd rz| j|sz| jd| d  |d7 }t||| j|}	| |	 | j|| jd r|drtd || j|}	| |	 ntd!|| j|}	| |	 qt|
D ]}|   r d S d"t|i}| jjdtj	
| d| jd	 d
}z| j!t|d }W nB tk
r } z"| jd#t|  W Y qW 5 d }~X Y nX td$|d% | j|}	| |	 qd S )&NTzReceived event, z, from z%.json)qoutputzhttps://crt.sh/?   
_useragent)timeout	useragentcontentz+No certificate transparency info found for z Error processing JSON response: r   r   id
name_value
z*. r   z
Resolving z domains ..._internettlds)includeChildrenincludeParentsr   r   zHost z could not be resolved_UNRESOLVED	AFFILIATEr   r   dzError parsing certificate: r   text)"	eventTypemoduledatar	   r   debugstrfetchUrlurllibparse	urlencoder   infor   loadsBaseExceptionlenr   __name__notifyListenersr
   getappendsplitreplaceset	validHost	getTargetmatchesresolveHostisDomain
startswithcheckForStop	parseCert)r   event	eventNamesrcModuleName	eventDataparamsresr4   eevtZcert_idsdomainsZ	cert_infocert_iddomainZdomsr0   evt_typecertr   r   r   handleEvent5   s    








 

 zsfp_crt.handleEvent)r?   
__module____qualname____doc__r   optdescsr	   dictr   r   r   r[   r   r   r   r   r      s     r   )r   urllib.parser8   sflibr   r   r   r   r   r   r   r   <module>   s   