<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    ÍAÒ[)  ã               @   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/j1r¨e$Z2n"e#Z2e	j3rÀ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r0eAd2 Be/¡ƒ e@ Cd3¡ 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   úR/opt/alt/python37/lib/python3.7/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__Zserver_nameÚserver_port)r   r   r   r   Ú__str__   s    zHTTPSServer.__str__c          
   C   sh   y"| j  ¡ \}}| jj|dd}W n< t jk
r^ } ztjrLtj 	d| ¡ ‚ W d d }~X Y nX ||fS )NT)Zserver_sidezGot an error:
%s
)
ÚsocketZacceptr   Zwrap_socketÚerrorr   ÚverboseÚsysÚstderrÚwrite)r   ÚsockZaddrZ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   s~   t j |¡d }tj t j |¡¡}| d¡}td|ƒ}| j	}x:|D ]2}tj 
|¡\}}tj |¡\}}tj ||¡}qDW |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)Zurllibr	   ZurlparseÚosÚpathÚnormpathZunquoteÚsplitr   ÚrootÚ
splitdriveÚjoin)r   r,   ÚwordsZwordÚdriveÚheadr   r   r   Útranslate_path8   s    	


z'RootedHTTPRequestHandler.translate_pathc          	   G   s:   t jr6tj d| jj| jj| j 	¡ |  
¡ || f ¡ d S )Nz server (%s:%d %s):
   [%s] %s
)r   r   r   Ústdoutr!   Úserverr   r   ZrequestÚcipherZlog_date_time_string)r   ÚformatÚargsr   r   r   Úlog_messageL   s    z$RootedHTTPRequestHandler.log_messageN)	r   r%   r&   Úserver_versionÚherer/   Útimeoutr5   r;   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|ƒƒ¡ |  ¡  |r~| j |¡ dS )zServe a GET request.)Zsession_cacher8   Úcompressionzutf-8éÈ   zContent-typeztext/plain; charset=utf-8zContent-LengthN)ZrfileÚrawZ_sockr   Zsession_statsr8   r@   ÚpprintZpformatÚencodeZsend_responseZsend_headerr   ÚlenZend_headersZwfiler!   )r   Ú	send_bodyr"   r   ZstatsZbodyr   r   r   Údo_GET^   s    



zStatsRequestHandler.do_GETc             C   s   | j dd dS )zServe a HEAD request.F)rF   N)rG   )r   r   r   r   Údo_HEADp   s    zStatsRequestHandler.do_HEADc             G   s   t jrtj| |f|žŽ  d S )N)r   r   r   Úlog_request)r   r9   r:   r   r   r   rI   t   s    zStatsRequestHandler.log_requestN)T)r   r%   r&   Ú__doc__r<   rG   rH   rI   r   r   r   r   r?   W   s
   
r?   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'   r7   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   r7   )r   r   r   r   r   „   s    zHTTPSServerThread.__str__c             C   s   || _ tj | ¡ d S )N)rL   r   rN   Ústart)r   rL   r   r   r   rQ   ‡   s    zHTTPSServerThread.startc             C   s2   | j r| j  ¡  z| j d¡ W d | j ¡  X d S )Ngš™™™™™©?)rL   Úsetr7   Úserve_foreverZserver_close)r   r   r   r   Úrun‹   s
    
zHTTPSServerThread.runc             C   s   | j  ¡  d S )N)r7   Zshutdown)r   r   r   r   Ústop“   s    zHTTPSServerThread.stop)N)	r   r%   r&   ÚHOSTr   r   rQ   rT   rU   r   r   r   r   rK   y   s
   	
rK   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   r6   r!   rU   r1   r   )r7   r   r   ÚcleanupŸ   s    z"make_https_server.<locals>.cleanup)
ÚsslÚ
SSLContextZPROTOCOL_SSLv23Úload_cert_chainrK   r   ÚEventrQ   ÚwaitZ
addCleanup)ZcaseZcertfilerP   r   r   rL   rW   r   )r7   r   Úmake_https_server—   s    


r]   Ú__main__zERun a test HTTPS server. By default, the current directory is served.)Zdescriptionz-pz--portiQ  z(port to listen on (default: %(default)s))ÚtypeÚdefaultÚhelpz-qz--quietr   TZstore_falsezbe less verbose)Údestr`   Úactionra   z-sz--statsÚuse_stats_handlerFÚ
store_truezalways return stats pagez--curve-nameÚ
curve_nameZstorez&curve name for EC-based Diffie-Hellman)rb   r_   rc   ra   z--dhÚdh_filez!PEM file containing DH parametersÚ z'Listening on https://localhost:{0.port}gš™™™™™¹?)DZ
__future__r   r   r   r   Zfuture.builtinsr   r   Zfuturer   r+   r   rX   rC   r   Zfuture.backports.urllibr	   Zurllib_parseZfuture.backports.http.serverr
   r   r   r   Zfuture.backports.testr   Úimport_moduler   r,   ÚdirnameÚ__file__r=   rV   r1   ZCERTFILEr   r'   r?   rN   rK   r]   r   ÚargparseÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsr:   r   rd   r   ZPY2Zgetcwdur/   ÚgetcwdrY   ZPROTOCOL_TLSv1r   rZ   rf   Zset_ecdh_curverg   Zload_dh_paramsrM   r7   Úprintr9   rS   r   r   r   r   Ú<module>   sh   
)"





