HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //snap/certbot/4965/lib/python3.12/site-packages/acme/__pycache__/standalone.cpython-312.pyc
�

N�h�#��N�dZddlmZddlZddlZddlmZddlm	Z
ddlZddlZddl
Z
ddlZddlmZddlmZddlmZej(e�ZGd�d�ZGd	�d
�ZGd�de
j2�ZGd
�dee�ZGd�de�ZGd�de
j8�Zy)z1Support for standalone client challenge solvers. �)�annotationsN)�Any)�Optional)�
challengesc��eZdZdZdZdZy)�ACMEServerMixinz"ACME server common settings mixin.z'ACME client standalone challenge solverTN)�__name__�
__module__�__qualname__�__doc__�server_version�allow_reuse_address���/build/snapcraft-certbot-c9561b03ef7f16aa90eb6754ca5f17a1/parts/certbot/install/lib/python3.12/site-packages/acme/standalone.pyrrs��,�>�N��rrc�<�eZdZdZ						dd�Zdd�Zd	d�Zdd�Zy)
�BaseDualNetworkedServersaBase class for a pair of IPv6 and IPv4 servers that tries to do everything
       it's asked for both servers, but where failures in one server don't
       affect the other.

       If two servers are instantiated, they will serve on the same port.
       c�B�|d}g|_g|_d}dD]�}	||d<|df|fz|ddz}|f|z}	||	i|��}
tjd|d|d|rdnd�|jj	|
�|
j
j
�d}��|js|r|�td��y#t$r^}|}|jr#tjd	d|d|rdnd�n"tjd
d|d|rdnd�Yd}~��d}~wwxYw)N�)TF�ipv6r�z$Successfully bound to %s:%s using %s�IPv6�IPv4z�Certbot wasn't able to bind to %s:%s using %s, this is often expected due to the dual stack nature of IPv6 socket implementations.z Failed to bind to %s:%s using %szCould not bind to IPv4 or IPv6.)�threads�servers�logger�debug�append�socket�getsockname�OSError)�self�ServerClass�server_address�remaining_args�kwargs�port�last_socket_err�
ip_version�new_address�new_args�server�es            r�__init__z!BaseDualNetworkedServers.__init__#s[���a� ��/1���68���37��(�	6�J�
6�!+��v��-�a�0�2�d�W�<�~�a�b�?Q�Q��'�>�N�:��$�h�9�&�9�����:�K��N���N�j�F�f�F�$���#�#�F�+��}�}�0�0�2�1�5��7	6�8�|�|��%�%��?�@�@�	��'�

J�"#���<�<��L�L�7�$�A���A��",��&�:��L�L�:�K��N�#�A��*��&�J���

J�s�AB7�7	D�AD�Dc��|jD]M}tj|j��}|j	�|j
j
|��Oy)z*Wraps socketserver.TCPServer.serve_forever)�targetN)r�	threading�Thread�
serve_forever�startrr�r"r,�threads   rr3z&BaseDualNetworkedServers.serve_foreverUsI���l�l�	(�F��%�%��+�+�-�F��L�L�N��L�L����'�		(rc�p�|jD�cgc]}|jj���c}Scc}w)z/Wraps socketserver.TCPServer.socket.getsockname)rrr )r"r,s  r�getsocknamesz%BaseDualNetworkedServers.getsocknames]s'��:>�,�,�G���
�
�)�)�+�G�G��Gs�!3c��|jD]"}|j�|j��$|jD]}|j	��g|_y)zpWraps socketserver.TCPServer.shutdown, socketserver.TCPServer.server_close, and
           threading.Thread.joinN)r�shutdown�server_closer�joinr5s   r�shutdown_and_server_closez2BaseDualNetworkedServers.shutdown_and_server_closeasR���l�l�	"�F��O�O�����!�	"��l�l�	�F��K�K�M�	���rN)
