HEX
Server: Apache/2.4.65 (Debian)
System: Linux kubikelcreative 5.10.0-35-amd64 #1 SMP Debian 5.10.237-1 (2025-05-19) x86_64
User: www-data (33)
PHP: 8.4.13
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/softwareproperties/__pycache__/ppa.cpython-39.pyc
a

���V�:�@s�ddlmZddlZddlZddlZddlZddlZddlZddlZddl	m	Z
ddlmZddl
mZddlmZz4ddlZddlmZmZddlZddlmZd	ZWn$ey�d
ZddlZejZYn0dZdZd
ZdZ d
Z!dZ"Gdd�d�Z#Gdd�de$�Z%dd�Z&dd�Z'dd�Z(dd�Z)dd�Z*dd�Z+d d!�Z,d"d#�Z-Gd$d%�d%e.�Z/Gd&d'�d'ee/�Z0d(d)�Z1d*d+�Z2Gd,d-�d-e.�Z3d.d/�Z4e5d0k�r�ddl6Z6e6j7d1�8d2�d1Z9e:e2e9��dS)3�)�print_functionN)�gettext)�Thread)�	print_exc)�ShortcutException)�	HTTPError�URLError)�
HTTPExceptionFTzhkp://keyserver.ubuntu.com:80/z,https://launchpad.net/api/1.0/%s/+archive/%sz https://launchpad.net/api/1.0/%sz%https://launchpad.net/api/1.0/%s/ppasz"/etc/ssl/certs/ca-certificates.crtc@seZdZdd�Zdd�ZdS)�CurlCallbackcCs
d|_dS)N���contents��self�r�8/usr/lib/python3/dist-packages/softwareproperties/ppa.py�__init__>szCurlCallback.__init__cCs|j||_dS�Nr)r�bufrrr�
body_callbackAszCurlCallback.body_callbackN)�__name__�
__module__�__qualname__rrrrrrr
=sr
c@seZdZddd�Zdd�ZdS)�PPAExceptionNcCs||_||_dSr)�value�original_error)rrrrrrrGszPPAException.__init__cCs
t|j�Sr)�reprrrrrr�__str__KszPPAException.__str__)N)rrrrrrrrrrEs
rcCst�dd|�S)Nz[^a-zA-Z0-9_-]�_)�re�sub)�srrr�encodeOsr"cCstrt|�St|�SdSr)�NEED_PYCURL�_get_https_content_pycurl�_get_https_content_py3)�lp_urlrrr�get_info_from_lpRsr'cCst||f}t|�Sr)�LAUNCHPAD_PPA_APIr')Z
owner_name�ppar&rrr�get_ppa_info_from_lpZsr*cCst|}tj�t|�d�S)NZcurrent_series_link)�LAUNCHPAD_DISTRIBUTION_API�os�path�basenamer')�distributionr&rrr�get_current_series_from_lp^sr0c
Cs�z<tjjt|�ddid�}tjj|td�}|���dd�}WnNtt	fy�}z2t
|d�r`|jpb|}td||f|��WYd}~n
d}~00t
�|�S)	N�Acceptz application/json)�headers)�cafilezutf-8�strict�reason�Error reading %s: %s)�urllib�request�Request�str�urlopen�LAUNCHPAD_PPA_CERT�read�decoderr	�hasattrr5r�json�loads)r&r8Zlp_page�	json_data�er5rrrr%cs(r%c
Cs�z�t�}t��}|�tjd�|�tjd�|�tj|j�trN|�tj	t�|�tj
t|��|�tjdg�|�
�|��|j}Wn8tjy�}ztd||f|��WYd}~n
d}~00t�|�S)N��zAccept: application/jsonr6)r
�pycurlZCurlZsetoptZSSL_VERIFYPEERZSSL_VERIFYHOSTZ
WRITEFUNCTIONrr<ZCAINFOZURLr:Z
HTTPHEADERZperform�closer
�errorrr@rA)r&�callbackZcurlrBrCrrrr$os 
(r$cCs�|�d�d}|�d�r"|�d�}|�d�d}|ddkrH|dd�}|�d�dd�}g}t|�dkrtddg}n(t|�dkr�|�dd�|�|�n|}d|d�|�f}|S)	N�:rD�/r�~Zubuntur)z~%s/%s)�split�
startswith�lstrip�len�insert�extend�join)�shortcutZppa_shortcut�userZ
ppa_path_objs�ppa_pathr)rrr�mangle_ppa_shortcut�s 


rWcCst|�dkS)z>Verify that the keyid is a v4 fingerprint with at least 160bitg4@)rP)�signing_key_fingerprintrrr�verify_keyid_is_v4�srYc@sLeZdZdZgd�Zddd�Zdd�Zdd	�Zd
d�Zdd
�Z	ddd�Z
dS)�AddPPASigningKeyz; thread class for adding the signing key in the background )Zgpgz--no-default-keyringz--no-optionsNcCs||_|dur|nt|_dSr)rV�DEFAULT_KEYSERVER�	keyserver�rrVr\rrrr�s�zAddPPASigningKey.__init__c
Csjzt|�std|�WdSWnty:td�YdS0t�|jd|d|d|d|jd|g
�}|d	kS)
Nz-Error: signing key fingerprint '%s' too shortFz-Error: signing key fingerprint does not exist�	--homedirz--secret-keyring�	--keyringz--keyserverz--recvr)rY�print�	TypeError�
subprocess�call�GPG_DEFAULT_OPTIONSr\)r�keyringZsecret_keyringrX�keyring_dir�resrrr�	_recv_key�s"�
�zAddPPASigningKey._recv_keycCs0t�|jd|d|d|d|g�}|dkr,dSdS)Nr^r_z--outputz--exportrFT)rbrcrd)rreZexport_keyringrXrfrgrrr�_export_key�s�zAddPPASigningKey._export_keycCsZ|jd|d|dddg}tj|dd�}g}|��D]"}|�d�r2|�|�d	�d
�q2|S)Nr^r_z
--fingerprintz--batchz
--with-colonsT)�universal_newlineszfpr:rJ�	)rdrb�check_output�
splitlinesrN�appendrM)rrerf�cmd�outputZfingerprints�linerrr�_get_fingerprints�s�
z"AddPPASigningKey._get_fingerprintscCsT|�||�}t|�dkr,tdt|��dS|d}||krPtd||f�dSdS)NrDz(Got '%s' fingerprints, expected only oneFrz6Fingerprints do not match, not importing: '%s' != '%s'T)rrrPr`)rreZexpected_fingerprintrfZgot_fingerprintsZgot_fingerprintrrr�_verify_fingerprint�s��z$AddPPASigningKey._verify_fingerprintc
sr|dur|j}�fdd�}zt|�}Wn0tyV}zt|j�WYd}~dSd}~00z|d}Wn2ty�}ztd|�WYd}~dSd}~00t���tj	�
�d�}tj	�
�d�}|�|||��s�|��dStj	�
�d	�}|�|||���s|��dS|�
||���s |��dStj�d
�}	tj	�
|	dt|dd
d���}
t�dd|
d|g�}|��|dkS)z�Query and add the corresponding PPA signing key.
        
        The signing key fingerprint is obtained from the Launchpad PPA page,
        via a secure channel, so it can be trusted.
        Ncst���dSr)�shutil�rmtree)�tmpdir�Ztmp_keyring_dirrr�cleanup�sz5AddPPASigningKey.add_ppa_signing_key.<locals>.cleanupFrXz/Error: can't find signing_key_fingerprint at %szsecring.gpgzpubring.gpgzexport-keyring.gpgzDir::Etc::trustedpartsz%s.gpg�	referencerDzapt-keyr_�addr)rV�get_ppa_inforr`r�
