a
    á `ƒ  ã                   @   sú   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ zdd
lmZ ddlmZ W n eyž   eZeZY n0 ddddddddœZe e¡Zdd„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )z0Module configuring Certbot in a snap environmenté    N)ÚSession)ÚHTTPAdapter)Ú	HTTPError)ÚRequestException)ÚList)Úos)ÚError)ÚHTTPConnection)ÚHTTPConnectionPoolzaarch64-linux-gnuzarm-linux-gnueabihfzi386-linux-gnuzpowerpc64le-linux-gnuzpowerpc-linux-gnuzx86_64-linux-gnuzs390x-linux-gnu)Zarm64ZarmhfZi386Zppc64elZpowerpcZamd64Zs390xc                 C   s.  t j d¡}|tvr"td |¡ƒ‚d t j d¡t| ¡t jd< tƒ ”}| dtƒ ¡ z| d¡}| 	¡  W n^ t
yÊ } zFt|tƒr¨|jjdkr¨t d	¡ t d
¡ n
t d¡ |‚W Y d}~n
d}~0 0 W d  ƒ n1 sà0    Y  | ¡ }dd„ | di ¡ dg ¡D ƒ}d |¡t jd< |  d¡ | S )zÃ
    Prepare runtime environment for a certbot execution in snap.
    :param list cli_args: List of command line arguments
    :return: Update list of command line arguments
    :rtype: list
    Z	SNAP_ARCHz$Unrecognized value of SNAP_ARCH: {0}z{0}/usr/lib/{1}/libaugeas.so.0ZSNAPZCERTBOT_AUGEAS_PATHzhttp://snapd/z:http://snapd/v2/connections?snap=certbot&interface=contenti”  zYAn error occurred while fetching Certbot snap plugins: your version of snapd is outdated.z[Please run "sudo snap install core; sudo snap refresh core" in your terminal and try again.z^An error occurred while fetching Certbot snap plugins: make sure the snapd service is running.Nc                 S   sJ   g | ]B}|  d i ¡  d ¡dkr|  di ¡  d¡dkrd |d d ¡‘qS )ZplugZpluginz
plug-attrsZcontentz	certbot-1z./snap/{0}/current/lib/python3.8/site-packages/ZslotZsnap)ÚgetÚformat)Ú.0Úitem© r   ú?/usr/lib/python3/dist-packages/certbot/_internal/snap_config.pyÚ
<listcomp>F   s   ýzprepare_env.<locals>.<listcomp>ÚresultZestablishedú:ZCERTBOT_PLUGIN_PATHz--preconfigured-renewal)r   Úenvironr   Ú_ARCH_TRIPLET_MAPr   r   r   ZmountÚ_SnapdAdapterZraise_for_statusr   Ú
isinstancer   ÚresponseZstatus_codeÚLOGGERÚerrorZjsonÚjoinÚappend)Zcli_argsZ	snap_archZsessionr   ÚeÚdataZconnectionsr   r   r   Úprepare_env$   s0    ÿ



8ÿ
r   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )Ú_SnapdConnectionc                    s   t t| ƒ d¡ d | _d S ©NZ	localhost)Úsuperr    Ú__init__Úsock©Úself©Ú	__class__r   r   r#   S   s    z_SnapdConnection.__init__c                 C   s"   t   t jt j¡| _| j d¡ d S )Nz/run/snapd.socket)ÚsocketZAF_UNIXZSOCK_STREAMr$   Úconnectr%   r   r   r   r*   W   s    z_SnapdConnection.connect)Ú__name__Ú
__module__Ú__qualname__r#   r*   Ú__classcell__r   r   r'   r   r    R   s   r    c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )Ú_SnapdConnectionPoolc                    s   t t| ƒ d¡ d S r!   )r"   r/   r#   r%   r'   r   r   r#   ]   s    z_SnapdConnectionPool.__init__c                 C   s   t ƒ S ©N)r    r%   r   r   r   Ú	_new_conn`   s    z_SnapdConnectionPool._new_conn)r+   r,   r-   r#   r1   r.   r   r   r'   r   r/   \   s   r/   c                   @   s   e Zd Zddd„ZdS )r   Nc                 C   s   t ƒ S r0   )r/   )r&   ZurlZproxiesr   r   r   Úget_connectione   s    z_SnapdAdapter.get_connection)N)r+   r,   r-   r2   r   r   r   r   r   d   s   r   )Ú__doc__Zloggingr)   Zrequestsr   Zrequests.adaptersr   Zrequests.exceptionsr   r   Zacme.magic_typingr   Zcertbot.compatr   Zcertbot.errorsr   Zurllib3.connectionr	   Zurllib3.connectionpoolr
   ÚImportErrorÚobjectr   Z	getLoggerr+   r   r   r    r/   r   r   r   r   r   Ú<module>   s8   
ù

.
