3
@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   sD   || _ d| _| j | _d| _x"t|j D ]}|| | j|< q*W 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   st  |j dj dj d}|jdjddddd	| jd
 d}| jjdtjj| | jd | jd d}t	j
d |d d kr| jjd d S |d dkr| jjdd d| _d S |d dkr| jjdd d| _d S |d dkr| jjdd d| _d S ytj|d }W n6 tk
r> } z| jjdt|  d S d }~X nX |jdd k	rp| jjdt|j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debugr1   r   jsonloadsBaseExceptionstrget)r   qryr%   paramsresdataer   r   r   query5   sB    
zsfp_numverify.queryc             C   s\  |j }|j}|j}| jrd S | jd dkrB| jjdd d| _d S || jkrPd S d| j|< | jjd| d |  | j	|}|d kr| jjd|  d S t
d	t|| j|}| j| |jd
d k	rdjdd |jd|jd
gD }t
d|| j|}| j| n| jjd|  |jdd k	rHt
d|jd| j|}| j| n| j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modulerD   r   r   r   r1   r   r;   rF   r   r?   __name__notifyListenersr@   join)r   event	eventNamesrcModuleName	eventDatarD   evtrJ   r   r   r   handleEventf   s8    



$zsfp_numverify.handleEvent)rN   
__module____qualname____doc__r   optdescsr   r   dictr   r   r   rF   rV   r   r   r   r   r      s   
1r   )r<   urllib.requestr6   urllib.parseurllib.errorr9   sflibr   r   r   r   r   r   r   r   <module>   s   