Ë
    ö-ªi~B  ã                   óZ  — d dl Z d dlZd dlZd dlmZmZmZmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZmZ dZdZdZd	Z ej8                  d
 ej:                  e«      z  «      Z ej8                  d«      Z ej8                  d«      Z  G d„ de!«      Z" G d„ de"«      Z#y)é    N)ÚChunkedReaderÚLengthReaderÚ	EOFReaderÚBody)	ÚInvalidHeaderÚInvalidHeaderNameÚ
NoMoreDataÚInvalidRequestLineÚInvalidRequestMethodÚInvalidHTTPVersionÚLimitRequestLineÚLimitRequestHeadersÚUnsupportedTransferCoding)ÚInvalidProxyLineÚForbiddenProxyRequest)ÚInvalidSchemeHeaders)Úbytes_to_strÚsplit_request_uriiþ  i €  z!#$%&'*+-.^_`|~z[%s0-9a-zA-Z]+z[a-z#]zHTTP/(\d)\.(\d)c                   ó2   — e Zd Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zy)	ÚMessagec                 óf  — || _         || _        || _        || _        d | _        g | _        g | _        d | _        |j                  rdnd| _	        d| _
        |j                  | _        | j                  dk  s| j                  t        kD  rt        | _        |j                  | _        | j                  dk  rt        | _        | j                  xs t        }| j                  |dz   z  dz   | _        | j!                  | j                  «      }| j                  j#                  |«       | j%                  «        y )NÚhttpsÚhttpFr   é   é   )ÚcfgÚunreaderÚ	peer_addrÚremote_addrÚversionÚheadersÚtrailersÚbodyÚis_sslÚschemeÚ
