Ë
    tPêjî  ã                  óô   — d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ ej                  ej                  z  Z G d„ de	«      Z G d	„ d
e	«      Zddœdd„Zddœ	 	 	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Zy)é    )ÚannotationsN)ÚAnyÚFinal)ÚRequest)Ú	BaseModelÚField)Úverbose_proxy_loggerc                  ó8   — e Zd ZU dZded<   dZded<   dZded<   y)ÚNetworkContextNú
str | NoneÚ	client_ipÚhostFÚboolÚvia_trusted_proxy)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r   r   © ó    ú_/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/auth/network.pyr   r      s!   … Ø €IˆzÓ Ø€Dˆ*ÓØ#Ð�tÔ#r   r   c                  ó8   — e Zd ZU dZded<    ee¬«      Zded<   y)ÚTrustedProxyConfigFr   Úuse_forwarded_for)Údefault_factoryú	list[str]Útrusted_proxy_cidrsN)r   r   r   r   r   r   Úlistr   r   r   r   r   r      s   … Ø#Ð�tÓ#Ù%*¸4Ô%@Ð˜Ô@r   r   r   ©Úsetting_namec               óÊ  — | sg S t        | t        «      r>| j                  d«      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% c}S t        | t        t
        t        f«      rA| D �cg c]5  }t        |«      j                  «       sŒt        |«      j                  «       ‘Œ7 c}S t        j                  d|t        | «      j                  «       g S c c}w c c}w )Nú,z8Invalid %s value: expected a list of CIDR ranges, got %s)Ú
isinstanceÚstrÚsplitÚstripr   ÚtupleÚsetr	   ÚwarningÚtyper   )Úconfigured_rangesr    Úrs      r   Únormalize_cidr_rangesr-      s«   € ÙØˆ	ÜÐ#¤SÔ)Ø#4×#:Ñ#:¸3Ó#?ÖM˜aÀ1Ç7Á7Å9�—‘•	ÒMÐMÜÐ#¤d¬E´3Ð%7Ô8Ø(9ÖL 1¼SÀ»V¿\¹\½^”�A“—‘•ÒLÐLÜ× Ñ ØBØÜÐÓ×(Ñ(ôð
 €Iùò NùâLs   ¨C¾CÁ2C ÂC c               óÈ   — g }t        | |¬«      D ])  }	 |j                  t        j                  |d¬«      «       Œ+ |S # t        $ r t        j                  d||«       Y ŒPw xY w)Nr   F)Ústrictz Invalid CIDR in %s: %s, skipping)r-   ÚappendÚ	ipaddressÚ
ip_networkÚ
ValueErrorr	   r)   )r+   r    ÚnetworksÚcidrs       r   Úparse_trusted_proxy_rangesr6   (   so   € ð 24€HÜ%Ð&7ÀlÔSò aˆð	aØ�O‰OœI×0Ñ0°¸eÔDÕEðað
 €Oøô ò 	aÜ ×(Ñ(Ð)KÈ\Ð[_Ö`ð	aús   ”&>¾ A!Á A!c                óœ   ‡— | r|sy	 t        j                  | j                  «       «      Št	        ˆfd„|D «       «      S # t        $ r Y yw xY w)NFc              3  ó&   •K  — | ]  }‰|v –— Œ
 y ­w)Nr   )Ú.0ÚnetworkÚaddrs     €r   ú	<genexpr>z!ip_in_networks.<locals>.<genexpr>;   s   øè ø€ Ò7 7ˆt�wŒÑ7ùs   ƒ)r1   Ú
ip_addressr&   r3   Úany)r   r4   r;   s     @r   Úip_in_networksr?   4   sN   ø€ Ù™HØðÜ×*Ñ*¨9¯?©?Ó+<Ó=ˆô Ó7¨hÔ7Ó7Ð7øô ò Ùðús   ˆ#? ¿	AÁ
Ac                óN   — 	 t        j                  | «       y# t        $ r Y yw xY w)NTF)r1   r=   r3   )Úvalues    r   Ú_is_valid_iprB   >   s*   € ðÜ×Ñ˜UÔ#ØøÜò Ùðús   ‚ ˜	$£$c                óÌ  — | j                   r| j                   j                  nd}t        |j                  «      }|j                  rt        ||«      s|dfS | j                  j                  dd«      }|j                  d«      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% }}t        |«      D ]   }t        |«      sŒt        ||«      rŒ|dfc S  |dfS c c}w )a  Resolve the real client IP, trusting X-Forwarded-For only when the direct
    peer is itself a configured trusted proxy. Walks the header right-to-left and
    returns the first hop that is not a trusted proxy, so a forged left-most entry
    cannot spoof the client.NFzx-forwarded-forÚ r"   T)Úclientr   r6   r   r   r?   ÚheadersÚgetr%   r&   ÚreversedrB   )ÚrequestÚconfigÚpeerr4   Ú	forwardedÚhÚhopsÚhops           r   Úresolve_client_iprP   F   sÈ   € ð
 *1¯ª�'—.‘.×%Ò%¸T€DÜ0°×1KÑ1KÓL€HØ×#Ò#¬>¸$ÀÔ+IØ�Uˆ{ÐØ—‘×*Ñ*Ð+<¸bÓA€IØ&/§o¡o°cÓ&:ÖH ¸a¿g¹g½i�1—7‘7•9ÐH€DÐHÜ˜‹~ò ˆÜ˜Õ¤^°C¸Õ%BØ˜�9Òðð �ˆ:Ðùò	 Is   ÂC!ÂC!c                ón   — t        | |«      \  }}t        || j                  j                  d«      |¬«      S )Nr   )r   r   r   )rP   r   rF   rG   )rI   rJ   ÚipÚ	via_proxys       r   Úresolve_network_contextrT   W   s7   € Ü% g¨vÓ6�M€Bˆ	ÜØØ�_‰_× Ñ  Ó(Ø#ôð r   )r+   r   r    r$   Úreturnr   )r+   r   r    r$   rU   úlist[TrustedProxyNetwork])r   r   r4   rV   rU   r   )rA   r$   rU   r   )rI   r   rJ   r   rU   ztuple[str | None, bool])rI   r   rJ   r   rU   r   )Ú
__future__r   r1   Útypingr   r   Úfastapir   Úpydanticr   r   Úlitellm._loggingr	   ÚIPv4NetworkÚIPv6NetworkÚTrustedProxyNetworkr   r   r-   r6   r?   rB   rP   rT   r   r   r   ú<module>r_      s‹   ðÝ "ã ß å ß %å 1à×+Ñ+¨i×.CÑ.CÑCÐ ô$�Yô $ôA˜ô Að
 J_õ ð  4Iñ	Øð	Ø-0ð	àó	ó8óóô"r   