U
    @6^n                     @   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                   @   sf   e Zd ZdZdddZddd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_opencorporateszmOpenCorporates:Passive,Footprint,Investigate:Search Engines::Look up company information from OpenCorporates.d    )
confidenceapi_keyzXConfidence that the search result objects are correct (numeric value between 0 and 100).zOpenCorporates.com API key.Nc                 C   s:   || _ d| _|  | _t| D ]}|| | j|< q"d S )NZOpenCorporates)sf__dataSource__tempStorageresultslistkeysopts)selfsfcuserOptsopt r   =/var/www/spiderfoot.crq.systems/modules/sfp_opencorporates.pysetup"   s
    
zsfp_opencorporates.setupc                 C   s   dgS )NCOMPANY_NAMEr   r   r   r   r   watchedEvents+   s    z sfp_opencorporates.watchedEventsc                 C   s
   dddgS )Nr   PHYSICAL_ADDRESSRAW_RIR_DATAr   r   r   r   r   producedEvents/   s    z!sfp_opencorporates.producedEventsc              
   C   s   d}| j d dks d| j d  }| jjd| d t| j d  | d| j d d	}|d
 dkrp| jdd d S |d
 dkr| jdd d S zt|d }W n< tk
r } z| jdt|  W Y d S d }~X Y nX d|krd S |d S )Nr   r	   z&api_token=z7https://api.opencorporates.com/v0.4/companies/search?q=z$&format=json&order=score&confidence=r   <   
_useragenttimeout	useragentcode401Invalid OpenCorporates API key.F403-You are being rate-limited by OpenCorporates.content Error processing JSON response: r   )	r   r
   fetchUrlstrerrorjsonloads	Exceptiondebug)r   qryZapiparamresdataer   r   r   searchCompany4   s:     z sfp_opencorporates.searchCompanyc              
   C   s   d| d t | }| jd dks4|d| jd  7 }| jj|| jd | jd d}|d	 d
krp| jdd d S |d	 dkr| jdd d S zt|d }W n< tk
r } z| jdt |  W Y d S d }~X Y nX d|krd S |d S )Nz)https://api.opencorporates.com/companies//r	   r   ?_fetchtimeoutr   r    r#   r$   r%   Fr&   r'   r(   r)   r   )	r+   r   r
   r*   r,   r-   r.   r/   r0   )r   jurisdiction_codecompany_numberurlr2   r3   r4   r   r   r   retrieveCompanyDetailsU   s$    z)sfp_opencorporates.retrieveCompanyDetailsc                 C   sL  | d}|rt|dk s&t|dkr4| jd nj| drh| d d}|rh||sh|d| 7 }|dd	}| jd
|  td|| j|}| 	| | d}|r|D ]<}| d}|r| jd|  td|| j|}| 	| q| d}	|	rH|	D ]D}
|
 d}|r| jd|  tdd| | j|}| 	| qd S )NZregistered_address_in_full   r   z!Skipping likely invalid location.Zregistered_addresscountryz, 
,zFound company address: r   previous_namesZcompany_namezFound previous company name: r   officersnamezFound company officer: r   zPossible full name: )
getlenr
   r0   endswithreplaceinfor   __name__notifyListeners)r   companyZsevtlocationr>   r4   rA   Zprevious_nameprB   Zofficernr   r   r   extractCompanyDetailss   s:    







z(sfp_opencorporates.extractCompanyDetailsc                 C   s4  |j }|j}|j}|| jkr4| jd| d  d S d| j|< | jd| d |  | |d }|d kr| jd|  d S |d}|s| jd|  d S |D ]}|d	}|sq| |d
 ksq| 	|| |d}	|d}
|
r|	sq| 
|	|
}|sq|d	}|s"q| 	|| qd S )Nz	Skipping z as already mapped.TzReceived event, z, from *zFound no results for 	companiesrK   rC   r9   r:   )	eventTypemoduler3   r   r
   r0   r5   rD   lowerrO   r<   )r   event	eventNamesrcModuleName	eventDatar2   rQ   crK   r9   r:   r   r   r   handleEvent   sD    






zsfp_opencorporates.handleEvent)rI   
__module____qualname____doc__r   optdescsr   dictr   r   r   r5   r<   rO   rZ   r   r   r   r   r      s   	!+r   )r-   sflibr   r   r   r   r   r   r   r   <module>   s   