must_closeÚlimit_request_fieldsÚMAX_HEADERSÚlimit_request_field_sizeÚDEFAULT_MAX_HEADERFIELD_SIZEÚmax_buffer_headersÚparseÚunreadÚset_body_reader)Úselfr   r   r   Úmax_header_field_sizeÚunuseds         úM/var/www/timesheet/venv/lib/python3.12/site-packages/gunicorn/http/message.pyÚ__init__zMessage.__init__"   s  € ØˆŒØ ˆŒØ"ˆŒØ$ˆÔØˆŒØˆŒØˆŒØˆŒ	Ø!$§¢‘g°ˆŒØˆŒð %(×$<Ñ$<ˆÔ!Ø×%Ñ%¨Ò*Ø×,Ñ,¬{Ò:Ü(3ˆDÔ%Ø(+×(DÑ(DˆÔ%Ø×(Ñ(¨1Ò,Ü,HˆDÔ)ð !%× =Ñ =Ò ]ÔA]ÐØ"&×";Ñ";Ø" QÑ&ñ#(Ø*+ñ#,ˆÔð —‘˜DŸM™MÓ*ˆØ�‰×Ñ˜VÔ$Ø×ÑÕó    c                 ó   — d| _         y )NT)r&   ©r/   s    r2   Úforce_closezMessage.force_close@   s	   € Øˆ�r4   c                 ó   — t        «       ‚©N)ÚNotImplementedError)r/   r   s     r2   r,   zMessage.parseC   s   € Ü!Ó#Ð#r4   c                 ó´  — | j                   }g }|j                  d«      D �cg c]  }t        |«      ‘Œ }}d}i }|rnOd|j                  v s5t	        | j
                  t        «      r| j
                  d   |j                  v r|j                  }|�rDt        |«      | j                  k\  rt        d«      ‚|j                  d«      }	t        |	«      t        d«      z   }
|	j                  d«      dk  rt        |	«      ‚|	j                  dd«      \  }}| j                   j                  r|j                  d	«      }t         j#                  |«      st%        |«      ‚|j'                  «       }|j)                  d	«      g}|r—|d   j+                  d
«      rƒ|j                  d«      }	|
t        |	«      t        d«      z   z  }
|
| j,                  cxkD  rdkD  rt        d«      ‚ |j/                  |	j1                  d«      «       |r|d   j+                  d
«      rŒƒdj3                  |«      }|
| j,                  cxkD  rdkD  rt        d«      ‚ ||v r2|||   k(  }|rdnd}|r|| j4                  k7  rt7        «       ‚d}|| _        d|v r@| j                   j8                  dk(  rn&| j                   j8                  dk(  r�Œ%t%        |«      ‚|j/                  ||f«       |r�ŒD|S c c}w )Nó   
FÚ*r   zlimit request headers fieldsz
ú:é   ú 	)ú ú	z!limit request headers fields sizez	 rA   r   r   TÚ_Ú	dangerousÚdrop)r   Úsplitr   Úforwarded_allow_ipsÚ
isinstancer   ÚtupleÚsecure_scheme_headersÚlenr'   r   ÚpopÚfindr   Ústrip_header_spacesÚrstripÚTOKEN_REÚ	fullmatchr   ÚupperÚlstripÚ
startswithr)   ÚappendÚstripÚjoinr%   r   Ú
header_map)r/   ÚdataÚfrom_trailerr   r!   ÚlineÚlinesÚscheme_headerrJ   ÚcurrÚheader_lengthÚnameÚvalueÚsecurer%   s                  r2   Úparse_headerszMessage.parse_headersF   sÁ  € Ø�h‰hˆØˆð 15·
±
¸7Ó0CÖD¨”˜dÕ#ÐDˆÐDð ˆØ "ÐÙð Ø�S×,Ñ,Ñ,Ü˜TŸ^™^¬UÔ3Ø—‘ Ñ" c×&=Ñ&=Ñ=Ø$'×$=Ñ$=Ð!ò Ü�7‹|˜t×8Ñ8Ò8Ü)Ð*HÓIÐIð —9‘9˜Q“<ˆDÜ ›I¬¨F«Ñ3ˆMØ�y‰y˜‹~ Ò"Ü# DÓ)Ð)ØŸ*™* S¨!Ó,‰KˆD�%Ø�x‰x×+Ò+Ø—{‘{ 5Ó)�Ü×%Ñ% dÔ+Ü'¨Ó-Ð-ð —:‘:“<ˆDà—\‘\ %Ó(Ð)ˆEñ ˜E !™H×/Ñ/°Ô<Ø—y‘y “|�Ø¤ T£¬S°«[Ñ!8Ñ8�Ø  4×#@Ñ#@ÔDÀ1ÒDÜ-ð /<ó =ð =ð Eð —‘˜TŸZ™Z¨Ó.Ô/ñ ˜E !™H×/Ñ/°Õ<ð —H‘H˜U“OˆEà˜t×<Ñ<Ô@¸qÒ@Ü)Ð*MÓNÐNð Að Ð,Ñ,ØÐ"7¸Ñ"=Ñ=�Ù$*™°�Ù Ø §¡Ò,Ü2Ó4Ð4à$(�MØ"(�D”Kð �d‰{Ø—8‘8×&Ñ&¨+Ò5àØ—X‘X×(Ñ(¨FÒ2ñ ô ,¨DÓ1Ð1à�N‰N˜D %˜=Ô)ó ðB ˆùòc Es   ¢Kc                 óL  — d}d }| j                   D ]É  \  }}|dk(  r|�t        d| ¬«      ‚|}Œ|dk(  sŒ#|j                  «       dk(  r|rt        d| ¬«      ‚d}ŒH|j                  «       dk(  r|sŒ^t        d| ¬«      ‚|j                  «       dk(  r2| j                  «        | j                  j
                  rŒ¥t        |«      ‚| j                  «        t        |«      ‚ |rœ| j                  d	k  r3| j                  «        | j                  j
                  st        d| ¬«      ‚|�3| j                  «        | j                  j
                  st        d| ¬«      ‚t        t        | | j                  «      «      | _        y |�k	 t        |«      j                  «       rt        |«      }nt        d| ¬«      ‚	 |d
