HEX
Server: Apache
System: Linux srv1.prosuiteplus.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: prosuiteplus (1001)
PHP: 8.3.20
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/acme/__pycache__/standalone.cpython-38.pyc
U

[^�"�@s�dZddlZddlZddlZddlZddlZddlmZddlmZddlm	Z	ddl
mZddl
mZddl
mZe�e�ZGd	d
�d
e	j�ZGdd�d�ZGd
d�de�ZGdd�dej�ZGdd�dee�ZGdd�de�ZGdd�dej�ZdS)z1Support for standalone client challenge solvers. �N)�BaseHTTPServer)�http_client)�socketserver)�
challenges)�crypto_util)�Listc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�	TLSServerzGeneric TLS Server.cOsj|�dd�|_|jrtj|_ntj|_|�di�|_|�dtj�|_	|�dd�|_
tjj
|f|�|�dS)N�ipv6F�certs�method�allow_reuse_addressT)�popr	�socket�AF_INET6�address_family�AF_INETr
rZ_DEFAULT_SSL_METHODrrr�	TCPServer�__init__��self�args�kwargs�r�1/usr/lib/python3/dist-packages/acme/standalone.pyrs
�zTLSServer.__init__cCstj|j|j|jd�|_dS)N)r
r)rZ	SSLSocketrr
r�rrrr�
_wrap_sock&s
�zTLSServer._wrap_sockcCs|��tj�|�S�N)rrr�server_bindrrrrr*szTLSServer.server_bindN)�__name__�
__module__�__qualname__�__doc__rrrrrrrrs
rc@seZdZdZdZdZdS)�ACMEServerMixinz"ACME server common settings mixin.z'ACME client standalone challenge solverTN)rrr r!�server_versionrrrrrr"/sr"c@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�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

Os
|d}g|_g|_dD]�}z\||d<|df|f|dd�}|f|}|||�}	t�d|d|d|rpdnd�Wn^tjk
r�|jr�t�d	|d|d|r�dnd�n t�d
|d|d|r�dnd�YqX|j�|	�|	j��d}q|j�st�d��dS)N�)TFr	r�z$Successfully bound to %s:%s using %sZIPv6ZIPv4z�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�debugr�error�append�getsockname)
rZServerClass�server_addressZremaining_argsrZportZ
ip_versionZnew_addressZnew_args�serverrrrr>sB	


�
�
�
z!BaseDualNetworkedServers.__init__cCs2|jD]&}tj|jd�}|��|j�|�qdS)z*Wraps socketserver.TCPServer.serve_forever)�targetN)r(�	threadingZThread�
serve_forever�startr'r,�rr/�threadrrrr2hs
�z&BaseDualNetworkedServers.serve_forevercCsdd�|jD�S)z/Wraps socketserver.TCPServer.socket.getsocknamecSsg|]}|j���qSr)rr-)�.0r/rrr�
<listcomp>rsz9BaseDualNetworkedServers.getsocknames.<locals>.<listcomp>)r(rrrr�getsocknamespsz%BaseDualNetworkedServers.getsocknamescCs:|jD]}|��|��q|jD]}|��q"g|_dS)zpWraps socketserver.TCPServer.shutdown, socketserver.TCPServer.server_close, and
           threading.Thread.joinN)r(ZshutdownZserver_closer'�joinr4rrr�shutdown_and_server_closets



z2BaseDualNetworkedServers.shutdown_and_server_closeN)rrr r!rr2r8r:rrrrr$6s
*r$c@seZdZdZdd�ZdS)�
HTTPServerzGeneric HTTP Server.cOs>|�dd�|_|jrtj|_ntj|_tjj|f|�|�dS)Nr	F)	r
r	rrrrrr;rrrrrr�s

zHTTPServer.__init__N�rrr r!rrrrrr;sr;c@seZdZdZddd�ZdS)�HTTP01ServerzHTTP01 Server.FcCstj||tj|d�|d�dS)N��simple_http_resources)r	)r;r�HTTP01RequestHandler�partial_init)rr.Z	resourcesr	rrrr�s��zHTTP01Server.__init__N)Fr<rrrrr=�sr=c@seZdZdZdd�ZdS)�HTTP01DualNetworkedServersz`HTTP01Server Wrapper. Tries everything for both. Failures for one don't
       affect the other.cOstj|tf|�|�dSr)r$rr=rrrrr�sz#HTTP01DualNetworkedServers.__init__Nr<rrrrrB�srBc@s`eZdZdZe�dd�Zdd�Zdd�Zdd	�Z	d
d�Z
dd
�Zdd�Zdd�Z
edd��ZdS)r@z�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 validationcOs(|�dt��|_tjj|f|�|�dS)Nr?)r
�setr?r�BaseHTTPRequestHandlerrrrrrr�szHTTP01RequestHandler.__init__cGst�d|jd||�dS)zLog arbitrary message.z	%s - - %srN)r)r*Zclient_address)r�formatrrrr�log_message�sz HTTP01RequestHandler.log_messagecCs|�d�tj�|�dS)zHandle request.zIncoming requestN)rGrrE�handlerrrrrH�s
zHTTP01RequestHandler.handlecCs>|jdkr|��n&|j�dtjj�r2|��n|��dS)N�/)�path�handle_index�
startswithrZHTTP01Z
URI_ROOT_PATH�handle_simple_http_resource�
handle_404rrrr�do_GET�s



zHTTP01RequestHandler.do_GETcCs6|�d�|�dd�|��|j�|jj���dS)zHandle index page.��zContent-Type�	text/htmlN)�
send_response�send_header�end_headers�wfile�writer/r#�encoderrrrrK�s
z!HTTP01RequestHandler.handle_indexcCs4|jtjdd�|�dd�|��|j�d�dS)zHandler 404 Not Found errors.z	Not Found)�messagezContent-typerQs404N)rRrZ	NOT_FOUNDrSrTrUrVrrrrrN�szHTTP01RequestHandler.handle_404cCsv|jD]R}|jj|jkr|�d|j�d��|�tj�|��|j	�
|j���dSq|�d�|�d|j�dS)z$Handle HTTP01 provisioned resources.zServing HTTP01 with token %r�tokenNzNo resources to servez0%s does not correspond to any resource. ignoring)r?ZchallrJrGrWrRrZOKrTrUrVZ
validation)r�resourcerrrrM�s

�
�z0HTTP01RequestHandler.handle_simple_http_resourcecCstj||d�S)z�Partially initialize this handler.

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

        r>)�	functools�partial)�clsr?rrrrA�s	�z!HTTP01RequestHandler.partial_initN)rrr r!�collections�
namedtuplerCrrGrHrOrKrNrM�classmethodrArrrrr@�s�r@)r!r^r[Zloggingrr1Z	six.movesrrrZacmerrZacme.magic_typingrZ	getLoggerrr)rrr"�objectr$r;r=rBrEr@rrrr�<module>s&
I