
    @OOfF                        U 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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 dlmZ dej&                  dej(                  fdZdej(                  dej(                  fdZdej&                  dej.                  fdZdej(                  defdZdej&                  defdZdej&                  defdZdej&                  defdZdej&                  defdZddej&                  defdZ  e!eee ee      Z"e!eeej&                  geez  f   f   e#d<    G d d      Z$y)    N)Callable)Sequence)Any)command)ctx)
exceptions)flow)http)assemble)strutilsfreturnc                     t        | dd       st        j                  d      t        | t        j
                        sJ | j                  j                         }|j                  d       |S )Nrequestz"Can't export flow with no request.Fstrict)	getattrr   CommandError
isinstancer
   HTTPFlowr   copydecoder   r   s     X/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/addons/export.pycleanup_requestr      sW    1i&%%&JKKa'''iinnGNN%N N    r   c                 L   | j                   j                  d       | j                   j                  dd      | j                  k(  r| j                   j                  d       | j                   j                  dd      | j                  k(  r| j                   j                  d       | S )Nzcontent-lengthhost z
:authority)headerspopgetr   )r   s    r   pop_headersr#      sx    OO()62&',,6F#<,<L)Nr   c                     t        | dd       st        j                  d      t        | t        j
                        sJ | j                  j                         }|j                  d       |S )Nresponsez#Can't export flow with no response.Fr   )	r   r   r   r   r
   r   r%   r   r   r   r%   s     r   cleanup_responser'   &   sW    1j$'%%&KLLa'''zz HOO5O!Or   c                    	 | j                  d      }|sJ 	 t	        d      D ci c]  }t        |      d|d c}dj                  fd|D              S # t        $ r t        j                  d      w xY wc c}w )	NTr   z%Request content must be valid unicode    z\x02xr   c              3   B   K   | ]  }j                  ||        y wN)r"   ).0xescape_control_charss     r   	<genexpr>z.request_content_for_console.<locals>.<genexpr>8   s     @a'++Aq1@s   )get_text
ValueErrorr   r   rangechrjoin)r   textir/   s      @r   request_content_for_consoler8   /   s    Ot,t
 <A9EaCFc!CM1E77@4@@@  O %%&MNNO Fs   A A=A:c                    t        |       }t        |      }dg}| j                  j                  r| j                  j                  d   nd }t        j
                  j                  rR|rP|j                  |k7  rA|j                   d|j                   d| d}|j                  d       |j                  |       |j                  j                  d      D ]6  \  }}|j                         d	k(  r|j                  d
       +|d| d| gz  }8 |j                  dk7  r|d|j                  gz  }|j                  |j                         |j                  r|dt!        |      gz  }dj#                  d |D              S )Ncurlr   :z:[]z	--resolveTmultizaccept-encodingz--compressedz-H: GETz-Xz-d c              3   F   K   | ]  }t        j                  |        y wr,   shlexquoter-   args     r   r0   zcurl_command.<locals>.<genexpr>X   s     5EKK$5   !)r   r#   server_connpeernamer   optionsexport_preserve_original_ippretty_hostportappendr    itemslowermethod
pretty_urlcontentr8   r5   )r   r   argsserver_addrresolvekvs          r   curl_commandrZ   ;   sW   a G'"G8D/0}}/E/E!--((+4K 	//;.(()7<<.;-qIK G%%D%1 (1779))KK'TaS1#;''D	( ~~w~~&&KK""#27;<<885555r   c                 l   t        |       }t        |      }|j                  }d|j                  |g}|j                  j                  d      D ]  \  }}|j                  | d|         dj                  d |D              }|j                  r$|dt        j                  t        |            z   z  }|S )Nr
   Tr=   r?   rA   c              3   F   K   | ]  }t        j                  |        y wr,   rC   rF   s     r   r0   z!httpie_command.<locals>.<genexpr>g   s     45;;s#4rH   z <<< )r   r#   rS   rR   r    rP   rO   r5   rT   rD   rE   r8   )r   r   urlrU   rX   rY   cmds          r   httpie_commandr_   [   s    a G'"G
 

