§
     @g½  ã                   ó`   — d Z ddlmZmZmZmZmZ ddlmZm	Z	m
Z
mZmZmZ  G d„ d¦  «        ZdS )a”  
This middleware can be used when a known proxy is fronting the application,
and is trusted to be properly setting the `X-Forwarded-Proto` and
`X-Forwarded-For` headers with the connecting client information.

Modifies the `client` and `scheme` information so that they reference
the connecting client, rather that the connecting proxy.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#Proxies
é    )ÚListÚOptionalÚTupleÚUnionÚcast)ÚASGI3ApplicationÚASGIReceiveCallableÚASGISendCallableÚ	HTTPScopeÚScopeÚWebSocketScopec                   ó‚   — e Zd Z	 ddddeee         ef         ddfd„Zdee         dee         fd	„Z	 	 	 	 	 	 	 	 dd„Z	dS )ÚProxyHeadersMiddlewareú	127.0.0.1Úappr   Útrusted_hostsÚreturnNc                 óÌ   — || _         t          |t          ¦  «        r%d„ |                     d¦  «        D ¦   «         | _        nt          |¦  «        | _        d| j        v | _        d S )Nc                 ó6   — h | ]}|                      ¦   «         ’ŒS © ©Ústrip©Ú.0Úitems     úT/var/www/piapp/venv/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.pyú	<setcomp>z2ProxyHeadersMiddleware.__init__.<locals>.<setcomp>   s    € Ð!TÐ!TÐ!T°4 $§*¢*¡,¤,Ð!TÐ!TÐ!Tó    ú,Ú*)r   Ú
isinstanceÚstrÚsplitr   ÚsetÚalways_trust)Úselfr   r   s      r   Ú__init__zProxyHeadersMiddleware.__init__   sj   € ð
 ˆŒÝ�m¥SÑ)Ô)ð 	4Ø!TÐ!T¸=×;NÒ;NÈsÑ;SÔ;SÐ!TÑ!TÔ!TˆDÔÐå!$ ]Ñ!3Ô!3ˆDÔØ 4Ô#5Ð5ˆÔÐÐr   Úx_forwarded_for_hostsc                 ób   — | j         r|d         S t          |¦  «        D ]}|| j        vr|c S Œd S )Nr   )r%   Úreversedr   )r&   r(   Úhosts      r   Úget_trusted_client_hostz.ProxyHeadersMiddleware.get_trusted_client_host$   sU   € ð Ôð 	,Ø(¨Ô+Ð+åÐ2Ñ3Ô3ð 	ð 	ˆDØ˜4Ô-Ð-Ð-Ø���ð .ð ˆtr   Úscoper   Úreceiver	   Úsendr
   c              ƒ   óp  K  — |d         dv �rt          t          d         |¦  «        }|                     d¦  «        }|r|d         nd }| j        s	|| j        v rÁt          |d         ¦  «        }d|v rL|d                              d¦  «                             ¦   «         }|d         d	k    r|d
k    rdnd|d<   n||d<   d|v rX|d                              d¦  «        }d„ |                     d¦  «        D ¦   «         }	|  	                    |	¦  «        }
d}|
|f|d<   |  
                    |||¦  «        ƒ d {V —†S )NÚtype)ÚhttpÚ	websocket)r   r   Úclientr   Úheaderss   x-forwarded-protoÚlatin1r3   ÚhttpsÚwssÚwsÚschemes   x-forwarded-forc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   r   r   s     r   ú
<listcomp>z3ProxyHeadersMiddleware.__call__.<locals>.<listcomp>M   s-   € ð -ð -ð -Ø)-˜Ÿ
š
™œð-ð -ð -r   r   )r   r   Úgetr%   r   ÚdictÚdecoder   r#   r,   r   )r&   r-   r.   r/   Úclient_addrÚclient_hostr5   Úx_forwarded_protoÚx_forwarded_forr(   r+   Úports               r   Ú__call__zProxyHeadersMiddleware.__call__0   sŠ  è è € ð �Œ=Ð1Ð1Ñ1Ý�Ð<Ô=¸uÑEÔEˆEØ5:·Y²Y¸xÑ5HÔ5HˆKØ,7ÐA˜+ aœ.˜.¸TˆKàÔ ð 3 K°4Ô3EÐ$EÐ$EÝ˜u YÔ/Ñ0Ô0�à'¨7Ð2Ð2ð  Ð 4Ô5×<Ò<¸XÑFÔF×LÒLÑNÔNð &ð ˜V”}¨Ò3Ð3à%6¸'Ò%AÐ%A˜E˜EÀtð ˜h™˜ð +<˜˜h™à%¨Ð0Ð0ð '.Ð.@Ô&A×&HÒ&HÈÑ&RÔ&R�Oð-ð -Ø1@×1FÒ1FÀsÑ1KÔ1Kð-ñ -ô -Ð)ð  ×7Ò7Ð8MÑNÔN�DØ�DØ'+¨T l�E˜(‘Oà—X’X˜e W¨dÑ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3r   )r   )r-   r   r.   r	   r/   r
   r   N)
Ú__name__Ú
__module__Ú__qualname__r   r   r"   r'   r   r,   rE   r   r   r   r   r      s»   € € € € € ð 0;ð
6ð 
6àð
6ð ˜T #œY¨˜^Ô,ð
6ð 
ð	
6ð 
6ð 
6ð 
6ð
Ø%)¨#¤Yð
à	�#Œð
ð 
ð 
ð 
ð$4Øð$4Ø'<ð$4ØDVð$4à	ð$4ð $4ð $4ð $4ð $4ð $4r   r   N)Ú__doc__Útypingr   r   r   r   r   Úuvicorn._typesr   r	   r
   r   r   r   r   r   r   r   ú<module>rL      s½   ðð	ð 	ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð=4ð =4ð =4ð =4ð =4ñ =4ô =4ð =4ð =4ð =4r   