
    7i00                         d dl mZ ddlmZmZmZ  eh d      Z edg d      Z G d de	      Z
d	dd	d
defdZefdZd ZdefdZy	)    )
namedtuple   )
BadRequestloggerundquote>   	FORWARDEDX_FORWARDED_BYX_FORWARDED_FORX_FORWARDED_HOSTX_FORWARDED_PORTX_FORWARDED_PROTO	Forwarded)byfor_hostprotoc                        e Zd Z fdZ xZS )MalformedProxyHeaderc                 R    || _         || _        || _        t        |   |||       y N)headerreasonvaluesuper__init__)selfr   r   r   	__class__s       I/var/www/html/venv/lib/python3.12/site-packages/waitress/proxy_headers.pyr   zMalformedProxyHeader.__init__   s)    
/    )__name__
__module____qualname__r   __classcell__)r   s   @r   r   r      s    0 0r   r   NTFc                 *      fd}|S )Nc                 l   t         }| d   }
dk(  s|
k(  r	 t        | 	      }rt        | |	        | |      S # t        $ ri} 	j                  d|j                  ||j
                  |j                         t        d|j                   d      }|j                  | |      cY d }~S d }~ww xY w)NREMOTE_ADDR*)trusted_proxy_counttrusted_proxy_headersr   z3Malformed proxy header "%s" from "%s": %s value: %szHeader "z" malformed.)log_warningr   )
PROXY_HEADERSparse_proxy_headersr   warningr   r   r   r   wsgi_responseclear_untrusted_headers)environstart_responseuntrusted_headersremote_peerexerrorappclear_untrustedlog_untrustedr   trusted_proxyr(   r)   s         r   translate_proxy_headersz9proxy_headers_middleware.<locals>.translate_proxy_headers$   s    )m,C;-#?D$7(;*?!	%!$ #*f 7N++# ( 	DIIIIIHH #Xbii[#EF**7NCC	Ds   A 	B3
AB.(B3.B3 )r6   r9   r(   r)   r7   r8   r   r:   s   ``````` r   proxy_headers_middlewarer<      s    , ,< #"r   c           	      D   |
t               }g }dx}x}x}}d }	t        t              }
d }d|v rd| v r	 g }| d   j                  d      }|D ]T  }|j                         }t	        |      }d|vr"d|v r|d   d	k7  r|j                  d
| d	       D|j                  |       V || d  }|d   }	|
j                  d       dj                  || d        j                         | d<   d|v rd| v r	 g }| d   j                  d      }|D ].  }|j                         }t	        |      }|j                  |       0 || d  }|d   }|
j                  d       dj                  || d        j                         | d<   d|v r8	 t	        | j                  dd            }d|v r |        |
j                  d       d|v r8	 t	        | j                  dd            }d|v r |        |
j                  d       d|v r|
j                  d       d|v r| j                  dd       }t        dhz
  }
|rg }|j                  d      }	 |D ]  }|j                         }dx}x}}dx}}|j                  d      D ]  }|j                         }|s|j                  d       \  }}}|d k7  rt        d!      |j                         |k7  rt        d"      |j                         |k7  rt        d#      |d$k(  rt	        |      }|d%k(  rt	        |      }|d&k(  rt	        |      }|d'k(  rt	        |      } |j                  d(|z          |j                  t!        ||||               	 || d  }dj                  || d        j                         | d<   |d d d   D ]2  }|j"                  xs |	}	|j$                  xs |}|j&                  xs |}4 |r@|j                         }|d*vrt        |rd+d,|      dd,|      || d-<   |s|d.k(  rd/}|d0k(  rd1}|rd|v rJ|d   d	k7  rB|j)                  dd2      \  }}|j                         t        |      }}||k7  r|}|| d3<   || d4<   nk|| d3<   || d4<   |r_|d5vrd6j+                  ||      | d4<   nE|d/k(  r| d-   d.k7  rd6j+                  ||      | d4<   n"|d1k(  r| d-   d0k7  rd6j+                  ||      | d4<   |rt        |      | d7<   |	rud|	v rM|	d   d	k7  rE|	j)                  dd2      \  }}t-        |j                               | d8<   |j                         | d9<   nt-        |	j                               | d8<   | d8   | d:<   |
S # t        $ r}t        dt        |      | d         d }~ww xY w# t        $ r}t        dt        |      | d         d }~ww xY w# t        $ r}t        dt        |      | d         d }~ww xY w# t        $ r}t        dt        |      | d         d }~ww xY w# t        $ r}t        d)t        |      | d         d }~ww xY w);N c                      t        d      )Nz8Unspecified behavior for multiple values found in header)
ValueErrorr;   r   r   raise_for_multiple_valuesz6parse_proxy_headers.<locals>.raise_for_multiple_valuesP   s    STTr   zx-forwarded-forHTTP_X_FORWARDED_FOR,.:][r   r
   zX-Forwarded-Forzx-forwarded-hostHTTP_X_FORWARDED_HOSTr   zX-Forwarded-Hostzx-forwarded-protoHTTP_X_FORWARDED_PROTOr   zX-Forwarded-Protozx-forwarded-portHTTP_X_FORWARDED_PORTr   zX-Forwarded-Portzx-forwarded-byr	   	forwardedHTTP_FORWARDEDr   ;=z"Invalid forwarded-pair missing "="z)Token may not be surrounded by whitespacez)Value may not be surrounded by whitespacer   forr   r   zUnknown Forwarded token: %sr   >   httphttpszForwarded Proto=zunsupported proto valuezwsgi.url_schemerQ   80rR   443r   SERVER_NAME	HTTP_HOST>   rS   rT   z{}:{}SERVER_PORTr&   REMOTE_PORTREMOTE_HOST)setr+   splitstripr   appendremovejoin	Exceptionr   strgetlower	partitionr@   r-   r   r   r   r   rsplitformatstrip_brackets)r0   r(   r)   r   forwarded_forforwarded_hostforwarded_protoforwarded_portrL   client_addrr2   rA   raw_forwarded_forforward_hopr4   forwarded_host_multipleraw_forwarded_hostforward_hostproxiesraw_forwardedforwarded_elementforwarded_bypairtokenequalsr   proxyr   portaddrs                                 r   r,   r,   E   s    $ #MDFFNF_F~	KM*U 116LPW6W	M '(> ? E Ec J0 6)//1&{3 k);&;r?c+A!((1[M);<!((56 *+>*>*?@M'*K$$%67.1hh!#6"6"78/eg *+ 	33#w.	&(#!()@!A!G!G!L 2 =+113'5'..|<=
 '>?R>R>S&T#4Q7N$$%78/2xx"$7#7#890eg +, 33	&w{{3KR'PQOo%)+$$%89 22	%gkk2I2&NONn$)+$$%78 00 	  !12++KK 0$7	)[M9 !,/	X%2 ,! %6$;$;$=!CEEE022-33C8 ND::<D +/>>#+>(E65}()MNN{{}-()TUU{{}-()TUU}'/%(0&)1%')*25/ ''Du'LM=N@ $m^_Q,` ../0$'HH../0%