CGNNC(D%%D%1 !1qcA3K !
((4t4
4Cw%@%IJJJJr   c                     t        |       }|j                  t        j                  d      t	        j
                  |      S )NzRequest content missing.)r   raw_contentr   r   r   assemble_requestr   s     r   raw_requestrc   m   s;    a G"%%&@AA$$W--r   c                     t        |       }|j                  t        j                  d      t	        j
                  |      S )NzResponse content missing.)r'   ra   r   r   r   assemble_responser&   s     r   raw_responserf   t   s;    "H#%%&ABB%%h//r   c                 \   t        | t        j                        xr& | j                  xr | j                  j                  du}t        | t        j                        xr& | j
                  xr | j
                  j                  du}|rx|rvt        |       t        |       g}t        | t        j                        r5| j                  r)|j                  | j                  j                                |j                  |      S |rt        |       S |rt        |       S t        j                  d      )zOReturn either the request or response if only one exists, otherwise return bothNz.Can't export flow with no request or response.)r   r
   r   r   ra   r%   rc   rf   	websocketrO   _get_formatted_messagesr5   r   r   )r   	separatorrequest_presentresponse_presentpartss        r   rawrn   {   s     	1dmm$XXqyy7L7LTX7X  	1dmm$ 	/JJ	/JJ""$.  +Qa1a'AKKLL<<>?~~e$$	1~	A%%&VWWr   )r:   httpiern   rc   rf   formatsc            	       p   e Zd Zd Z ej                  d      dee   fd       Z ej                  d      dedej                  de
j                  j                  dd	fd
       Z ej                  d      dedej                  dd	fd       Z ej                  d      dedej                  defd       Zy	)Exportc                 4    |j                  dt        dd       y )NrL   Fa[  
            When exporting a request as an external command, make an effort to
            connect to the same IP as in the original request. This helps with
            reproducibility in cases where the behaviour depends on the
            particular host we are connecting to. Currently this only affects
            curl exports.
            )
add_optionbool)selfloaders     r   loadzExport.load   s    )		
r   zexport.formatsr   c                 N    t        t        t        j                                     S )z@
        Return a list of the supported export formats.
        )listsortedrp   keys)rv   s    r   rp   zExport.formats   s    
 F7<<>*++r   zexport.fileformatr	   pathNc                    |t         vrt        j                  d|z        t         |   } ||      }	 t        |d      5 }t	        |t
              r|j                  |       n |j                  |j                  d             ddd       y# 1 sw Y   yxY w# t        $ r(}t        j                  t        |             Y d}~yd}~ww xY w)z(
        Export a flow to path.
        No such export format: %swbzutf-8N)rp   r   r   openr   byteswriteencodeOSErrorloggingerrorstr)rv   r}   r	   r~   funcrY   fpes           r   filezExport.file   s    
  ))*E*NOOFOJ	"dD! 0Ra'HHQKHHQXXg./	0 0 0
  	"MM#a&!!	"s5   B ABB BB B 	C CCzexport.clipr   c                     	 t        j                  | j                  ||             y# t         j                  $ r(}t	        j
                  t        |             Y d}~yd}~ww xY w)z8
        Export a flow to the system clipboard.
        N)	pyperclipr   
export_strPyperclipExceptionr   r   r   )rv   r}   r   r   s       r   clipzExport.clip   sG    
	"NN4??6156++ 	"MM#a&!!	"s   %( A#AA#exportc                     |t         vrt        j                  d|z        t         |   }t        j                   ||      dd      S )z6
        Export a flow and return the result.
        r   utf8backslashreplace)rp   r   r   r   
always_str)rv   r}   r   r   s       r   r   zExport.export_str   sF    
  ))*E*NOOv""47F4FGGr   )__name__
__module____qualname__rx   r   r   r   rp   r	   Flow	mitmproxytypesPathr   r   r    r   r   rr   rr      s    
 W__%&,# , ', W__]#"3 "dii "y7K7K "PT " $"" W__]#"3 "499 " " $" W__XH H Hs H Hr   rr   )s   

)%r   rD   collections.abcr   r   typingr   r   mitmproxy.typesr   r   r   r   r	   r
   mitmproxy.net.http.http1r   mitmproxy.utilsr   r   Requestr   r#   Responser'   r   r8   rZ   r_   r   rc   rf   rn   dictrp   __annotations__rr   r   r   r   <module>r      s]     $ $          - $tyy T\\  $,, 		 dmm 	A 	A# 	A6DII 6# 6@dii C $.499 . .0DII 0% 0X499 X X0 :>	:c8TYYKu455	6 ;H ;Hr   