o
    ,º])  ã                   @   s<  d dl mZmZmZmZ d dlmZmZ d dlm	Z	 d dl
Z
d dlZd dlZd dlZd dlZd dlmZ d dlmZmZmZ d dlmZ e d¡Ze
j e¡ZejZe
j  ed	¡Z!G d
d„ deƒZ"G dd„ deƒZ#G dd„ deƒZ$G dd„ dej%ƒZ&e!edfdd„Z'e(dk�rd dl)Z)e)j*dd�Z+e+j,dde-ddd� e+j,ddddd d!d"� e+j,d#d$d%d&d'd(d"� e+j,d)d*ed+d,d-� e+j,d.d/ed+d0d-� e+ .¡ Z/e/j0e_0e/j1rÓe$Z2ne#Z2e	j3rÞe
 4¡ e2_5ne
 6¡ e2_5e 7ej8¡Z9e9 :e!¡ e/j;r÷e9 <e/j;¡ e/j=�re9 >e/j=¡ e"d1e/j?fe2e9ƒZ@e/j0�reAd2 Be/¡ƒ e@ Cd3¡ dS dS )4é    )Úabsolute_importÚdivisionÚprint_functionÚunicode_literals)ÚfilterÚstr)ÚutilsN)Úparse)Ú
HTTPServerÚSimpleHTTPRequestHandlerÚBaseHTTPRequestHandler)ÚsupportÚ	threadingzkeycert.pemc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚHTTPSServerc                 C   s   t  | ||¡ || _d S ©N)Ú_HTTPServerÚ__init__Úcontext)ÚselfÚserver_addressÚhandler_classr   © r   ú^/var/www/html/myproject/venv/lib/python3.10/site-packages/future/backports/test/ssl_servers.pyr      s   
zHTTPSServer.__init__c                 C   s   d| j j| j| jf S )Nz
<%s %s:%s>)Ú	__class__Ú__name__Úserver_nameÚserver_port©r   r   r   r   Ú__str__   s   þÿzHTTPSServer.__str__c              
   C   s\   z| j  ¡ \}}| jj|dd�}W ||fS  t jy- } ztjr(tj 	d| ¡ ‚ d }~ww )NT)Úserver_sidezGot an error:
%s
)
ÚsocketÚacceptr   Úwrap_socketÚerrorr   ÚverboseÚsysÚstderrÚwrite)r   ÚsockÚaddrÚsslconnÚer   r   r   Úget_request"   s   û€üzHTTPSServer.get_requestN)r   Ú
__module__Ú__qualname__r   r   r,   r   r   r   r   r      s    r   c                   @   s(   e Zd ZdZeZdZdd„ Zdd„ ZdS )ÚRootedHTTPRequestHandlerzTestHTTPS/1.0é   c                 C   sz   t j |¡d }tj t j |¡¡}| d¡}td|ƒ}| j	}|D ]}tj 
|¡\}}tj |¡\}}tj ||¡}q!|S )zñTranslate a /-separated PATH to the local filename syntax.

        Components that mean special things to the local file system
        (e.g. drive or directory names) are ignored.  (XXX They should
        probably be diagnosed.)

        é   ú/N)Úurllibr	   ÚurlparseÚosÚpathÚnormpathÚunquoteÚsplitr   ÚrootÚ
splitdriveÚjoin)r   r6   ÚwordsÚwordÚdriveÚheadr   r   r   Útranslate_path8   s   	

z'RootedHTTPRequestHandler.translate_pathc              	   G   s>   t jrtj d| jj| jj| j 	¡ |  
¡ || f ¡ d S d S )Nz server (%s:%d %s):
   [%s] %s
)r   r$   r%   Ústdoutr'   Úserverr   r   ÚrequestÚcipherÚlog_date_time_string©r   ÚformatÚargsr   r   r   Úlog_messageL   s   ü
ÿÿz$RootedHTTPRequestHandler.log_messageN)	r   r-   r.   Úserver_versionÚherer:   ÚtimeoutrA   rJ   r   r   r   r   r/   .   s    r/   c                   @   s.   e Zd ZdZdZddd„Zdd„ Zdd	„ Zd
S )ÚStatsRequestHandlerzSExample HTTP request handler which returns SSL statistics on GET
    requests.
    zStatsHTTPS/1.0Tc                 C   s†   | j jj}|j}| ¡ | ¡ | ¡ dœ}t |¡}| 	d¡}|  
