
    >i                    p    d dl mZ d dlZd dlmZmZ erd dlmZ  ej                  e	      Z
 G d d      Zy)    )annotationsN)TYPE_CHECKINGOptional)Optionsc                  B    e Zd ZdZddZd	dZd
dZedd       ZddZ	y)ProxyManagerz
    Manages proxy configuration and credentials for CDP automation.

    Extracts embedded credentials from proxy URLs, secures authentication
    information, and sanitizes command-line arguments.
    c                <    || _         t        j                  d       y)z
        Initialize proxy manager with browser options.

        Args:
            options: Browser options potentially containing proxy configuration.
                Will be modified if credentials are found.
        z%ProxyManager initialized with optionsN)optionsloggerdebug)selfr
   s     k/var/www/python/tenders/Scrapper/venv/lib/python3.12/site-packages/pydoll/browser/managers/proxy_manager.py__init__zProxyManager.__init__   s     <=    c                   d}d}| j                         }|p|\  }}| j                  |      \  }}}}	|r>| j                  ||	       d}||f}t        j	                  dt        |       d       ||fS t        j	                  d       ||fS )a  
        Extract and secure proxy authentication credentials.

        Searches for proxy settings, extracts embedded credentials,
        and sanitizes options to remove credential exposure.

        Returns:
            Tuple of (has_private_proxy, (username, password)).
        F)NNTz&Proxy credentials extracted (user_set=z); argument sanitizedz-Proxy configured without embedded credentials)_find_proxy_argument_parse_proxy_update_proxy_argumentr   r   bool)
r   private_proxycredentials	proxy_argindexproxy_valuehas_credentialsusernamepasswordclean_proxys
             r   get_proxy_credentialsz"ProxyManager.get_proxy_credentials   s     ;G--/	 !*E;?C?P?PQ\?]<OXx++E;? $'2<T(^<LLab k)) LMk))r   c                    t        | j                  j                        D ]L  \  }}|j                  d      s|j	                  dd      d   }t
        j                  d| d|        ||fc S  y)z
        Find proxy server configuration in browser options.

        Returns:
            Tuple of (index, proxy_url) if found, None otherwise.
        --proxy-server==   zFound proxy argument at index : N)	enumerater
   	arguments
startswithsplitr   r   )r   r   argvalues       r   r   z!ProxyManager._find_proxy_argument>   sq     $DLL$:$:; 	$JE3~~/0		#q)!,=eWBugNOe|#		$
 r   c                    d| vrddd| fS 	 d}d}d| v r| j                  dd      \  }} d}| j                  dd      \  }}|j                  dd      \  }}|r| d| n|}d|||fS # t        $ r	 ddd| fcY S w xY w)	a  
        Parse proxy URL to extract authentication credentials.

        Args:
            proxy_value: Proxy URL potentially containing username:password@server:port.

        Returns:
            Tuple of (has_credentials, username, password, clean_proxy_url).
        @FN z://r#   T:)r(   
ValueError)r   scheme
has_scheme
creds_partserver_partr   r   r   s           r   r   zProxyManager._parse_proxyL   s     k!$k11	2FJ#&1&7&7q&A#!
&1&7&7Q&?#J!+!1!1#q!9Hh9CVHC}5K8[88 	2$k11	2s   AA& &A87A8c                r    d| | j                   j                  |<   t        j                  d| d|        y)z4Replace proxy argument with credential-free version.r!   z Proxy argument updated at index r$   N)r
   r&   r   r   )r   r   r   s      r   r   z#ProxyManager._update_proxy_argumenti   s7    *9+(Gu%7wbNOr   N)r
   r   )returnz0tuple[bool, tuple[Optional[str], Optional[str]]])r5   zOptional[tuple[int, str]])r   strr5   z.tuple[bool, Optional[str], Optional[str], str])r   intr   r6   r5   None)
__name__
__module____qualname____doc__r   r   r   staticmethodr   r    r   r   r   r      s0    	>*> 2 28Pr   r   )
__future__r   loggingtypingr   r   pydoll.browser.optionsr   	getLoggerr9   r   r   r>   r   r   <module>rD      s4    "  *.			8	$`P `Pr   