U
    @6^                     @   sD   d dl Z d dlZd dlmZ d dlmZmZmZ G dd deZdS )    N)
HTMLParser)
SpiderFootSpiderFootPluginSpiderFootEventc                   @   sR   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d ZdS )sfp_wikipediaeditszWikipedia Edits:Footprint,Investigate,Passive:Secondary Networks::Identify edits to Wikipedia articles made from a given IP address or username.
days_limit365z;Maximum age of data to be considered valid (0 = unlimited).Nc                 C   s:   || _ |  | _d| _t| D ]}|| | j|< q"d S )NZ	Wikipedia)sftempStorageresults__dataSource__listkeysopts)selfsfcuserOptsopt r   =/var/www/spiderfoot.crq.systems/modules/sfp_wikipediaedits.pysetup%   s
    
zsfp_wikipediaedits.setupc                 C   s   ddgS )N
IP_ADDRESSUSERNAMEr   r   r   r   r   watchedEvents1   s    z sfp_wikipediaedits.watchedEventsc                 C   s   dgS )NWIKIPEDIA_PAGE_EDITr   r   r   r   r   producedEvents5   s    z!sfp_wikipediaedits.producedEventsc              
   C   s8  d| }| j d dkr^tj tjt| j d d }|d}|d}|d| d | 7 }| jj|| j d	 d
d}|d dkrd S t }zft	 }|d sW d S |d 
dD ]<}	td|	tj}
|
D ]"}d|krq||}|| qq|W S  tk
r2 } z | jdt| d W Y d S d }~X Y nX d S )NzAhttps://en.wikipedia.org/w/api.php?action=feedcontributions&user=r   0)daysz%Yz%mz&year=z&month=_fetchtimeoutr   )timeout	useragentcode)404403500content
z<link>(.*?)</link>zSpecial:Contributionsz*Error processing response from Wikipedia: F)r   datetimenow	timedeltaintstrftimer	   fetchUrlr   r   splitrefindall
IGNORECASEunescapeappend	Exceptionerrorstr)r   qryurldtymreslinksparserlinematchesder   r   r   query8   s6     


zsfp_wikipediaedits.queryc                 C   s   |j }|j}|j}| jd| d |  || jkrL| jd| d  d S d| j|< | |}|d krld S |D ]}td|| j|}| 	| qpd S )NzReceived event, z, from z	Skipping z as already mapped.Tr   )
	eventTypemoduledatar	   debugr   rC   r   __name__notifyListeners)r   event	eventNamesrcModuleName	eventDatarF   lrB   r   r   r   handleEventW   s"    


 zsfp_wikipediaedits.handleEvent)rH   
__module____qualname____doc__r   optdescsr   dictr   r   r   rC   rO   r   r   r   r   r      s     r   )	r(   r/   html.parserr   sflibr   r   r   r   r   r   r   r   <module>   s   