IndexError�tempfile�mkdtempr,r-rSrhrirs�apt_pkg�config�find_dirr"rbrc)rrVrxZppa_inforCrXZtmp_secret_keyringZtmp_keyringZtmp_export_keyringZtrustedgpgdZapt_keyringrgrrwr�add_ppa_signing_key�sR
���
��z$AddPPASigningKey.add_ppa_signing_key)N)N)rrr�__doc__rdrrhrirrrsr�rrrrrZ�s

rZc@seZdZddd�Zdd�ZdS)�AddPPASigningKeyThreadNcCst�|�tj|||d�dS)N)rVr\)rrrZr]rrrrs
zAddPPASigningKeyThread.__init__cCs|�|j�dSr)r�rVrrrr�runszAddPPASigningKeyThread.run)N)rrrrr�rrrrr�s
r�cCs,�zg}z�ztt|�}Wn&ty@td�j|d�YWWS0tt|�}|dr^td�ntd�}|ddkr�|�td�|||d	��|�td
��|dD]$}|�td�|d
|dd��q�n|�td�||d��d�|�WWSt�yYWdS0Wnt	�y&td�YS0dS)Nz,ERROR: '{user}' user or team does not exist.)rUZis_teamZteamrU�
total_sizerz:The %(entity)s named '%(user)s' has no PPA named '%(ppa)s')�entityrUr)z0Please choose from the following available PPAs:�entriesz * '%(name)s':  %(displayname)s�name�displayname)r�r�z5The %(entity)s named '%(user)s' does not have any PPA)r�rU�
rz4Please check that the PPA name or format is correct.)
r'�LAUNCHPAD_USER_APIrr�format�LAUNCHPAD_USER_PPAS_APIrnrS�KeyError�ImportError)rUZppa_name�msgZlp_userZlp_ppasZentity_namer)rrr�_get_suggested_ppa_message#s:
�

