
    'j                     r   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZ d dlZd dlmZ ddlmZmZ 	 e G d	 d
                      Z edd          dedefd            Z edd          dedefd            ZdeddfdZed             Z ed          dde
e         defd            ZdS )    N)contextmanager)	dataclass)	lru_cache)DictOptionalTuple)InsecureRequestWarning   )	InvalidIPInvalidProxyc            	           e Zd ZU dZeed<   dZee         ed<   dZee         ed<   e	dede
eeee         f         fd            ZdefdZe	d	edeeef         fd
            ZdS )Proxyz#
    Stores proxy information.
    serverNusernamepasswordreturnc                     t          j        d|           }|st          d|            |d         |d         |d         fS )z1
        Parses the proxy server string.
        z9^(?:(?P<schema>\w+)://)?(?P<url>.*?)(?:\:(?P<port>\d+))?$zInvalid proxy server: schemaurlport)rematchr   )r   proxy_matchs     O/home/ice/.hermes/hermes-agent/venv/lib/python3.11/site-packages/camoufox/ip.pyparse_serverzProxy.parse_server   sS    
 h[]cdd 	B@@@AAA8$k%&8+f:MMM    c                     |                      | j                  \  }}}|sd}| d}| j        r$|| j         z  }| j        r|d| j         z  }|dz  }||z  }|r|d| z  }|S )Nhttpz://:@)r   r   r   r   )selfr   r   r   results        r   	as_stringzProxy.as_string&   s     --dk::T 	F= 	((F} .-dm---cMF# 	!j$jj Fr   proxy_stringc                     | | dS )zD
        Converts the proxy to a requests proxy dictionary.
        )r   https )r$   s    r   as_requests_proxyzProxy.as_requests_proxy6   s     !!
 
 	
r   )__name__
__module____qualname____doc__str__annotations__r   r   r   staticmethodr   r   r#   r   r(   r'   r   r   r   r      s           KKK"Hhsm""""Hhsm"""NS NU3Xc]+B%C N N N \N3      
 
S#X 
 
 
 \
 
 
r   r      T)typedipr   c                 F    t          t          j        d|                     S )Nz^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$boolr   r   r2   s    r   
valid_ipv4r7   A   s    ;R@@AAAr   c                 F    t          t          j        d|                     S )Nz,^(([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4})$r4   r6   s    r   
valid_ipv6r9   F   s    H"MMNNNr   c                 j    t          |           s!t          |           st          d|            d S d S )NzInvalid IP address: )r7   r9   r   r6   s    r   validate_ipr;   K   sH    b>> 5*R.. 53r334445 5 5 5r   c               #      K   t          j                    5  t          j        dt                     d V  d d d            d S # 1 swxY w Y   d S )Nignore)category)warningscatch_warningsfilterwarningsr	   r'   r   r   _suppress_insecure_warningrB   P   s      		 	"	"  3IJJJJ                 s    AA
A)maxsizeproxyc                    g d}|D ]}	 t                      5  t          j        || rt                              |           nddd          }ddd           n# 1 swxY w Y   |                                 |j                                        }t          |           |c S # t          j	        j
        $ r}t          d|            |d}~wt          j        t          f$ r Y w xY wt          d          )z,
    Sends a request to a public IP api
    )zhttps://api.ipify.orgzhttps://checkip.amazonaws.comzhttps://ipinfo.io/ipzhttps://icanhazip.comzhttps://ifconfig.co/ipzhttps://ipecho.net/plainN   F)proxiestimeoutverifyzFailed to connect to proxy: zFailed to get IP address)rB   requestsgetr   r(   raise_for_statustextstripr;   
exceptions
ProxyErrorr   RequestExceptionr   )rD   URLSr   respr2   es         r   	public_iprU   W   sl   
	 	 	D   	+--  |>CME33E::: 	                 !!###""BOOOIII"- 	N 	N 	NEeEEFFAM)95 	 	 	D	
.
/
//sA   B$5AB$A	B$ A	!A B$$C'8CC'&C')N)r   r?   
contextlibr   dataclassesr   	functoolsr   typingr   r   r   rJ   urllib3.exceptionsr	   rO   r   r   r   r-   r5   r7   r9   r;   rB   rU   r'   r   r   <module>r[      s   				  % % % % % % ! ! ! ! ! !       ( ( ( ( ( ( ( ( ( (  5 5 5 5 5 5 / / / / / / / /
 +
 +
 +
 +
 +
 +
 +
 +
\ 3dB3 B4 B B B B 3dO3 O4 O O O O5C 5D 5 5 5 5
    40 0Xc] 0c 0 0 0 0 0 0r   