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                   @   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   s@   || _ d| _|  | _d| _t| D ]}|| | j|< q(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   s6  | j jd| | jd | jd d}td |d d krH| j d d S |d d	krXd S td
|d tjtj	B }|szd S td|d tjtj	B }t
 }|r|d  }t|dk r||d< td|d D ]b}td|}t|dkrq|\}	}
|
drqt|	dkst|
dkrq|
 ||	d< q|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   sH    
 
 
zsfp_numpi.queryc           
   	   C   s  |j }|j}|j}| jrd S || jkr*d S d| j|< | jd| d |  |dsj| jd|  d S |d	d	d	d	d	}|
 s| jd
|  d S | |}|d kr| jd|  d S tdt|| j|}| | |d}|rtd|| j|}| | n| jd|  ddd |d|d|d|dfD }	|	r~td|	| j|}| | n| 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moduler7   r
   r	   r   r+   r3   lstripr1   isdigitr=   r   str__name__notifyListenersgetjoin)
r   event	eventNamesrcModuleName	eventDatanumberr7   evtZcarrierlocationr   r   r   handleEvente   s@    


"


4zsfp_numpi.handleEvent)rK   
__module____qualname____doc__r   optdescsr	   r
   r0   r   r   r   r=   rV   r   r   r   r   r      s   
3r   )r,   r)   sflibr   r   r   r   r   r   r   r   <module>   s   