r#ztype[socketserver.TCPServer]r$�tuple[str, int]r%rr&r�return�None�r?r@)r?zlist[tuple[str, int]])r	r
rrr.r3r8r=rrrrrs9���0A�"%�0A�14�0A�9=�0A�d(�H�rrc�$��eZdZdZd�fd�Z�xZS)�
HTTPServerzGeneric HTTP Server.c���|jdd�|_|jrtj|_ntj
|_t
�|�|i|��y)NrF)�poprr�AF_INET6�address_family�AF_INET�superr.�r"�argsr&�	__class__s   �rr.zHTTPServer.__init__osF����J�J�v�u�-��	��9�9�"(�/�/�D��"(�.�.�D��
���$�)�&�)r�rKrr&rr?r@�r	r
rrr.�
__classcell__�rLs@rrCrCls����*�*rrCc�6��eZdZdZ	d							d�fd�
Z�xZS)�HTTP01ServerzHTTP01 Server.c�T��t�|�|tj||��|��y)N��simple_http_resources�timeout)r)rIr.�HTTP01RequestHandler�partial_init)r"r$�	resourcesrrVrLs     �rr.zHTTP01Server.__init__{s7���	����0�=�=�&/��>�B�HL�	�	Nr)F�)
r$r>rY�(set[HTTP01RequestHandler.HTTP01Resource]r�boolrV�intr?r@rNrPs@rrRrRxs;����57�N�D�N��N�.1�N�;?�N�NrrRc�$��eZdZdZd�fd�Z�xZS)�HTTP01DualNetworkedServersz`HTTP01Server Wrapper. Tries everything for both. Failures for one don't
       affect the other.c�4��t�|�tg|��i|��y)N)rIr.rRrJs   �rr.z#HTTP01DualNetworkedServers.__init__�s���
����7��7��7rrMrNrPs@rr_r_�s����8�8rr_c���eZdZdZej
dd�Zd
�fd�Zedd��Z	dd�Z
dd�Zdd�Zdd	�Z
dd
�Zdd�Ze				dd��Z�xZS)rWz�HTTP01 challenge handler.

    Adheres to the stdlib's `socketserver.BaseRequestHandler` interface.

    :ivar set simple_http_resources: A set of `HTTP01Resource`
        objects. TODO: better name?

    �HTTP01Resourcezchall response validationc���|jdt��|_|jdd�|_t	�|�|i|��|y)NrUrVrZ)rE�setrU�_timeoutrIr.rJs   �rr.zHTTP01RequestHandler.__init__�s@���%+�Z�Z�0G���%O��"��
�
�9�b�1��
�
���$�)�&�)�rc��|jS)z�
        The default timeout this server should apply to requests.
        :return: timeout to apply
        :rtype: int
        )re�r"s rrVzHTTP01RequestHandler.timeout�s���}�}�rc�R�tjd|jd||z�y)zLog arbitrary message.z	%s - - %srN)rr�client_address)r"�formatrKs   r�log_messagez HTTP01RequestHandler.log_message�s!�����[�$�"5�"5�a�"8�&�4�-�Hrc�d�|jd�tjj|�y)zHandle request.zIncoming requestN)rk�BaseHTTPServer�BaseHTTPRequestHandler�handlergs rrozHTTP01RequestHandler.handle�s%�����+�,��-�-�4�4�T�:rc���|jdk(r|j�y|jjdtjj
z�r|j
�y|j�y)N�/)�path�handle_index�
startswithr�HTTP01�
URI_ROOT_PATH�handle_simple_http_resource�
handle_404rgs r�do_GETzHTTP01RequestHandler.do_GET�sS���9�9�������
�Y�Y�
!�
!�#�
�(9�(9�(G�(G�"G�
H��,�,�.��O�O�rc���|jd�|jdd�|j�|jj	|j
jj��y)zHandle index page.��zContent-Type�	text/htmlN)�
send_response�send_header�end_headers�wfile�writer,r
�encodergs rrsz!HTTP01RequestHandler.handle_index�sQ�����3�������5������
�
������3�3�:�:�<�=rc��|jtjd��|jdd�|j	�|j
j
d�y)zHandler 404 Not Found errors.z	Not Found)�messagezContent-typer|s404N)r}�http_client�	NOT_FOUNDr~rr�r�rgs rrxzHTTP01RequestHandler.handle_404�sI�����;�0�0�+��F������5������
�
���� rc���|jD]�}|jj|jk(s�'|jd|jj	d��|jtj�|j�|jj|jj	��y|jd�|jd|j�y)z$Handle HTTP01 provisioned resources.zServing HTTP01 with token %r�tokenNzNo resources to servez0%s does not correspond to any resource. ignoring)rU�challrrrkr�r}r��OKrr�r��
validation)r"�resources  rrwz0HTTP01RequestHandler.handle_simple_http_resource�s����2�2�		6�H��~�~�"�"�d�i�i�/�� � �!?�!)���!6�!6�w�!?�A��"�"�;�>�>�2�� � �"��
�
� � ��!4�!4�!;�!;�!=�>��		6�
���4�5����K����	$rc�2�tj|||��S)z�Partially initialize this handler.

        This is useful because `socketserver.BaseServer` takes
        uninitialized handler and initializes it with the current
        request.

        rT)�	functools�partial)�clsrUrVs   rrXz!HTTP01RequestHandler.partial_init�s ��� � ��'<���	rrM)r?r])rj�strrKrr?r@rA)rUr[rVr]r?z'functools.partial[HTTP01RequestHandler])r	r
rr�collections�
namedtuplerbr.�propertyrVrkroryrsrxrw�classmethodrXrOrPs@rrWrW�s~����,�[�+�+��5�7�N�"�����I�;�
�>�!�
$���!��&M���rrW)r�
__future__rr�r��http.client�clientr��http.serverr,rm�loggingr�socketserverr1�typingrr�acmer�	getLoggerr	rrrrCrRr_rnrWrrr�<module>r�s���7�"���!�$��
������	��	�	�8�	$����N�N�b	*��*�*�	*�N�:��N�8�!9�8�[�>�@�@�[r