HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/duplicity/backends/__pycache__/pcabackend.cpython-310.pyc
o

���`o1�@snddlmZddlZddlZddlmZddlmZddlmZddl	Z	Gdd�dej
j�Zej
�
de�dS)	�)�strN)�log)�util)�BackendExceptionc@sjeZdZdZdd�Zdd�Zdd�Zdd	�Zddd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zd
S)�
PCABackendz
    Backend for OVH PCA
    c
Cs(tjj�||�zddlm}ddlm}Wnty*}ztdt	|���d}~ww||_
||_i}dtj
vrLdtj
vrLtj
d|d<tj
d|d<n0d	tj
vrUtd
��dtj
vr^td��d
tj
vrgtd��tj
d	|d<tj
d|d<tj
d
|d<i}dtj
v�rtj
d|d<tj
ddk�rdtj
vr�|�dtj
di�dtj
vr�|�dtj
di�dtj
vr�|�dtj
di�dtj
vr�|�dtj
di�dtj
vr�|�dtj
di�dtj
vr�|�d tj
di�d!tj
vr�|�d"tj
d!i�d#tj
v�r|�d$tj
d#i�d%tj
v�r|�d&tj
d%i�nd'|d<dtj
v�r.tj
d|d<d%tj
v�r>|�d&tj
d%i�||d(<d|d)<||_d*d+�|j�d,�D�}|�d�|_|�rfd-d,�|�|_nd.|_d/}d0}	d}
z|d6i|j��|_|j�|j�}
Wn,|�y�Yn#t�y�}zt�d1|jjt	|�ftjj�WYd}~nd}~ww|
du�r�t�d2|j�zt |	|gg�}|jj!|j|d3�WdSt�y�}zt�d4|jjt	|�ftjj�WYd}~dSd}~ww|�r|
|	�"�|k�rt�d5|j|
|	�"�|f�dSdSdS)7Nr)�
Connection)�ClientExceptionzBPCA backend requires the python-swiftclient library.
Exception: %s�PCA_PREAUTHURL�PCA_PREAUTHTOKEN�
preauthurl�preauthtoken�PCA_USERNAMEz*PCA_USERNAME environment variable not set.�PCA_PASSWORDz*PCA_PASSWORD environment variable not set.�PCA_AUTHURLz)PCA_AUTHURL environment variable not set.�user�key�authurl�PCA_AUTHVERSION�auth_version�3�PCA_USER_DOMAIN_NAME�user_domain_name�PCA_USER_DOMAIN_ID�user_domain_id�PCA_PROJECT_DOMAIN_NAME�project_domain_name�PCA_PROJECT_DOMAIN_ID�project_domain_id�PCA_TENANTNAME�tenant_name�PCA_ENDPOINT_TYPE�
endpoint_type�
PCA_USERID�user_id�PCA_TENANTID�	tenant_id�PCA_REGIONNAME�region_name�2�
os_options�retriescSsg|]}|dkr|�qS)��)�.0�xr,r,�?/usr/lib/python3/dist-packages/duplicity/backends/pcabackend.py�
<listcomp>psz'PCABackend.__init__.<locals>.<listcomp>�/z%s/r+�PCAzX-Storage-Policy�Connection failed: %s %szCreating container %s)�headersz Container creation failed: %s %sz>Container '%s' exists but its storage policy is '%s' not '%s'.r,)#�	duplicity�backend�Backend�__init__�swiftclientrr�ImportErrorrr�resp_exc�conn_cls�os�environ�update�conn_kwargs�path�split�pop�	container�join�prefix�conn�head_container�	Exceptionr�
FatalError�	__class__�__name__�	ErrorCode�connection_failed�Info�dict�
put_container�lower)�self�
parsed_urlrr�er@r)�	url_parts�policy�
policy_header�container_metadatar4r,r,r/r8$s����









�����
����
��zPCABackend.__init__cCs&t||j�r|jdkrtjjSdSdS)Ni�)�
isinstancer;�http_statusrrM�backend_not_found)rS�	operationrUr,r,r/�_error_code�s

�zPCABackend._error_codecCs0|j�|j|jt�|�tt�|j�d��dS)N�rb)rG�
put_objectrDrFr�fsdecode�open�name)rS�source_path�remote_filenamer,r,r/�_put�s�zPCABackend._putcCsd|�t�|��}|r0tt�|j�d��}|D]}|�|�qWd�dS1s)wYdSdS)N�wb)�unsealrrarbrc�write)rSre�
local_path�body�f�chunkr,r,r/�_get�s�"��zPCABackend._getNcCs�|jj|jd|jdd�}|d}|r:|dd}|d�d�}|jj|j||d|jdd�d}|r8|d�|�|s|durEt||d�S|dS)	NFzpolicy_extra=true)�full_listingrA�query_string����rc�
version_id)�marker�version_markerrorArp)rG�
get_containerrDrF�get�extend�filter)rS�ffilter�rv�listingrtrur,r,r/�__list_objs�s&����zPCABackend.__list_objscs�fdd����D�S)Ncs(g|]}t�|dt�j�d���qS)rcN)r�fsencode�lenrF)r-�o�rSr,r/r0�s(z$PCABackend._list.<locals>.<listcomp>)�_PCABackend__list_objsr�r,r�r/�_list�szPCABackend._listcCs |j�|j|jt�|��dS�N)rG�
delete_objectrDrFrra)rS�filenamer,r,r/�_delete�s zPCABackend._deletecCs,|j�|j|jt�|��}dt|d�iS)N�sizezcontent-length)rG�head_objectrDrFrra�int)rSr��sobjectr,r,r/�_query�szPCABackend._queryc

Cs�z|jj|j|j|dd�\}}t�d|�|WS|jyo}zI|jdkrMt|j	d�}t
|d�\}}t
|d�\}}d|||f}	t�d||	f�nt�d	|jj
t|�ftjj�WYd}~dSWYd}~dSd}~ww)
Ni)�resp_chunk_sizez"File %s was successfully unsealed.i�zRetry-After�<�
%dh%02dm%02dsz/File %s is being unsealed, operation ETA is %s.r3)rG�
get_objectrDrFrrOr;r[r��http_response_headers�divmodrJrKrLrrMrN)
rSre�_rkrU�duration�m�s�h�etar,r,r/rh�s.
�
��
���zPCABackend.unsealcs�d}tttj|���|j�fdd�d�}d}|D]1}t�|d�}|d}t�d||f�|d	krCt�d
|�|�|d�d}q|dkrId}q|rX|�	��}t
�|�|sLt�d
�dS)z�
        This is called before downloading volumes from this backend
        by main engine. For PCA, volumes passed as argument need to be unsealed.
        This method is blocking, showing a status at regular interval
        r�cs|d�vS�Nrcr,�r.��u_remote_filenamesr,r/�<lambda>�sz7PCABackend.pre_process_download_batch.<locals>.<lambda>�rzFrc�policy_retrieval_statezVolume %s. State : %s. �sealed�Launching unseal of volume %s.T�	unsealingz%All volumes to download are unsealed.N)�list�maprrar�rrO�Noticerh�
unseal_status�time�sleep)rS�remote_filenames�retry_interval�objs�one_object_not_unsealedr�r�r�r,r�r/�pre_process_download_batch�s(�

�z%PCABackend.pre_process_download_batchc
s�d}|j�fdd�d�}d}|D]D}|d}t�|d�}|dkr9t�d	|�t�d
|�|�|d�d}q|dkrTt|d
�}t�d||f�||krR|}d}qt|d�\}	}
t|	d�\}}	d||	|
f}t�d|�|S)z:
        Shows unsealing status for input volumes
        Fcst�|d��vSr�)rrar�r�r,r/r��sz*PCABackend.unseal_status.<locals>.<lambda>r�rr�rcr�z,Error: volume is still in sealed state : %s.r�Tr��policy_retrieval_delayz%s available in %d seconds.r�r�z0Need to wait %s before all volumes are unsealed.)	r�rrarr�rhr�rOr�)
rSr�r�r��max_durationr�r�r�r�r�r�r��max_duration_etar,r�r/r��s.�zPCABackend.unseal_statusr�)rL�
__module__�__qualname__�__doc__r8r^rfrnr�r�r�r�rhr�r�r,r,r,r/r so
!r�pca)�builtinsrr=�duplicity.backendr5rr�duplicity.errorsrr�r6r7r�register_backendr,r,r,r/�<module>su