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                   @   sr   e Zd ZdZddddZdddZd	Ze Zd	Z	e fd
dZ
dd Zdd Zdd Zdd Zdd Zdd Zd	S )sfp_digitaloceanspacezDigital Ocean Space Finder:Footprint,Passive:Crawling and Scanning::Search for potential Digital Ocean Spaces associated with the target and attempt to list their contents.zSnyc3.digitaloceanspaces.com,sgp1.digitaloceanspaces.com,ams3.digitaloceanspaces.comztest,dev,web,beta,bucket,space,files,content,data,prod,staging,production,stage,app,media,development,-test,-dev,-web,-beta,-bucket,-space,-files,-content,-data,-prod,-staging,-production,-stage,-app,-media,-development   )	endpointssuffixes_maxthreadszBDifferent Digital Ocean locations to check where spaces may exist.z:List of suffixes to append to domains tried as space names)r   r   Nc                 C   sF   || _ t | _|  | _t | _t|	 D ]}|| | j
|< q.d S )N)sfdict	s3resultstempStorageresults	threadingLocklocklistkeysopts)selfsfcuserOptsopt r   @/var/www/spiderfoot.crq.systems/modules/sfp_digitaloceanspace.pysetup'   s    

zsfp_digitaloceanspace.setupc                 C   s   ddgS )NDOMAIN_NAMELINKED_URL_EXTERNALr   r   r   r   r   watchedEvents1   s    z#sfp_digitaloceanspace.watchedEventsc                 C   s   ddgS )NCLOUD_STORAGE_BUCKETCLOUD_STORAGE_BUCKET_OPENr   r   r   r   r   producedEvents7   s    z$sfp_digitaloceanspace.producedEventsc              	   C   s   | j j|dddd}|d dkrJ|d d ks8d|d krJ| j d	|  nPd
|d kr~| j |d d| j|< W 5 Q R X n| j d| j|< W 5 Q R X d S )N
   r   T)timeout	useragentnoLogcode)301302200contentNoSuchBucketzNot a valid bucket: ListBucketResultz<Key>r   )r
   fetchUrldebugr   countr   )r   urlresr   r   r   	checkSite:   s    

 zsfp_digitaloceanspace.checkSitec           	      C   s   t  }t | _d}d}g }|D ]T}|  r0 d S | jd|  |tjd| | j	|fd || 
  |d7 }q|rd}t D ]}|jdrd}q|sd}td qt| jS )	NTr   z!Spawning thread to check bucket: Zthread_sfp_digitaloceanspaces_)nametargetargs   Fg      ?)r   r   r   checkForStopr
   infoappendr   Threadr3   start	enumerater4   
startswithtimesleep)	r   siteListretrunningitsitefoundrtr   r   r   threadSitesH   s0     
z!sfp_digitaloceanspace.threadSitesc                 C   s   d}t  }t  }|D ]|}|| jd kr~| |}|d kr@|  S t | D ]&}|| rL||d t||   qLd}t  }|| |d7 }q|S )Nr   r	   :r7   )r   r   rI   r   r:   str)r   sitesrD   r2   rA   rF   datarB   r   r   r   
batchSitesh   s     


z sfp_digitaloceanspace.batchSitesc                 C   s  |j }|j}|j}|| jkr d S d| j|< | jd| d |  |dkr|d|krx| j|}td|| j|}| 	| d S |
dd| j|| jd	 g}t }|D ]n}	| jd
 dD ]X}
dg| jd d }|D ]8}|  r   d S |	| d |
 }d| }|| qqq| |}|D ]}|d}td|d d |d  | j|}| 	| |d dkr$td|d d |d  d |d  d | j|}| 	| q$d S )NTzReceived event, z, from r   z.digitaloceanspaces.comr    . _internettldsr   ,r   zhttps://rJ   r   r7      0r!   z: z files found.)	eventTypemodulerM   r   r
   r/   urlFQDNr   __name__notifyListenersreplacedomainKeywordr   r   splitr8   r:   rN   )r   event	eventNamesrcModuleName	eventDatabevttargetsurlsrE   er   sr1   rB   bucketr   r   r   handleEvent   sF    


 


 
& z!sfp_digitaloceanspace.handleEvent)rX   
__module____qualname____doc__r   optdescsr   r   r   r   r   r   r"   r3   rI   rN   rh   r   r   r   r   r      s$   
 r   )r   r?   sflibr   r   r   r   r   r   r   r   <module>   s   