3
@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| _| j | _x"t|j D ]}|| | j|< q$W 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jdd d S |d
 dkr| jjdd d S ytj|d }W n4 tk
r } z| jjdt|  d S d }~X 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401zInvalid OpenCorporates API key.F403z-You are being rate-limited by OpenCorporates.contentz 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jdd d S |d	 dkr| jjdd d S ytj|d }W n4 tk
r } z| jjdt |  d S d }~X nX d|krd S |d S )Nz)https://api.opencorporates.com/companies//r	   r   ?_fetchtimeoutr   )r   r    r!   r"   zInvalid OpenCorporates API key.Fr#   z-You are being rate-limited by OpenCorporates.r$   z Error processing JSON response: r   )	r&   r   r
   r%   r'   r(   r)   r*   r+   )r   jurisdiction_codecompany_numberurlr-   r.   r/   r   r   r   retrieveCompanyDetailsU   s$    z)sfp_opencorporates.retrieveCompanyDetailsc             C   sT  |j d}|rt|dk s&t|dkr4| jjd nj|j drh|j dj d}|rh|j|sh|d| 7 }|jdd	}| jjd
|  td|| j|}| j	| |j d}|rxD|D ]<}|j d}|r| jjd|  td|| j|}| j	| qW |j d}	|	rPxL|	D ]D}
|
j d}|r| jjd|  tdd| | j|}| j	| qW 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
   r+   endswithreplaceinfor   __name__notifyListeners)r   companyZsevtlocationr9   r/   r<   Zprevious_namepr=   Zofficernr   r   r   extractCompanyDetailss   s:    









z(sfp_opencorporates.extractCompanyDetailsc             C   s>  |j }|j}|j}|| jkr4| jjd| d  d S d| j|< | jjd| d |  | j|d }|d kr| jjd|  d S |jd}|s| jjd|  d S x|D ]}|jd	}|sq|j |jd
j ksq| j	|| |jd}	|jd}
|
 s|	 rq| j
|	|
}|sq|jd	}|s*q| j	|| qW d S )Nz	Skipping z as already mapped.TzReceived event, z, from *zFound no results for 	companiesrF   r>   r4   r5   )	eventTypemoduler.   r   r
   r+   r0   r?   lowerrJ   r7   )r   event	eventNamesrcModuleName	eventDatar-   rL   crF   r4   r5   r   r   r   handleEvent   sD    







zsfp_opencorporates.handleEvent)rD   
__module____qualname____doc__r   optdescsr   dictr   r   r   r0   r7   rJ   rU   r   r   r   r   r      s   	!+r   )r(   sflibr   r   r   r   r   r   r   r   <module>   s   