%' 	 !& TrT] 	=E**3K"ZZ9>N#kk<_O	=
 )//1"33&&/") 5H)  &5!"&(!%')!&. ^B%73%>'..sA6JD$s4y$D %!% &*GM"#1GK  &4GM"#1GK !6+2>>&,GK( $t+8I0Jf0T+2>>&,GK( $u,9J1Kw1V+2>>&,GK( !$^!4++b/S"8$++C3JD$%3DJJL%AGM"%)ZZ\GM"%3K4E4E4G%HGM"!(!7[  	&!3r7G4J,K 	2  	&"CGW5L-M 	  	&#SWg6N.O 	  	&"CGW5L-M 	@  	X&{CGWEU=VWW	Xsz   B1U .BU: >7V$ :7W =D#W8 	U7U22U7:	V!VV!$	W-WW	W5W00W58	XXXc                 0    | d   dk(  r| d   dk(  r| dd S | S )Nr   rH   rF   rG   r   r;   )r{   s    r   rg   rg   >  s(    Aw#~$r(c/AbzKr   c           	         |D cg c]  }| j                  d|z   d      dur| }}|rZ|rW|D cg c])  }dj                  d |j                  d      D              + }} |j                  ddj                  |             y y y c c}w c c}w )NHTTP_F-c              3   <   K   | ]  }|j                           y wr   )
capitalize).0xs     r   	<genexpr>z*clear_untrusted_headers.<locals>.<genexpr>O  s     ?Q\\^?s   _zNRemoved untrusted headers (%s). Waitress recommends these be removed upstream.z, )popr_   r[   r-   )r0   r2   r*   r   r   untrusted_headers_removeds         r   r/   r/   D  s    
 (!;;w'/u< 	! ! 0 4%
 HH?V\\#->??%
! %
 	 II/0	
 1{!%
s
    B.B	)collectionsr   	utilitiesr   r   r   	frozensetr+   r   r`   r   r<   r,   rg   r/   r;   r   r   <module>r      sq    " 3 3	 {$CD	09 0 '#V AGvr -2&
r   