U
    @6^$                     @   s0   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ddiZddiZe fddZdd Zd	d
 Z	dd Z
dd ZdS )
sfp_githubz^Github:Footprint,Passive:Social Media::Identify associated public code repositories on Github.	namesonlyTzYMatch repositories by name only, not by their descriptions. Helps reduce false positives.c                 C   s4   || _ |  | _t| D ]}|| | j|< qd S )N)sftempStorageresultslistkeysopts)selfsfcuserOptsopt r   5/var/www/spiderfoot.crq.systems/modules/sfp_github.pysetup   s    
zsfp_github.setupc                 C   s
   dddgS )NDOMAIN_NAMEUSERNAMESOCIAL_MEDIAr   r   r   r   r   watchedEvents&   s    zsfp_github.watchedEventsc                 C   s
   dddgS )NRAW_RIR_DATAGEOINFOPUBLIC_CODE_REPOr   r   r   r   r   producedEvents,   s    zsfp_github.producedEventsc                 C   s   d }| dd kr"| jd d S | dd kr@| jd d S | dd kr^| jd d S d|d  d d	 |d  d d
 |d  }|S )Nnamez+Incomplete Github information found (name).html_urlz*Incomplete Github information found (url).descriptionz2Incomplete Github information found (description).zName: 
zURL: zDescription: )getr   debug)r   item	repo_infor   r   r   buildRepoInfo0   s$    zsfp_github.buildRepoInfoc                 C   s  |j }|j}|j}|| jkr4| jd| d  d S d| j|< |dkrz0|dd }|dd dd	d
d	}W nJ tk
r } z,| j	d| d t
| d d W Y d S d }~X Y nX |dks| jd| d  d S z|d}|t|d  }	W n: tk
r< } z| jd|  W Y d S d }~X Y nX | jjd|	 | jd | jd d}
|
d d krrd S zt|
d }W n6 tk
r } z| jd W Y d S d }~X Y nX |ds| j|	d  d S |ds| j|	d  d S tdd|d  | j|}| | |d}|d kr6d S t|d k sRt|d!krf| jd"|  d S td#|| j|}| | d S |d$kr| j|| jd% }	|d&kr|}	| jd'|	  d}d(|	 }| jj|| jd | jd d}
|
d d kr| j	d)| d d}zt|
d }W n( tk
rH } zd }W 5 d }~X Y nX |d krj| j	d*|	 d d}|s|d+d,d,kst|d- dkr| jd.|	  d}|s
|d- D ]R}| |}|d kr| jd/ r|	|d krqtd0|| j|}| | qd}d1|	 }| jj|| jd | jd d}
|
d d krX| j	d)| d d}|sz2t|
d }|d kr| j	d*|	 d d}W n: tk
r } z| j	d2|	 d d}W 5 d }~X Y nX |s
|d+d,d,kst|d- dkr
| jd.|	  d}|s|d- D ]~}|d3d kr>| jd4 q|d3 }| jj|| jd | jd d}
|
d d kr| j	d)| d qzt|
d }W n< tk
r } z| j	d5d W Y qW 5 d }~X Y nX |d kr| j	d*|	 d q|D ]}t|tkr| jd6 q| |}|d kr| jd/ rP|d |	krPq|d&krxd|	 d |d7d	krxqtd0|| j|}| | qqd S )8NzAlready did a search for z, skipping.Tr   z: r      z<SFURL> z</SFURL>zUnable to parse SOCIAL_MEDIA: z ()FZGithubz!Skipping social network profile, z, as not a Github profile/zCouldn't get a username out of zhttps://api.github.com/users/_fetchtimeout
_useragent)timeout	useragentcontentzError processing JSON response.loginz is not a valid Github profiler   r   zPossible full name: location   d   z"Skipping likely invalid location: r   r   _internettldsr   zLooking at z-https://api.github.com/search/repositories?q=zUnable to fetch z2Unable to process empty response from Github for: Ztotal_count0itemszNo Github information for r   r   z&https://api.github.com/search/users?q=z4Unable to process invalid response from Github for: Z	repos_urlz0Incomplete Github information found (repos_url).z"Invalid JSON returned from Github.z8Encountered an unexpected or empty response from Github.r   )	eventTypemoduledatar	   r   r"   splitreplaceBaseExceptionerrorstrlenfetchUrlr   jsonloadsr!   r   __name__notifyListenersdomainKeywordr%   typedict)r   event	eventNamesrcModuleName	eventDatanetworkurlebitsr   resZ	json_datar0   failedretr#   r$   evtZrepretr   r   r   handleEventC   sJ   


"
"






$

 
$


$ zsfp_github.handleEventN)rB   
__module____qualname____doc__r   optdescsrF   r   r   r   r%   rS   r   r   r   r   r      s     r   )r@   sflibr   r   r   r   r   r   r   r   <module>   s   