� c��j1U���� ddlmZmZmZddlmZmZddlZddlZddl Z gd�Z gd�Z gd�Z d�Z hd �jZd �Zd �ZGd �d �ZGd�de�ZGd�de�ZGd�de�ZGd�de�Zy)�)� FileWrapper� guess_scheme� is_hop_by_hop)�Headers�_name_disallowed_re�N)� BaseHandler� SimpleHandler�BaseCGIHandler� CGIHandler� IISCGIHandler� read_environ)�Mon�Tue�Wed�Thu�Fri�Sat�Sun) N�Jan�Feb�Mar�Apr�May�Jun�Jul�Aug�Sep�Oct�Nov�Decc �t�tj|�\ }}}}}}}}} dt||t|||||fzS)Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)�time�gmtime� _weekdayname� _monthname) � timestamp�year�month�day�hh�mm�ss�wd�y�zs �)/usr/lib64/python3.12/wsgiref/handlers.py�format_date_timer2sN��-1�[�[��-C�*�D�%��b�"�b�"�a�� 0��R��#�z�%�0�$��B��4� ��> �HTTPS� AUTH_TYPE� PATH_INFO� REMOTE_USER� SCRIPT_NAME� CONTENT_TYPE� QUERY_STRING� REMOTE_IDENT�CONTENT_LENGTH�REQUEST_METHODc��t|�xsG|jd�xs4|jd�xs!|jd�xrt|dd�S)N�HTTP_�SSL_� REDIRECT_� )� _is_request� startswith�_needs_transcode)�ks r1rErEsT�� �q�>� C�Q�\�\�'�2� C�a�l�l�6�6J� C� �L�L�� %� A�*:�1�Q�R�5�*A�Cr3c��� tj�}d} djd|�i}tj j �D�]\}}t|�r�tjdk(r�tj jdd�j�}|jd�r!|jd�jd�}n�|jd �rny|jd �r%d |vr!|jd�jd�}nC|j|d�jd�}n!|j||�jd�}|||<��|S#t$rd}Y��HwxYw) N�surrogateescape�zutf-8�replace�win32�SERVER_SOFTWAREzmicrosoft-iis/� iso-8859-1zapache/z simplehttp/zpython/3) �sys�getfilesystemencoding�encode� LookupError�os�environ�itemsrE�platform�get�lowerrD�decode)�enc�escrSrF�v�softwares r1rr"sT��1� � #� #� %�C� �C�� � � �'�3���G� � � � � �"���1� �A� ��|�|�w�&��:�:�>�>�*;�R�@�F�F�H���&�&�'7�8�����)�0�0��>�A��(�(��3�� �'�'� �6�"�h�.�����)�0�0��>�A� ����i�0�7�7� �E�A� �H�H�S�#�&�-�-�l�;����� �W#�X �N��g �����s�E%�% E4�3E4c���eZdZ dZdZdZdZdZdZdZ e �Z e Z eZdZdZdgZdZdxZZdZdZd Zd �Zd �Zd �Zd �Zd�Zd�Zd#d�Zd�Z d�Z!d�Z"d�Z#d�Z$d�Z%d�Z&d�Z'd�Z(d�Z)d�Z*d�Z+d�Z,d�Z-d�Z.d �Z/d!�Z0d"�Z1y)$r )rrTFz1.0Nz500 Internal Server Error)z Content-Typez text/plains;A server error occurred. Please contact the administrator.rc�� |j�||j|j�|_|j �y#t t tf$rYy |j�Yy#|j��xYwxYw�N) � setup_environrS�start_response�result�finish_response�ConnectionAbortedError�BrokenPipeError�ConnectionResetError� handle_error�close)�self� applications r1�runzBaseHandler.run�sy��$�  � � � � �%�d�l�l�D�4G�4G�H�D�K� � � � "��&��9M�N� � � � ��!�!�#�� �� � � ��s$�AA�B�B�A0�0B�Bc��� |jj�x}|_|j�|j �|d<|j �|d<|j |d<|j|d<|j�|d<|j|d<|j|d<|j�|j|d<|jr*|jr|jd |j�yyy) Nz wsgi.inputz wsgi.errorsz wsgi.versionz wsgi.run_oncezwsgi.url_schemezwsgi.multithreadzwsgi.multiprocesszwsgi.file_wrapperrL)� os_environ�copyrS� add_cgi_vars� get_stdin� get_stderr� wsgi_version� wsgi_run_once� get_scheme�wsgi_multithread�wsgi_multiprocess�wsgi_file_wrapper� origin_server�server_software� setdefault)ri�envs r1r`zBaseHandler.setup_environ�s���4�!�_�_�1�1�3�3��d�l� ����#'�>�>�#3��L��#'�?�?�#4��M��#'�#4�#4��N��#'�#5�#5��O��#'�?�?�#4�� ��#'�#8�#8�� ��#'�#9�#9�� � � � !� !� -�'+�'=�'=�C�#� $� � � �$�"6�"6� �N�N�,�T�-A�-A� B�#7� r3c�8� |j�r|j�s2|jD]}|j|��|j �|j �y#t |jd�r|jj ��xYw)Nrh)�result_is_file�sendfilerb�write�finish_contentrh�hasattr�ri�datas r1rczBaseHandler.finish_response�s{�� � ��&�&�(�� � �� �K�K�D��J�J�t�$�(��#�#�%� �J�J�L�� ��t�{�{�G�,�� � �!�!�#� �s �AA&�&3Bc�.� t|j�Sr_)rrS�ris r1rtzBaseHandler.get_scheme�s��.��D�L�L�)�)r3c�� t|j�}|dk(r#t|j�|jd<yy#t t tf$rYywxYw)Nr�Content-Length)�lenrb�str� bytes_sent�headers� TypeError�AttributeError�NotImplementedError)ri�blockss r1�set_content_lengthzBaseHandler.set_content_length�s]��N� �����%�F��q�y�14�T�_�_�1E�� � �-�.�����.�)<�=� � � �s�A�A�Ac�D� d|jvr|j�yy)Nr�)r�r�r�s r1�cleanup_headerszBaseHandler.cleanup_headers�s&�� � �4�<�<� /� � #� #� %� 0r3c�� |r |jr� d}n|j� td��||_|j |�|_|j |d�}|j |� |jS#d}wxYw)NzHeaders already set!�Status)� headers_sentr��AssertionError�status� headers_class�_convert_string_type�_validate_statusr)rir�r��exc_info�name�vals r1razBaseHandler.start_response�s���B� � ��$�$��%� �� �\�\� %� �!7�8� 8��� ��)�)�'�2�� ��*�*�6�8�<�� ���f�%� ��z�z���! ��s � A:�:A>c���tj|�r td��t|�dkr t d��|ddj �s t d��|ddk7r t d��y)Nz,Control characters are not allowed in status�z$Status must be at least 4 characters�z(Status message must begin w/3-digit code� z+Status message must have a space after code)r�search� ValueErrorr�r��isdigit)rir�s r1r�zBaseHandler._validate_status�sn�� � %� %�f� -��K�L� L� �v�;��?� �!G�H� H��b�q�z�!�!�#� �!K�L� L� �!�9�� � �!N�O� O� r3c�r� t|�tur|Stdj|t |����)Nz!{0} must be of type str (got {1}))�typer�r��format�repr)ri�value�titles r1r�z BaseHandler._convert_string_types7��'� ��;�#� ��L�� /� 6� 6�u�d�5�k� J� � r3c�<� |jr�|j�r�|jd|j�d|j�d�j d��d|j vr>|jdttj��zj d��|jr=d|j vr.|jd|jzj d��yyyy|jd |jzj d��y) NzHTTP/r�z rM�Datez Date: %s �Serverz Server: %s z Status: %s ) rx�client_is_modern�_write� http_versionr�rPr�r2r#ryr�s r1� send_preamblezBaseHandler.send_preamble s���D� � � ��$�$�&�� � ��1B�1B�4�;�;�O�W�W�Xd�e�f�����-��K�K�'�*:�4�9�9�;�*G�G�O�O�P\�]���'�'�H�D�L�L�,H��K�K�!1�D�4H�4H�!H� P� P�Q]� ^�_�-I�'� '� �K�K�)�D�K�K�7�?�?� �M� Nr3c� � |js td��|js!t|�|_|j �n|xjt|�z c_|j |�|j�y)Nzwrite() before start_response())r�r�r�r�r�� send_headersr��_flushr�s r1rzBaseHandler.writesc��9� �{�{� �!B�C� C��"�"�!�$�i�D�O� � � � � �O�O�s�4�y� (�O� � � �D�� � � � r3c�� y)NF�r�s r1r~zBaseHandler.sendfile0s �� �"r3c�x� |js-|jjdd�|j�yy)Nr��0)r�r�rzr�r�s r1r�zBaseHandler.finish_contentEs4��<�� � � �L�L� #� #�$4�c� :� � � � � r3c�� t|jd�r|jj�dx|_x|_x|_|_d|_d|_y#dx|_x|_x|_|_d|_d|_wxYw)NrhrF)r�rbrhr�r�rSr�r�r�s r1rhzBaseHandler.closeOs��� � ;��t�{�{�7�+�� � �!�!�#�FJ� J�D�K� J�$�,� J���t�|��D�O�U��!2��GK� J�D�K� J�$�,� J���t�|��D�O�U��!2�s �0A�,B c��� |j�d|_|jr|j�r5|j �|j t |j��yy)NT)r�r�rxr�r�r��bytesr�r�s r1r�zBaseHandler.send_headers\sS��?� ���� ����!�!�T�%:�%:�%<� � � � � �K�K��d�l�l�+� ,�&=r3c�T� |j}|duxrt|j|�Sr_)rw� isinstancerb)ri�wrappers r1r}zBaseHandler.result_is_filees+��N��(�(���d�"�F�z�$�+�+�g�'F�Fr3c�D� |jdj�dk7S)N�SERVER_PROTOCOLzHTTP/0.9)rS�upperr�s r1r�zBaseHandler.client_is_modernks#��:��|�|�-�.�4�4�6�*�D�Dr3c�� ddlm}|j�}||d|d|d|j|�|j �d}y#d}wxYw)Nr)�print_exceptionr�)� tracebackr�rq�traceback_limit�flush)rir�r��stderrs r1� log_exceptionzBaseHandler.log_exceptionpsW�� � � 1��_�_�&�F� ��� �X�a�[�(�1�+��$�$�f� � �L�L�N��H��t�H�s �AA � Ac��� |jtj��|js<|j |j |j �|_|j�yyr_) r�rNr�r�� error_outputrSrarbrcr�s r1rgzBaseHandler.handle_error�sQ��L� ���3�<�<�>�*�� � ��+�+�D�L�L�$�:M�:M�N�D�K� � � � "�!r3c�� ||j|jddtj��|jgSr_)� error_status� error_headersrNr�� error_body)rirSras r1r�zBaseHandler.error_output�s9�� � �t�(�(��);�);�A�)>�s�|�|�~�N���� � r3c�� t�r_�r�r�s r1r�zBaseHandler._write�s�� � "�!r3c�� t�r_r�r�s r1r�zBaseHandler._flush�s�� � "�!r3c�� t�r_r�r�s r1rpzBaseHandler.get_stdin�s ��B�!�!r3c�� t�r_r�r�s r1rqzBaseHandler.get_stderr�s ��C�!�!r3c�� t�r_r�r�s r1rozBaseHandler.add_cgi_vars�s ��L�!�!r3r_)2�__name__� __module__� __qualname__rrrurvrsrxr�ryrrmrrwrr�r�r�r�r�r�rbr�r�r�rkr`rcrtr�r�rar�r�r�rr~r�rhr�r}r�r�rgr�r�r�rprqror�r3r1r r ^s���5��L������M��M��L��O� ��J�$���M��O�.�L�2�3�M�O�J���F�V��L��G��J��0C�*�4*� �&��4P� � O��*�*� ;�-�G� E� � #�!�&"�"�"�"�"r3r c�6�eZdZ dd�Zd�Zd�Zd�Zd�Zd�Zy) r c�X�||_||_||_||_||_||_yr_)�stdin�stdoutr��base_envrurv)rir�r�r�rS� multithread� multiprocesss r1�__init__zSimpleHandler.__init__�s0���� ��� ��� ��� � +���!-��r3c��|jSr_)r�r�s r1rpzSimpleHandler.get_stdin�s ���z�z�r3c��|jSr_)r�r�s r1rqzSimpleHandler.get_stderr�s ���{�{�r3c�N�|jj|j�yr_)rS�updater�r�s r1rozSimpleHandler.add_cgi_vars�s�� � � ���D�M�M�*r3c���|jj|�}|�|t|�k(ryddlm}|dt �||dx}r$|jj|�}||dx}r�#yy)Nr)�warnz9SimpleHandler.stdout.write() should not do partial writes)r�rr��warningsr��DeprecationWarning)rir�rbr�s r1r�zSimpleHandler._write�sr�����"�"�4�(�� �>�V�s�4�y�0� �!� � H� � ��6�7�m�#�d�#��[�[�&�&�t�,�F��6�7�m�#�d�#r3c�n�|jj�|jj|_yr_)r�r�r�r�s r1r�zSimpleHandler._flush�s#�� � � �����k�k�'�'�� r3N)TF) r�r�r�r�rprqror�r�r�r3r1r r �s*�� �(-�.���+�-�(r3r c��eZdZ dZy)r FN)r�r�r�rxr�r3r1r r �s���&�Mr3r c��eZdZ dZiZd�Zy)r Tc ���tj|tjjtj jtj t�dd��y)NFT�r�r�)r r�rNr��bufferr�r�rr�s r1r�zCGIHandler.__init__s?����� �#�)�)�"�"�C�J�J�$5�$5�s�z�z� �N��D� � r3N�r�r�r�rsrmr�r�r3r1r r s�� ��M��J� r3r c��eZdZ dZiZd�Zy)r Tc �d�t�}|jdd�}|jdd�}|dzj|dz�r|t|�d|d<tj |t jjt jjt j|dd��y)Nr6rIr8�/FTr�) rrVrDr�r r�rNr�r�r�r�)rirS�path�scripts r1r�zIISCGIHandler.__init__6s�������{�{�;��+�����]�B�/�� ��H� � ���� ,�#'��F� � �#5�G�K� ���� �#�)�)�"�"�C�J�J�$5�$5�s�z�z� ��T� � r3Nr�r�r3r1r r s��� �M��J�  r3r )�utilrrrr�rrrNrRr#�__all__r%r&r2� __contains__rCrErr r r r r r�r3r1�r�s���5�:�:�1��� �� A� �8� �� ��,� � C�9�xX"�X"�v ,(�K�,(�^�]��0 �� �