Sindbad~EG File Manager

Current Path : /proc/2191876/root/usr/libexec/kcare/python/kcarectl/__pycache__/
Upload File :
Current File : //proc/2191876/root/usr/libexec/kcare/python/kcarectl/__pycache__/fetch.cpython-36.pyc

3

��"h��@s�ddlZddlZddlZddlmZddlmZddlmZddlmZddlmZddlm	Z	dd	lm
Z
ddlZe
je
j
gZd
ZdZdZddd�Zdd�Zdd�Zeje	je	j�ddd�ddd��ZGdd�de�Zejdd��Zdd�ZdS) �N�)�utils)�auth)�selinux)�
http_utils)�config)�errors)�	constantsz/usr/bin/gpgz/var/lib/kcare/gpgzrelease.content.jsonFc	Cs�tj}|rtj}tjr&tddd�}nt}xT|D]L}y|||�}PWq0tjk
rz}z||dkrj|�WYdd}~Xq0Xq0W||}t	j
||�|S)Nr���r
)r�urlopenr�urlopen_authr�FORCE_JSON_SIG_V3�SIG_VERIFY_ORDERr�NotFoundr�save_to_file)	�url�dst�do_authZ
urlopen_localZsig_extsZsig_ext�	signatureZnfZsig_dst�r�+/usr/libexec/kcare/python/kcarectl/fetch.py�fetch_signatures 
rcCs tjjt�stjdjt���dS)Nz$No {0} present. Please install gnupg)�os�path�isfile�GPG_BINr�
KcareError�formatrrrr�
check_gpg_bin0srcCs�t�|jtj�rptjjtd�}ytj	|||�Wq�tj
k
rl}ztjdj
|t|����WYdd}~Xq�Xnxt|d��}|j�}WdQRXtjjtd�}ytj|||�Wn8tk
r�}ztjdj
|t|����WYdd}~XnXdS)a8
    Check a file signature using the gpg tool.
    If signature is wrong BadSignatureException will be raised.

    :param file_path: path to file which signature will be checked
    :param signature: a file with the signature
    :return: True in case of valid signature
    :raises: BadSignatureException
    zroot-keys.jsonzBad Signature: {0}: {1}N�rbz
kcare_pub.key)r�endswithr	�SIG_JSONrr�join�GPG_KEY_DIR�kcsig_verifyZverify�Errorr�BadSignatureExceptionr�str�open�readZrun_gpg_verify�	Exception)Z	file_pathrZ	root_keys�e�fZsigdataZkeyringrrr�check_gpg_signature5s
*r-�)�count�delaycCs^tj|�}tj|�}tj||�|r2|j||�n|rNt||dd�}t||�t	j
||�|S)NT)r)rrr�selinux_safe_tmpnamerr�checkrr-r�rename)rr�check_signature�hash_checker�response�tmprrrr�	fetch_urlTs


r8c@seZdZdd�Zdd�ZdS)�HashCheckercCs6||_tj|�jd�d|_tjtj|��d|_dS)N�/�files)	�content_filer�get_patch_server_url�rstrip�
url_prefix�json�loads�	read_file�hashes)�self�baseurlr<rrr�__init__eszHashChecker.__init__cCsr|t|j�d�}||jkr0tjdj||j���tjt	j
|��j�}|j|d}||krntjdj|||���dS)Nz3Invalid checksum: {0} not found in content file {1}�sha256z<Invalid checksum: {0} has invalid checksum {1}, expected {2})
�lenr?rCrrrr<�hashlibrGr�
read_file_bin�	hexdigestr&)rDr�fnameZcfnameZhshZexpected_hshrrrr2js
zHashChecker.checkN)�__name__�
__module__�__qualname__rFr2rrrrr9dsr9cCsjtjs
dS|jsdS|jt�}tjj|�s^ytt	j
|jt�|tj�Wntj
k
r\dSXt|j|�S)N)r�USE_CONTENT_FILE_V3rE�
cache_path�CONTENT_FILErr�existsr8rr=�
USE_SIGNATURErrr9)�levelrrrr�get_hash_checkerxs
rVcs�fdd�}|S)z=Enrish request with a cache key, and save it if responce had.cshtj�}|dk	r.d|kr i|d<||dtj<�||�}|jjtj�}|dk	rd||krdtjtj|�|S)N�headers)r�
get_cache_keyr	�CACHE_KEY_HEADERrW�get�atomic_write�CACHE_KEY_DUMP_PATH)�args�kwargs�	cache_key�respZ
new_cache_key)�clblrr�wrapper�s
z$wrap_with_cache_key.<locals>.wrapperr)rarbr)rar�wrap_with_cache_key�src)F)FN)rr@rI�rrrrrrr	r$�SIGr!rrr#rRrrr-�retry�	check_excr&r8�objectr9�cachedrVrcrrrr�<module>s,


Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists