
    (i                        d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 ee
gdf   Zee
ged   f   Z ej                  d       ej                  d       ej                  d       ej                  d       ej                  d	       ej                  d
       ej                  d       ej                  d       ej                  d       ej                  d      g
Zdde
deddfdZde
defdZde
ddfdZde
ddfdZy)    N)	AwaitableCallable)urlparse)Web3ValidationErrorz127.0.0.0/8z
10.0.0.0/8z172.16.0.0/12z192.168.0.0/16z169.254.0.0/16z	0.0.0.0/8z::1/128z	fe80::/10zfc00::/7z::/128url
allow_httpreturnc                     t        |       }|j                  j                         }|dk(  ry |dk(  r|ry |dk(  rt        d|  d      t        d| d      )Nhttpshttpz$CCIP Read request to non-HTTPS URL 'zW' is not allowed. Set ``ccip_read_allow_http=True`` on the provider to allow HTTP URLs.zCCIP Read request with scheme 'z0' is not allowed. Only HTTPS URLs are permitted.)r   schemelowerr   )r   r   parsedr   s       O/var/www/br/venv/lib/python3.12/site-packages/web3/utils/ccip_url_validation.pyvalidate_ccip_url_schemer   !   s}    c]F]]  "FJ!23% 8T T
 	

 
)& 2) 	)     ip_strc                 ~    	 t        j                  |       t        fdt        D              S # t        $ r Y yw xY w)NFc              3   &   K   | ]  }|v  
 y w)N ).0networkaddrs     r   	<genexpr>z$_check_ip_blocked.<locals>.<genexpr><   s     B7twBs   )	ipaddress
ip_address
ValueErroranyBLOCKED_IP_NETWORKS)r   r   s    @r   _check_ip_blockedr    7   s@    ##F+ B.ABBB  s   0 	<<c                 8   t        |       }|j                  }|st        d|  d      	 t        j                  |d       }|D ]0  }t        |d   d         }t        |      s t        d|  d| d	       y # t        j
                  $ r t        d| d      w xY w
NzCCIP Read URL 'z' has no hostname.zCCIP Read URL hostname 'z' could not be resolved.   r   zCCIP Read request to 'z' is not allowed: resolved IP 'z)' is in a blocked private/reserved range.)r   hostnamer   socketgetaddrinfogaierrorstrr    )r   r   r$   	addrinfosaddrinfor   s         r   validate_ccip_url_hostr+   ?   s    c]FH!OC58J"KLL
&&x6	  Xa[^$V$%( .  &x'PR  ?? 
!&xj0HI
 	

s   A6 6#Bc                   K   t        |       }|j                  }|st        d|  d      t        j                         }	 |j                  d t        j                  |d        d {   }|D ]0  }t        |d   d         }t        |      s t        d|  d| d	       y 7 :# t        j                  $ r t        d| d      w xY wwr"   )r   r$   r   asyncioget_running_looprun_in_executorr%   r&   r'   r(   r    )r   r   r$   loopr)   r*   r   s          r   async_validate_ccip_url_hostr1   U   s     c]FH!OC58J"KLL##%D
..tV5G5GSWXX	  Xa[^$V$%( .  &x'PR  Y?? 
!&xj0HI
 	

s5   =C %B" %B &B" *!CC B" "#CC)F)r-   r   r%   typingr   r   urllib.parser   web3.exceptionsr   r(   CcipUrlValidatorAsyncCcipUrlValidator
ip_networkr   boolr   r    r+   r1   r   r   r   <module>r9      sH      SE4K(  #	$!78  I'I&I)I)*I)*I%I#I%I$I" # 4 D ,Cc Cd C  ,C D r   