§
    Æ! hù  ã                  ó`   — d Z ddlmZ ddl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
é    )Úannotations)ÚUnionÚcast)ÚASGI3ApplicationÚASGIReceiveCallableÚASGISendCallableÚ	HTTPScopeÚScopeÚWebSocketScopec                  ó*   — e Zd Z	 ddd„Zdd„Zdd„ZdS )ÚProxyHeadersMiddlewareú	127.0.0.1Úappr   Útrusted_hostsúlist[str] | strÚreturnÚNonec                óÌ   — || _         t          |t          ¦  «        r%d„ |                     d¦  «        D ¦   «         | _        nt          |¦  «        | _        d| j        v | _        d S )Nc                ó6   — h | ]}|                      ¦   «         ’ŒS © ©Ústrip©Ú.0Úitems     úZc:\xampp_lite_8_4\www\timesheet\venv\Lib\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_hostsú	list[str]ú
str | Nonec                ó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    sS   € ØÔð 	,Ø(¨Ô+Ð+åÐ2Ñ3Ô3ð 	ð 	ˆDØ˜4Ô-Ð-Ð-Ø���ð .ð ˆtr   Úscoper
   Úreceiver   Úsendr   c              ƒ  óˆ  K  — |d         dv �rt          t          d         |¦  «        }|                     d¦  «        }|r|d         nd }| j        s	|| j        v rÍt          |d         ¦  «        }d|v rX|d                              d¦  «                             ¦   «         }|d         d	k    r|                     d
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Úlatin1r5   r4   ÚwsÚschemes   x-forwarded-forc                ó6   — g | ]}|                      ¦   «         ‘ŒS r   r   r   s     r   ú
<listcomp>z3ProxyHeadersMiddleware.__call__.<locals>.<listcomp>A   s    € Ð,aÐ,aÐ,a¸d¨T¯ZªZ©\¬\Ð,aÐ,aÐ,ar   r   )r   r   Úgetr%   r   ÚdictÚdecoder   Úreplacer#   r.   r   )r&   r/   r0   r1   Úclient_addrÚclient_hostr7   Úx_forwarded_protoÚx_forwarded_forr(   r-   Úports               r   Ú__call__zProxyHeadersMiddleware.__call__*   su  è è € Ø�Œ=Ð1Ð1Ñ1Ý�Ð<Ô=¸uÑEÔEˆEØ27·)²)¸HÑ2EÔ2EˆKØ,7ÐA˜+ aœ.˜.¸TˆKàÔ ð 3 K°4Ô3EÐ$EÐ$EÝ˜u YÔ/Ñ0Ô0�à'¨7Ð2Ð2ð )0Ð0DÔ(E×(LÒ(LÈXÑ(VÔ(V×(\Ò(\Ñ(^Ô(^Ð%Ø˜V”}¨Ò3Ð3Ø*;×*CÒ*CÀFÈDÑ*QÔ*Q˜˜h™˜à*;˜˜h™à%¨Ð0Ð0ð '.Ð.@Ô&A×&HÒ&HÈÑ&RÔ&R�OØ,aÐ,aÀo×F[ÒF[Ð\_ÑF`ÔF`Ð,aÑ,aÔ,aÐ)Ø×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   N)r   )r   r   r   r   r   r   )r(   r)   r   r*   )r/   r
   r0   r   r1   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r'   r.   rF   r   r   r   r   r      sZ   € € € € € ð *5ð
6ð 
6ð 
6ð 
6ð 
6ðð ð ð ð4ð 4ð 4ð 4ð 4ð 4r   r   N)Ú__doc__Ú
__future__r   Útypingr   r   Úuvicorn._typesr   r   r   r	   r
   r   r   r   r   r   ú<module>rN      s�   ðð	ð 	ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ð Ð à tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tÐ tð34ð 34ð 34ð 34ð 34ñ 34ô 34ð 34ð 34ð 34r   