File: //usr/libexec/kcare/python/kcarectl/__pycache__/fetch.cpython-38.pyc
U
n�h: � @ s� d dl Z d dlZd dlZd dlZddlmZmZmZmZm Z m
Z
mZ ejej
gZdZdZdZddd �Zd
d� Zdd
� Zeje�ej�dd d�ddd��ZG dd� de�Zejdd� �Zdd� ZdS )� N� )�auth�config� constants�errors�
http_utils�selinux�utilsz/usr/bin/gpgz/var/lib/kcare/gpgzrelease.content.jsonFc C s� t j}|rtj}tjr&td d d� }nt}|D ]P}z|| | �}W q�W q. tjk
r| } z||d krl|�W 5 d }~X Y q.X q.|| }t �
||� |S )N���)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_signature s
r c C s t j�t�st�d�t���d S )Nz$No {0} present. Please install gnupg)�os�path�isfile�GPG_BINr �
KcareError�formatr r r r �
check_gpg_bin) s r c
C s� t � |�tj�rptj�td�}zt� || |� W q� tj
k
rl } zt�d�
| t|����W 5 d}~X Y q�X nxt|d��}|�� }W 5 Q R X tj�td�}zt�|| |� W n8 tk
r� } zt�d�
| t|����W 5 d}~X Y nX dS )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_JSONr r �join�GPG_KEY_DIR�kcsig_verifyZverify�Errorr �BadSignatureExceptionr �str�open�readZrun_gpg_verify� Exception)Z file_pathr Z root_keys�e�fZsigdataZkeyringr r r �check_gpg_signature. s
*r- � )�count�delayc C s^ t �| �}t�|�}t�||� |r2|�| |� n|rNt| |dd�}t||� t �
||� |S )NT)r )r r r �selinux_safe_tmpnamer r �checkr r- r �rename)r r Zcheck_signature�hash_checker�response�tmpr r r r � fetch_urlM s
r7 c @ s e Zd Zdd� Zdd� ZdS )�HashCheckerc C s6 || _ t�|��d�d | _t�t�|��d | _d S )N�/�files) �content_filer �get_patch_server_url�rstrip�
url_prefix�json�loads� read_file�hashes)�self�baseurlr; r r r �__init__^ s zHashChecker.__init__c C sr |t | j�d � }|| jkr0t�d�|| j���t�t �
|���� }| j| d }||krnt�d�|||���d S )Nz3Invalid checksum: {0} not found in content file {1}�sha256z<Invalid checksum: {0} has invalid checksum {1}, expected {2})
�lenr>