d¡ |  dd¡ |  dtt|ƒƒ¡ |  ¡  |rA| j |¡ dS dS )zServe a GET request.)Úsession_cacherE   Úcompressionzutf-8éÈ   zContent-typeztext/plain; charset=utf-8zContent-LengthN)ÚrfileÚrawÚ_sockr   Úsession_statsrE   rP   ÚpprintÚpformatÚencodeÚsend_responseÚsend_headerr   ÚlenÚend_headersÚwfiler'   )r   Ú	send_bodyr(   r   ÚstatsÚbodyr   r   r   Údo_GET^   s   
ý


ÿzStatsRequestHandler.do_GETc                 C   s   | j dd� dS )zServe a HEAD request.F)r^   N)ra   r   r   r   r   Údo_HEADp   s   zStatsRequestHandler.do_HEADc                 G   s"   t jrtj| |g|¢R Ž  d S d S r   )r   r$   r   Úlog_requestrG   r   r   r   rc   t   s   ÿzStatsRequestHandler.log_requestN)T)r   r-   r.   Ú__doc__rK   ra   rb   rc   r   r   r   r   rN   W   s    
rN   c                   @   s<   e Zd Zedfdd„Zdd„ Zddd„Zdd	„ Zd
d„ ZdS )ÚHTTPSServerThreadNc                 C   s<   d | _ t|df|p
t|ƒ| _| jj| _tj | ¡ d| _	d S )Nr   T)
Úflagr   r/   rC   r   Úportr   ÚThreadr   Údaemon)r   r   Úhostr   r   r   r   r   {   s   þ

zHTTPSServerThread.__init__c                 C   s   d| j j| jf S )Nz<%s %s>)r   r   rC   r   r   r   r   r   „   s   zHTTPSServerThread.__str__c                 C   s   || _ tj | ¡ d S r   )rf   r   rh   Ústart)r   rf   r   r   r   rk   ‡   s   zHTTPSServerThread.startc                 C   s:   | j r| j  ¡  z| j d¡ W | j ¡  d S | j ¡  w )Ngš™™™™™©?)rf   ÚsetrC   Úserve_foreverÚserver_closer   r   r   r   Úrun‹   s
   
zHTTPSServerThread.runc                 C   s   | j  ¡  d S r   )rC   Úshutdownr   r   r   r   Ústop“   s   zHTTPSServerThread.stopr   )	r   r-   r.   ÚHOSTr   r   rk   ro   rq   r   r   r   r   re   y   s    	
re   c                    sV   t  t j¡}| |¡ t|||ƒ‰ t ¡ }ˆ  |¡ | ¡  ‡ fdd„}|  	|¡ ˆ S )Nc                      s8   t jr	tj d¡ ˆ  ¡  t jrtj d¡ ˆ  ¡  d S )Nzstopping HTTPS server
zjoining HTTPS thread
)r   r$   r%   rB   r'   rq   r<   r   ©rC   r   r   ÚcleanupŸ   s   z"make_https_server.<locals>.cleanup)
ÚsslÚ
SSLContextÚPROTOCOL_SSLv23Úload_cert_chainre   r   ÚEventrk   ÚwaitÚ
addCleanup)ÚcaseÚcertfilerj   r   r   rf   rt   r   rs   r   Úmake_https_server—   s   


r~   Ú__main__zERun a test HTTPS server. By default, the current directory is served.)Údescriptionz-pz--portiQ  z(port to listen on (default: %(default)s))ÚtypeÚdefaultÚhelpz-qz--quietr$   TÚstore_falsezbe less verbose)Údestr‚   Úactionrƒ   z-sz--statsÚuse_stats_handlerFÚ
store_truezalways return stats pagez--curve-nameÚ
curve_nameÚstorez&curve name for EC-based Diffie-Hellman)r…   r�   r†   rƒ   z--dhÚdh_filez!PEM file containing DH parametersÚ z'Listening on https://localhost:{0.port}gš™™™™™¹?)DÚ
__future__r   r   r   r   Úfuture.builtinsr   r   Úfuturer   r5   r%   ru   rV   r    Úfuture.backports.urllibr	   Úurllib_parseÚfuture.backports.http.serverr
   r   r   r   Úfuture.backports.testr   Úimport_moduler   r6   ÚdirnameÚ__file__rL   rr   r<   ÚCERTFILEr   r/   rN   rh   re   r~   r   ÚargparseÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsrI   r$   r‡   r   ÚPY2Úgetcwdur:   Úgetcwdrv   ÚPROTOCOL_TLSv1r   rx   r‰   Úset_ecdh_curver‹   Úload_dh_paramsrg   rC   ÚprintrH   rm   r   r   r   r   Ú<module>   sx    
)"
ÿÿÿÿ
þÿ

Û