U
    @6^                     @   sP   d dl Z d dlZ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                   @   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_numverifyznumverify:Footprint,Investigate,Passive:Real World:apikey:Lookup phone number location and carrier information from numverify.com.api_key znumverify API key.NFc                 C   s@   || _ d| _|  | _d| _t| D ]}|| | j|< q(d S )NZ	numverifyF)sf__dataSource__tempStorageresults
errorStatelistkeysopts)selfsfcuserOptsopt r   8/var/www/spiderfoot.crq.systems/modules/sfp_numverify.pysetup"   s    
zsfp_numverify.setupc                 C   s   dgS )NPHONE_NUMBERr   r   r   r   r   watchedEvents,   s    zsfp_numverify.watchedEventsc                 C   s
   dddgS )NRAW_RIR_DATAGEOINFOPROVIDER_TELCOr   r   r   r   r   producedEvents0   s    zsfp_numverify.producedEventsc              
   C   s|  | d d d}|djddddd	| jd
 d}| jjdtj| | jd | jd d}t	
d |d d kr| jd d S |d dkr| jdd d| _d S |d dkr| jdd d| _d S |d dkr| jdd d| _d S zt|d }W n> tk
rF } z| jdt|  W Y d S d }~X Y nX |dd k	rx| jdt|d d d S |S )N+()raw_unicode_escapeasciireplace)errorsr   0r   )numbercountry_codeformatZ
access_keyz!http://apilayer.net/api/validate?_fetchtimeout
_useragent)timeout	useragent   contentzNo response from apilayer.netcode101zAPI error: invalid API keyFT102z#API error: user account deactivatedZ104zAPI error: usage limit exceededz Error processing JSON response: errorzAPI error: )stripencodedecoder   r   fetchUrlurllibparse	urlencodetimesleepdebugr2   r   jsonloadsBaseExceptionstrget)r   qryr&   paramsresdataer   r   r   query5   sF    
zsfp_numverify.queryc                 C   s\  |j }|j}|j}| jrd S | jd dkrB| jdd d| _d S || jkrPd S d| j|< | jd| d |  | 	|}|d kr| jd|  d S t
d	t|| j|}| | |d
d k	rddd |d|d
fD }t
d|| j|}| | n| jd|  |dd k	rHt
d|d| j|}| | n| jd|  d S )Nr   r   z5You enabled sfp_numverify but did not set an API key!FTzReceived event, z, from zNo phone information found for r   r'   z, c                 S   s   g | ]}|r|qS r   r   ).0_fr   r   r   
<listcomp>   s      z-sfp_numverify.handleEvent.<locals>.<listcomp>locationr   z"No location information found for carrierr   z!No carrier information found for )	eventTypemodulerE   r   r   r   r2   r   r<   rG   r   r@   __name__notifyListenersrA   join)r   event	eventNamesrcModuleName	eventDatarE   evtrK   r   r   r   handleEventf   s8    



$zsfp_numverify.handleEvent)rO   
__module____qualname____doc__r   optdescsr   r   dictr   r   r   rG   rW   r   r   r   r   r      s     
1r   )r=   urllib.requestr7   urllib.parseurllib.errorr:   sflibr   r   r   r   r   r   r   r   <module>   s   