3
@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>   || _ | j | _d| _x"t|j D ]}|| | j|< q$W 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   s4  d| }| j d dkr^tjj tjt| j d d }|jd}|jd}|d| d | 7 }| jj|| j d	 d
d}|d dkrd S t }yjt	 }|d sd S xR|d j
dD ]@}	tjd|	tj}
x*|
D ]"}d|krq|j|}|j| qW qW |S  tk
r. } z| jjdt| d d S d }~X 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"   r#   r$   )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   s4     



zsfp_wikipediaedits.queryc             C   s   |j }|j}|j}| jjd| d |  || jkrL| jjd| d  d S d| j|< | j|}|d krld S x&|D ]}td|| j|}| j	| qrW d S )NzReceived event, z, from z	Skipping z as already mapped.Tr   )
	eventTypemoduledatar	   debugr   rB   r   __name__notifyListeners)r   event	eventNamesrcModuleName	eventDatarE   lrA   r   r   r   handleEventW   s    




zsfp_wikipediaedits.handleEvent)rG   
__module____qualname____doc__r   optdescsr   dictr   r   r   rB   rN   r   r   r   r   r      s   r   )	r'   r.   html.parserr   sflibr   r   r   r   r   r   r   r   <module>   s   