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               @   sN   e Zd ZdZi Z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_numpiznumpi:Footprint,Investigate,Passive:Real World::Lookup USA/Canada phone number location and carrier information from numpi.com.NFc             C   sD   || _ d| _| j | _d| _x"t|j D ]}|| | j|< q*W d S )NZnumpiF)sf__dataSource__tempStorageresults
errorStatelistkeysopts)selfsfcuserOptsopt r   4/var/www/spiderfoot.crq.systems/modules/sfp_numpi.pysetup    s    
zsfp_numpi.setupc             C   s   dgS )NPHONE_NUMBERr   )r   r   r   r   watchedEvents*   s    zsfp_numpi.watchedEventsc             C   s
   dddgS )NRAW_RIR_DATAGEOINFOPROVIDER_TELCOr   )r   r   r   r   producedEvents.   s    zsfp_numpi.producedEventsc             C   s:  | j jd| | jd | jd d}tjd |d d krH| j jd d S |d d	krXd S tjd
|d tjtj	B }|szd S tjd|d tjtj	B }t
 }|r|d j }t|dk r||d< xvtjd|d D ]b}tjd|}t|dkrq|\}	}
|
jdrqt|	dkst|
dkr q|
j ||	jd< qW |S )Nzhttps://numpi.com/phone-info/_fetchtimeout
_useragent)timeout	useragent   contentzNo response from numpi.comcode200z,<table id="body_in_phone_info">(.+?)</table>z)<div class="body_in_phone_id">(.+?)</div>r   d   Namez<tr>(.+?)</tr>z<td>(.+?)</td>   zNot available*)r   fetchUrlr   timesleepdebugrefindall	MULTILINEDOTALLdictstriplen
startswith)r   qryrestableZ	name_htmldatanamerowcolskvr   r   r   query2   s>    
zsfp_numpi.queryc       
      C   s  |j }|j}|j}| jrd S || jkr*d S d| j|< | jjd| d |  |jdsj| jjd|  d S |jdj	dj	dj	dj	d	}|j
 s| jjd
|  d S | j|}|d kr| jjd|  d S tdt|| j|}| j| |jd}|rtd|| j|}| j| n| jjd|  djdd |jd|jd|jd|jdgD }	|	r~td|	| j|}| j| n| jjd|  d S )NTzReceived event, z, from z+1zUnsupported phone number: ()- zInvalid phone number: zNo phone information found for r   ZCarrierr   z!No carrier information found for z, c             S   s   g | ]}|r|qS r   r   ).0_fr   r   r   
<listcomp>   s    z)sfp_numpi.handleEvent.<locals>.<listcomp>ZCityZCountyStatezZIP Coder   z"No location information found for )	eventTypemoduler6   r
   r	   r   r*   r2   lstripr0   isdigitr<   r   str__name__notifyListenersgetjoin)
r   event	eventNamesrcModuleName	eventDatanumberr6   evtZcarrierlocationr   r   r   handleEvente   s@    


"


4zsfp_numpi.handleEvent)rJ   
__module____qualname____doc__r   optdescsr	   r
   r/   r   r   r   r<   rU   r   r   r   r   r      s   
3r   )r+   r(   sflibr   r   r   r   r   r   r   r   <module>   s   