k  rt        d| ¬«      ‚t        t!        | j                  |«      «      | _        y t        t#        | j                  «      «      | _        y # t        $ r t        d| ¬«      ‚w xY w)NFzCONTENT-LENGTH)ÚreqzTRANSFER-ENCODINGÚchunkedTÚidentityÚ )r?   r?   r   )r!   r   Úlowerr7   r   Útolerate_dangerous_framingr   r    r   r   r   r#   ÚstrÚ	isnumericÚintÚ
ValueErrorr   r   )r/   rf   Úcontent_lengthr`   ra   s        r2   r.   zMessage.set_body_readerž   s  € ØˆØˆà!Ÿ\™\ò 	;‰MˆT�5ØÐ'Ò'Ø!Ð-Ü'Ð(8¸dÔCÐCØ!&‘ØÐ,Ó,Ø—;‘;“= IÒ-áÜ+Ð,?ÀTÔJÐJØ"‘GØ—[‘[“] jÒ0ò Ü+Ð,?ÀTÔJÐJØ—[‘[“] bÒ(ð ×$Ñ$Ô&ØŸ8™8×>Ó>Ü7¸Ó>Ð>ð ×$Ñ$Ô&ô 4°EÓ:Ð:ð=	;ñ@ ð �|‰|˜fÒ$à× Ñ Ô"Ø—x‘x×:Ò:Ü'Ð(;ÀÔFÐFØÐ)ð × Ñ Ô"à—x‘x×:Ò:Ü'Ð(8¸dÔCÐCÜœ]¨4°·±Ó?Ó@ˆD�IØÐ'ð@Ü�~Ó&×0Ñ0Ô2Ü%(¨Ó%8‘Nä'Ð(8¸dÔCÐCð #ð  Ò!Ü#Ð$4¸$Ô?Ð?äœ\¨$¯-©-¸ÓHÓIˆD�IäœY t§}¡}Ó5Ó6ˆD�Iøô ò @Ü#Ð$4¸$Ô?Ð?ð@ús   Å>2H ÈH#c                 óÊ   — | j                   ry| j                  D ]9  \  }}|dk(  sŒ|j                  «       j                  d«      }|dk(  r y|dk(  r y n | j                  dk  S )NTÚ
CONNECTIONr@   Úclosez
keep-aliveF©r?   r   )r&   r!   ri   rV   r    )r/   ÚhÚvs      r2   Úshould_closezMessage.should_closeã   sh   € Ø�?Š?ØØ—l‘lò 	‰FˆQ�Ø�LÓ Ø—G‘G“I—O‘O EÓ*�Ø˜’<ÙØ˜,Ò&Ù Ùð	ð �|‰|˜vÑ%Ð%r4   N©F)	Ú__name__Ú
__module__Ú__qualname__r3   r7   r,   rc   r.   rv   © r4   r2   r   r   !   s$   „ òò<ò$óVòpC7óJ&r4   r   c                   óX   ‡ — e Zd Zd
ˆ fd„	Zdd„Zd„ Zdd„Zd„ Zd„ Zd„ Z	d„ Z
ˆ fd	„Zˆ xZS )ÚRequestc                 ó  •— d | _         d | _        d | _        d | _        d | _        |j
                  | _        | j
                  dk  s| j
                  t        k\  rt        | _        || _        d | _        t        ‰| �)  |||«       y ©Nr   )ÚmethodÚuriÚpathÚqueryÚfragmentÚlimit_request_lineÚMAX_REQUEST_LINEÚ
req_numberÚproxy_protocol_infoÚsuperr3   )r/   r   r   r   r‡   Ú	__class__s        €r2   r3   zRequest.__init__ò   s{   ø€ ØˆŒØˆŒØˆŒ	ØˆŒ
ØˆŒð #&×"8Ñ"8ˆÔØ×#Ñ# aÒ'Ø×*Ñ*Ô.>Ò>Ü&6ˆDÔ#à$ˆŒØ#'ˆÔ Ü‰Ñ˜˜h¨	Õ2r4   c                 ó”   — |j                  «       }|s%|r
t        «       ‚t        |j                  «       «      ‚|j	                  |«       y r9   )ÚreadÚStopIterationr	   ÚgetvalueÚwrite)r/   r   ÚbufÚstoprY   s        r2   Úget_datazRequest.get_data  s7   € Ø�}‰}‹ˆÙÙÜ#“oÐ%Ü˜SŸ\™\›^Ó,Ð,Ø�	‰	�$�r4   c                 ón  — t        j                  «       }| j                  ||d¬«       | j                  ||| j                  «      \  }}| j                  t        |«      «      rEt        j                  «       }|j                  |«       | j                  ||| j                  «      \  }}| j                  |«       t        j                  «       }|j                  |«       |j                  «       }|j                  d«      }|d d dk(  }	 |j                  d«      }|d d dk(  }|dk  rG|sE| j                  ||«       |j                  «       }t        |«      | j                  kD  rt        d«      ‚nŒg|r| j                  j                  |dd  «       y| j!                  |d | d	¬
«      | _        ||dz   d  }d }|S )NT)r‘   s   

r   r<   r   zmax buffer headersr4   F)rZ   r   )ÚioÚBytesIOr’   Ú	read_liner…   Úproxy_protocolr   r�   Úparse_request_linerŽ   rM   rK   r+   r   r   r-   rc   r!   )	r/   r   r�   r[   ÚrbufrY   ÚidxÚdoneÚrets	            r2   r,   zRequest.parse  s’  € Ü�j‰j‹lˆØ�‰�h ¨$ˆÔ/ð —^‘^ H¨c°4×3JÑ3JÓK‰
ˆˆdð ×Ñœ|¨DÓ1Ô2ä—*‘*“,ˆCØ�I‰I�dŒOØŸ™¨°#°t×7NÑ7NÓO‰JˆD�$à×Ñ Ô%Ü�j‰j‹lˆØ�	‰	�$Œð �|‰|‹~ˆØ�i‰i˜Ó$ˆà�B�Qˆx˜7Ñ"ˆØØ—)‘)˜KÓ(ˆCØ˜˜�8˜wÑ&ˆDà�QŠw™tØ—‘˜h¨Ô,Ø—|‘|“~�Ü�t“9˜t×6Ñ6Ò6Ü-Ð.BÓCÐCàð ñ Ø�M‰M× Ñ   a b Ô*Øà×)Ñ)¨$¨t°¨*À5Ð)ÓIˆŒà�3˜‘7�8ˆnˆØˆØˆ
r4   c                 óD  — |j                  «       }	 |j                  d«      }|dk\  r||cxkD  rdkD  rn nt        ||«      ‚nRt        |«      dz
  |cxkD  rdkD  rn nt        t        |«      |«      ‚| j	                  ||«       |j                  «       }Œƒ|d | ||dz   d  fS )Nr<   r   r   )rŽ   rM   r   rK   r’   )r/   r   r�   ÚlimitrY   rš   s         r2   r–   zRequest.read_line8  s¦   € Ø�|‰|‹~ˆàØ—)‘)˜GÓ$ˆCØ�aŠxà˜”? •?Ü*¨3°Ó6Ð6ØÜ�4‹y˜1‰}˜uÔ( qÕ(Ü&¤s¨4£y°%Ó8Ð8Ø�M‰M˜( CÔ(Ø—<‘<“>ˆDð ð �T�c�
Ø�S˜1‘W�X�ð ð 	 r4   c                 ó¸   — | j                   j                  sy| j                  dk7  ry|j                  d«      sy| j	                  «        | j                  |«       y)z¬        Detect, check and parse proxy protocol.

        :raises: ForbiddenProxyRequest, InvalidProxyLine.
        :return: True for proxy protocol line else False
        Fr?   ÚPROXYT)r   r—   r‡   rT   Úproxy_protocol_access_checkÚparse_proxy_protocol)r/   r[   s     r2   r—   zRequest.proxy_protocolJ  sO   € ð �x‰x×&Ò&Øà�?‰?˜aÒØà�‰˜wÔ'Øà×(Ñ(Ô*Ø×!Ñ! $Ô'àr4   c                 óæ   — d| j                   j                  vrYt        | j                  t        «      r>| j                  d   | j                   j                  vrt        | j                  d   «      ‚y y y )Nr=   r   )r   Úproxy_allow_ipsrH   r   rI   r   r6   s    r2   r¡   z#Request.proxy_protocol_access_check_  sa   € à�t—x‘x×/Ñ/Ñ/Ü�t—~‘~¤uÔ-Ø—‘˜qÑ!¨¯©×)AÑ)AÑAÜ'¨¯©°qÑ(9Ó:Ð:ð Bð .ð 0r4   c                 ó8  — |j                  d«      }t        |«      dk7  rt        |«      ‚|d   }|d   }|d   }|dvrt        d|z  «      ‚|dk(  rJ	 t        j                  t        j
                  |«       t        j                  t        j
                  |«       nN|d	k(  rI	 t        j                  t        j                  |«       t        j                  t        j                  |«       	 t        |d
   «      }t        |d   «      }d|cxk  rdk  rn nd|cxk  rdk  sn t        d|z  «      ‚|||||dœ| _
        y # t        j                  $ r t        |«      ‚w xY w# t        j                  $ r t        |«      ‚w xY w# t        $ r t        d|z  «      ‚w xY w)NrA   é   r?   r   é   )ÚTCP4ÚTCP6zprotocol '%s' not supportedr¨   r©   r   é   zinvalid port %sr   iÿÿ  )r—   Úclient_addrÚclient_portÚ
proxy_addrÚ
proxy_port)rF   rK   r   ÚsocketÚ	inet_ptonÚAF_INETÚerrorÚAF_INET6rm   rn   rˆ   )r/   r[   ÚbitsÚprotoÚs_addrÚd_addrÚs_portÚd_ports           r2   r¢   zRequest.parse_proxy_protocolf  sŽ  € Ø�z‰z˜#‹ˆäˆt‹9˜Š>Ü" 4Ó(Ð(ð �Q‘ˆØ�a‘ˆØ�a‘ˆð Ð(Ñ(Ü"Ð#@À5Ñ#HÓIÐIØ�FŠ?ð-Ü× Ñ ¤§¡°Ô8Ü× Ñ ¤§¡°Õ8ð �fŠ_ð-Ü× Ñ ¤§¡°&Ô9Ü× Ñ ¤§¡°&Ô9ð	=Ü˜˜a™“\ˆFÜ˜˜a™“\ˆFð �fÔ% Õ%¨A°Ô,@¸5Ô,@Ü"Ð#4°tÑ#;Ó<Ð<ð $Ø!Ø!Ø Ø ñ$
ˆÕ øô' —<‘<ò -Ü& tÓ,Ð,ð-ûô —<‘<ò -Ü& tÓ,Ð,ð-ûô ò 	=Ü"Ð#4°tÑ#;Ó<Ð<ð	=ús&   ÁAD= Â!AE Ã*F Ä=EÅE>ÆFc                 óÀ  — |j                  dd«      D �cg c]  }t        |«      ‘Œ }}t        |«      dk7  rt        t        |«      «      ‚|d   | _        | j
                  j                  sbt        j                  | j                  «      rt        | j                  «      ‚dt        |d   «      cxk  rdk  sn t        | j                  «      ‚t        j                  | j                  «      st        | j                  «      ‚| j
                  j                  r| j                  j                  «       | _        |d   | _        	 t        | j                  «      }|j"                  xs d| _        |j$                  xs d| _        |j&                  xs d| _        t(        j                  |d   «      }|€t+        |d   «      ‚t-        |j/                  d«      «      t-        |j/                  d«      «      f| _        d| j0                  cxk  rd	k  s.n | j
                  j2                  st+        | j0                  «      ‚y y c c}w # t         $ r t        t        |«      «      ‚w xY w)
Nó    r   r§   r   é   r?   rh   rs   )r   r   )rF   r   rK   r
   r€   r   Ú!permit_unconventional_http_methodÚMETHOD_BADCHAR_REÚsearchr   rP   rQ   Úcasefold_http_methodrR   r�   r   rn   r‚   rƒ   r„   Ú
VERSION_REr   rm   Úgroupr    Ú"permit_unconventional_http_version)r/   Ú
line_bytesÚbitr´   ÚpartsÚmatchs         r2   r˜   zRequest.parse_request_line“  sè  € Ø-7×-=Ñ-=¸dÀAÓ-FÖG c”˜SÕ!ÐGˆÐGÜˆt‹9˜Š>Ü$¤\°*Ó%=Ó>Ð>ð ˜1‘gˆŒð �x‰x×9Ò9Ü ×'Ñ'¨¯©Ô4Ü*¨4¯;©;Ó7Ð7Øœ˜D ™G›Ô*¨Ô*Ü*¨4¯;©;Ó7Ð7ä×!Ñ! $§+¡+Ô.Ü& t§{¡{Ó3Ð3ð �8‰8×(Ò(ØŸ+™+×+Ñ+Ó-ˆDŒKð ˜‘7ˆŒð	?Ü% d§h¡hÓ/ˆEð —J‘JÒ$ "ˆŒ	Ø—[‘[Ò& BˆŒ
ØŸ™Ò,¨"ˆŒô ×$Ñ$ T¨!¡WÓ-ˆØˆ=Ü$ T¨!¡WÓ-Ð-Ü˜EŸK™K¨›NÓ+¬S°·±¸Q³Ó-@ÐAˆŒØ˜Ÿ™Ô.¨Ô.à—8‘8×>Ò>Ü(¨¯©Ó6Ð6ð ?ð /ùòM Høô6 ò 	?Ü$¤\°*Ó%=Ó>Ð>ð	?ús   •H:ÅH? È?Ic                 ó´   •— t         ‰| �  «        t        | j                  j                  t
        «      r%t        t        | j                  d«      «      | _        y y r   )	r‰   r.   rH   r#   Úreaderr   r   r   r   )r/   rŠ   s    €r2   r.   zRequest.set_body_reader¿  s>   ø€ Ü‰ÑÔ!Ü�d—i‘i×&Ñ&¬	Ô2Üœ\¨$¯-©-¸Ó;Ó<ˆD�Ið 3r4   )r?   rw   )r   )rx   ry   rz   r3   r’   r,   r–   r—   r¡   r¢   r˜   r.   Ú__classcell__)rŠ   s   @r2   r}   r}   ñ   s8   ø„ õ3ó"ò+óZ ò$ò*;ò+
òZ*7÷X=ð =r4   r}   )$r”   Úrer¯   Úgunicorn.http.bodyr   r   r   r   Úgunicorn.http.errorsr   r   r	   r
   r   r   r   r   r   r   r   r   Úgunicorn.utilr   r   r†   r(   r*   ÚRFC9110_5_6_2_TOKEN_SPECIALSÚcompileÚescaperP   r¾   rÁ   Úobjectr   r}   r{   r4   r2   ú<module>rÓ      s«   ðó 
Û 	Û ç KÓ K÷÷ õ ÷ IÝ 5ß 9àÐ Ø€Ø#Ð ð  2Ð Øˆ2�:‰:Ð'¨9¨2¯9©9Ð5QÓ+RÑSÓT€Ø�B—J‘J˜xÓ(Ð àˆR�Z‰ZÐ*Ó+€
ôM&ˆfô M&ô`Q=ˆgõ Q=r4   