o
    h^                     @   s  d dl m Z  d dlZd dlZd dlZzd dlmZ W n ey)   d dlmZ Y nw d dl	m
Z
 d dlmZ d dlmZ d dlmZ ejd  d	ksejd  d	krWejd
 dksejd  d	krlejd
 dkrlejd d	ksejd  dkrejd
 dkrejd dkrejZnejZzd dl	mZ W n ey   d dlmZ Y nw zd dl	mZ W n- ey   zd dlZW n ey   d dlZY nw d dl	mZ G dd dejeZY nw G dd deZG dd de
Z
dd ZG dd dejZdS )    )datetimeN)Path)upath)WSGIRequestHandler)CommandError)	runserver)StaticFilesHandler                     )WSGIServerException)error)ThreadedWSGIServer)
WSGIServerc                   @   s   e Zd ZdZdS )r   z$A threaded version of the WSGIServerN)__name__
__module____qualname____doc__ r   r   r/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/sslserver/management/commands/runsslserver.pyr   +   s    r   c                       s   e Zd Zd fdd	Z  ZS )SecureHTTPServerFc                    s6   t t| j|||d tj| j||dttjd| _d S )Nipv6T)certfilekeyfileserver_sidessl_version	cert_reqs)superr   __init__sslwrap_socketsocket_ssl_version	CERT_NONE)selfaddressZhandler_clscertificatekeyr   	__class__r   r   r#   1   s   
zSecureHTTPServer.__init__)F)r   r   r   r#   __classcell__r   r   r-   r   r   0   s    r   c                       s   e Zd Z fddZ  ZS )r   c                    s   t t|  }d|d< |S )NonZHTTPS)r"   r   get_environ)r)   envr-   r   r   r1   :   s   zWSGIRequestHandler.get_environ)r   r   r   r1   r/   r   r   r-   r   r   9   s    r   c                  C   sX   dd l } ztt| jjd }W |S  ty+   tjt	| j}tj
|d}Y |S w )Nr   certs)Z	sslserverstrr   __file__parent	NameErrorospathdirnamer   join)Z
app_moduleZssl_dirZmod_pathr   r   r   default_ssl_files_dir@   s   r<   c                       sD   e Zd Z fddZdZ fddZdd Zdd	 Zd
d Z  Z	S )Commandc                    sz   t t| | |jdtjt dddf |jdtjt dddf |jdd	d
d ddf |jdd	dddf d S )Nz--certificatezdevelopment.crtzPath to the certificate)defaulthelpz--keyzdevelopment.keyzPath to the key filez
--nostaticuse_static_handlerstore_falsez'Do not use internal static file handler)destactionr>   r?   z--static
store_truez Use internal static file handler)rB   rC   r?   )r"   r=   add_argumentsadd_argumentr8   r9   r;   r<   )r)   parserr-   r   r   rE   N   s*   

zCommand.add_argumentsz*Run a Django development server over HTTPSc                    s8   t t| j|i |}|dd}| |rt|S |S )z
        Returns the static files serving handler wrapping the default handler,
        if static files should be served. Otherwise just returns the default
        handler.

        insecure_servingF)r"   r=   get_handlergetshould_use_static_handlerr   )r)   argsoptionshandlerrH   r-   r   r   rI   a   s
   
zCommand.get_handlerc                 C   s8   ddl m} |d}|rdS |d u rd|jv rdS dS )Nr   settingsr@   Tzdjango.contrib.staticfilesF)django.confrP   rJ   ZINSTALLED_APPS)r)   rM   rP   r@   r   r   r   rK   n   s   

z!Command.should_use_static_handlerc                 C   s4   t j|std| t j|std| d S )NzCan't find key at %szCan't find certificate at %s)r8   r9   existsr   )r)   key_file	cert_filer   r   r   check_certsz   s   zCommand.check_certsc                 O   s  | d}| d}| || ddlm} ddlm} | d}| dd}tjd	kr.d
p/d}	| j	d | j
dd | j	dt d|  |j| jrSd| j pU| j| j|	||d  ||j z$| j|i |}
t| jt| jft||| jd}||
 |  W d S  ty   t d }dddd}z||jd jd  }W n tt fy   t!|}Y nw | j"	d|  t#$d Y d S  t%y   |r| j	| t&d Y d S w )Nr,   r+   r   rO   )translationZuse_threadingshutdown_message win32z
CTRL-BREAKz	CONTROL-CzValidating models...

T)Zdisplay_num_errorsz%(started_at)s
Django version %(version)s, using settings %(settings)r
Starting development server at https://%(addr)s:%(port)s/
Using SSL certificate: %(cert)s
Using SSL key: %(key)s
Quit the server with %(quit_command)s.
z%B %d, %Y - %Xz[%s])Z
started_atversionrP   addrportquit_commandcertr,   r   r
   z.You don't have permission to access that port.zThat port is already in use.z%That IP address can't be assigned-to.)r   b   c   z	Error: %s)'rJ   rU   rQ   rP   Zdjango.utilsrV   sysplatformstdoutwritecheckr   nowstrftimeget_versionZSETTINGS_MODULEZ	_raw_ipv6r[   r\   activateZLANGUAGE_CODErI   r   intr   Zuse_ipv6Zset_appserve_foreverr   exc_inforL   AttributeErrorKeyErrorr4   stderrr8   _exitKeyboardInterruptexit)r)   rL   rM   rS   rT   rP   rV   	threadingrW   r]   rN   servereZERRORSZ
error_textr   r   r   	inner_run   sb   



zCommand.inner_run)
r   r   r   rE   r?   rI   rK   rU   rv   r/   r   r   r-   r   r=   M   s    
r=   ) r   r8   r$   ra   pathlibr   ImportErrorZdjango.utils._osr   Zdjango.core.servers.basehttpr   Zdjango.core.management.baser   Zdjango.core.management.commandsr   Z#django.contrib.staticfiles.handlersr   version_infoPROTOCOL_TLSr'   PROTOCOL_SSLv23r   r&   r   r   socketserverSocketServerr   ThreadingMixInr   r<   r=   r   r   r   r   <module>   sN    **	