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               @   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   s8   || _ | j | _x"t|j D ]}|| | j|< qW 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jd| d |  dt| dd}| jjdtj	j
| d| jd	 d
}|d d kr| jjd|  d S ytj|d }W n4 tk
r } z| jjdt|  d S d }~X nX |d kst|dkrd S tdt|| j|}	| j|	 t }
t }x|D ]}|jd}|rF|
j| |jd}d|kr|jd}xD|D ]}|j|jdd qjW n"|r(||kr(|j|jdd q(W | jd rt|dkr| jjdttt| d  xt|D ]}|| jkr
q| jj|| jd s$q| j j|dddr@d}nd}| jd r|| jj| r|| jjd| d  |d7 }t||| j|}	| j|	 | jj|| jd r|jdrtd || j|}	| j|	 ntd!|| j|}	| j|	 qW xt|
D ]}| j  rd S d"t|i}| jjdtj	j
| d| jd	 d
}y| jj!t|d }W n< tk
r } z| jjd#t|  wW Y d d }~X nX td$|d% | j|}	| j|	 qW d 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resr3   eevtZcert_idsdomainsZ	cert_infocert_iddomainZdomsr/   evt_typecertr   r   r   handleEvent5   s    










 

zsfp_crt.handleEvent)r>   
__module____qualname____doc__r   optdescsr	   dictr   r   r   rZ   r   r   r   r   r      s   r   )r   urllib.parser7   sflibr   r   r   r   r   r   r   r   <module>   s   