
    @OOf                         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 d dlm	Z	 d dl
mZ ded	efd
Z G d d      Zy)    N)Optional)ctx)
exceptions)http)
mode_specs)strutilsauthreturnc                     t        j                  d      }|j                  |       t        j                  d| z        dt        j                  t        j                  |             z   S )Nz.+:z'Invalid upstream auth specification: %ss   Basic )	recompilesearchr   OptionsErrorbase64	b64encoder   always_bytes)r	   patterns     _/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/addons/upstream_auth.pyparse_upstream_authr      sX    jjG~~d#%%&ORV&VWWV--h.C.CD.IJJJ    c                   r    e Zd ZU dZdZedz  ed<   d Zd Zde	j                  fdZde	j                  fdZy)	UpstreamAutha  
    This addon handles authentication to systems upstream from us for the
    upstream proxy and reverse proxy mode. There are 3 cases:

    - Upstream proxy CONNECT requests should have authentication added, and
      subsequent already connected requests should not.
    - Upstream proxy regular requests
    - Reverse proxy regular requests (CONNECT is invalid in this mode)
    Nr	   c                 B    |j                  dt        t           d d       y )Nupstream_authz
            Add HTTP Basic authentication to upstream proxy and reverse proxy
            requests. Format: username:password.
            )
add_optionr   str)selfloaders     r   loadzUpstreamAuth.load    s"    SM		
r   c                     d|v rKt         j                  j                  d | _        y t	        t         j                  j                        | _        y y )Nr   )r   optionsr   r	   r   )r   updateds     r   	configurezUpstreamAuth.configure+   s<    g%{{((0 	/0I0IJ		 &r   fc                 d    | j                   r$| j                   |j                  j                  d<   y y )NProxy-Authorization)r	   requestheadersr   r$   s     r   http_connect_upstreamz"UpstreamAuth.http_connect_upstream2   s'    997;yyAII34 r   c                    | j                   rt        |j                  j                  t        j
                        r=|j                  j                  dk(  r$| j                   |j                  j                  d<   y t        |j                  j                  t        j                        r$| j                   |j                  j                  d<   y y y )Nr   r&   Authorization)
r	   
isinstanceclient_conn
proxy_moder   UpstreamModer'   schemer(   ReverseModer)   s     r   requestheaderszUpstreamAuth.requestheaders6   s    991==33Z5L5LMII$$.;?99		!!"78AMM44j6L6LM59YY		!!/2 N r   )__name__
__module____qualname____doc__r	   bytes__annotations__r   r#   r   HTTPFlowr*   r3    r   r   r   r      sD     D%$,	
KAt}} A? ?r   r   )r   r   typingr   	mitmproxyr   r   r   mitmproxy.proxyr   mitmproxy.utilsr   r   r8   r   r   r;   r   r   <module>r@      s=     	      & $Kc Ke K+? +?r   