�
�
r�c	Cs�|�d�d}d�|�d�dd��}z<t||�}|d�d�d|d<|d�d�d|d<|WSttfy�g}|�td	�||f�td
�|�d
t||���Yn.t	t
fy�ttd�t||f��Yn0dS)NrKrrDZdistribution_link���r/Z
owner_link�ownerzCannot add PPA: 'ppa:%s/%s'.r�zUCannot access PPA (%s) to get PPA information, please check your internet connection.)rMrSr*r�	Exceptionrnrrr��
ValueErrorrr()rTrUr)�retr�rrrr{Cs*

��

��r{cs@eZdZ�fdd�Zdd�Zddd�Zdd	�Zd
d
d�Z�ZS)�PPAShortcutHandlercsntt|���zt|�|_Wn ttd�j|d���Yn0t|j�}d|vrd|drdttd���||_	dS)Nz-ERROR: '{shortcut}' is not a valid ppa format�rTZprivatez.Adding private PPAs is not supported currently)
�superr�rrWrTrrr�r{�_info)rrT�info��	__class__rrr]s
�
�zPPAShortcutHandler.__init__cCs|jSr)r�rrrrr�lszPPAShortcutHandler.infoNc	Cs�|dur$||jdkr$t|jd�}d|jddd�|jd|jd|f}tj�d�}tj�|dt|jddd��t|jd�t|jd�|f�}||fS)Nr/z-deb http://ppa.launchpad.net/%s/%s/%s %s mainr�rDr�zDir::Etc::sourcepartsz%s-%s-%s-%s.list)	r�r0rr�r�r,r-rSr")r�codename�distroZdeblineZsourceslistd�filenamerrr�expandos
�
 �zPPAShortcutHandler.expandcCsdS)NTrrrrr�should_confirm}sz!PPAShortcutHandler.should_confirmcCst|jd|d�}|��S)Nry)r\)rZr�r�)rr\Zapskrrr�add_key�szPPAShortcutHandler.add_key)N)N)	rrrrr�r�r�r��
__classcell__rrr�rr�\s

r�cCs8|�d�sdSz
t|�WSty2t�YdS0dS)Nzppa:)rNr�rrr�rrr�shortcut_handler�s

r��__main__rDrJ);�
__future__rrr@r,rrtrbr}rr�	threadingr�	tracebackr�softwareproperties.shortcutsr�urllib.requestr7�urllib.errorrr�urllib.parse�http.clientr	r#r�rFrHr[r(r�r�r+r<r
r�rr"r'r*r0r%r$rWrY�objectrZr�r�r{r�r�r�sys�argvrMr)r`rrrr�<module>s^
z )