
    @OOfI:                       U d dl mZ d dlZd dl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 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 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 dl$m&Z& d%dZ' e(d       e(d       e(dd       e(d      d Z)d!e*d"<    G d# d$      Z+y)&    )annotationsN)IO)Optional)CloseReason)contentviews)ctx)dns)
exceptions)flow)
flowfilter)http)click)response_codes)CONTENT_VIEW_LINES_CUTOFF)TCPFlow)
TCPMessage)UDPFlow)
UDPMessage)human)strutils)vt_codes)WebSocketData)WebSocketMessagec                    t        |      j                         j                         }d| z  dj                  fd|D              S )N 
c              3  (   K   | ]	  }|z     y wN ).0ipads     X/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/addons/dumper.py	<genexpr>zindent.<locals>.<genexpr>$   s     ,S1W,s   )strstrip
splitlinesjoin)ntextlinesr"   s      @r#   indentr,   !   s:    IOO((*E
'C99,e,,,    Tboldbluefggreenr2   r/   )	highlightoffsetheaderr*   z dict[str, dict[str, str | bool]]CONTENTVIEW_STYLESc                      e Zd ZdddZd Zd Zd dZdd!dZd"dZd#dZ	d	 Z
	 	 	 	 d$d
Zd%dZd&dZd&dZd'dZd Zd Zd Zd(dZd(dZd)dZd Zd Zd Zd*dZd Zd Zd+dZd,dZd,dZy)-DumperNc                    d | _         |xs t        j                  | _        t	        j
                  | j                        | _        y r   )filtersysstdoutoutfpr   ensure_supportedout_has_vt_codes)selfoutfiles     r#   __init__zDumper.__init__0   s0    15%3
 ( 9 9$** Er-   c                (   |j                  dt        ddt         d       |j                  dt        ddt        j
                  D cg c]  }|j                  j                          c}       |j                  d	t        t           d d
       y c c}w )Nflow_detail   ax  
            The display detail level for flows in mitmdump: 0 (quiet) to 4 (very verbose).
              0: no output
              1: shortened request URL with response status code
              2: full request URL with response status code and HTTP headers
              3: 2 + truncated response content, content of WebSocket and TCP messages (content_view_lines_cutoff: z8)
              4: 3 + nothing is truncated
            dumper_default_contentviewautozThe default content view mode.)choicesdumper_filterzLimit which flows are dumped.)	
add_optionintr   r%   r   viewsnamelowerr   )rB   loaderr!   s      r#   loadzDumper.load5   s    t
 uN  tO O		
 	(,-9-?-?@QVV\\^@ 	 	
 	Xc]D2Q	
 As   !Bc                   d|v rVt         j                  j                  r4	 t        j                  t         j                  j                        | _        y d | _        y y # t        $ r$}t        j                  t        |            |d }~ww xY w)NrK   )
r   optionsrK   r   parser<   
ValueErrorr
   OptionsErrorr%   )rB   updatedes      r#   	configurezDumper.configureN   sr    g%{{((A","2"23;;3L3L"MDK # & " A$11#a&9q@As   2A 	B	%BB	c                N    |r"| j                   rt        j                  |fi |}|S r   )rA   	miniclickstyle)rB   r*   r]   s      r#   r]   zDumper.styleX   s%    T**??4151Dr-   c                t    |rt        ||      } | j                  |fi |}t        || j                         y )N)file)r,   r]   printr?   )rB   r*   identr]   s       r#   echozDumper.echo]   s4    %&Dtzz$(%(d$r-   c                    |j                   D ]Z  \  }}t        j                  |      }| j                  |d      }t        j                  |      }| j	                  | d| d       \ y )Nr0   r1   :    )ra   )fieldsr   bytes_to_escaped_strr]   rb   )rB   headerskvksvss         r#   _echo_headerszDumper._echo_headersc   se    NN 	.DAq..q1BB6*B..q1BIIBrdm1I-		.r-   c                T    |sy | j                  ddd       | j                  |       y )Nz--- HTTP Trailersmagentare   )r2   ra   )rb   rm   )rB   trailerss     r#   _echo_trailerszDumper._echo_trailersj   s)    		%)1	=8$r-   c           	   #  z   K   d |D ].  \  }} | j                   |fi t        j                  |i        0 y w)Nz    )r]   r8   get)rB   liner]   r*   s       r#   	_colorfulzDumper._colorfulp   sD      	HKE4$**TG%7%;%;E2%FGG	Hs   9;c                P    t        j                  t        j                  j                  ||      \  }}}|rt        j                  |       t        j                  j                  dk(  r/t        j                  |t        j                  j                        }n|}dj                   fd|D              }|r" j                  d        j                  |       t        |d       r j                  ddd       t        j                  j                  d	k\  r j                  d       y y )
N   z
c              3  ^   K   | ]$  }d j                  j                  |             & yw) N)r(   ru   )r    rt   rB   s     r#   r$   z'Dumper._echo_message.<locals>.<genexpr>   s#     VbggdnnT&:;Vs   *-ry   z	(cut off)re   T)ra   dim   )r   get_message_content_viewr   rT   rH   loggingdebugrF   	itertoolsislicecontent_view_lines_cutoffr(   rb   next)rB   messager   _r+   errorlines_to_echocontents   `       r#   _echo_messagezDumper._echo_messageu   s    
 '??KK22GT
5% MM% ;;""a'%,,s{{<<M "M++VVVIIbMIIgtIIkI5;;""a'IIbM (r-   c                   |j                   dk(  r| j                  ddd      S |j                  j                  rK| j                  t	        j
                  t        j                  |j                  j                                    S y)Nrequest[replay]yellowTr4   ry   )	is_replayr]   client_connpeernamer   escape_control_charactersr   format_address)rB   r   s     r#   _fmt_clientzDumper._fmt_client   sp    >>Y&::jXD:AA&&::22(()9)9)B)BC  r-   c                   | j                  |      }d|j                  v rdnd}|j                  j                  |z   }t	        dd      j                  |j                         d      }| j                  t        j                  |      |d	      }t        j                  j                  r|j                  j                  }n|j                  j                  }t        j                  j                  d
k(  r:t!        t#        j$                         d   dz
  d      }t'        |      |kD  r|d | dz   }| j                  t        j                  |      d      }d}|j                  j(                  s|j                  j*                  r.|j                  j,                  t/        |j0                  dd      k7  rd|j                  j,                  z   }| j3                  | d| d| |        y )Nzh2-pushed-streamz PUSH_PROMISEry   r3   red)GETDELETEro   Tr4   rG   r      2   u   …r.   http_versionzHTTP/1.1r   rd   )r   metadatar   methoddictrs   upperr]   r   r   r   rT   showhost
pretty_urlurlrF   maxshutilget_terminal_sizelen	is_http10	is_http11r   getattrresponserb   )	rB   r   clientpushedr   method_colorr   terminal_width_limitr   s	            r#   _echo_request_linezDumper._echo_request_line   s   !!$'$6$--$GR$$v-6::6<<>9U..v6<d  
 ;;,,))C,,""C;;""a'#&v'?'?'A!'Dr'I2#N 3x..//058jj;;C@tjLLL""dll&<&<\\&&'MM>:+
 
 !:!::L		VHBvhau\N;<r-   c                   |j                   dk(  rd}| j                  |dd      }nd}d}|j                  sJ |j                  j                  }d }d|cxk  rdk  rn nd	}n!d|cxk  rd
k  rn nd}nd
|cxk  rdk  rn nd}| j                  t	        |      |d|dk(        }|j                  j
                  s-|j                  j                  s|j                  j                  }n>t        j                  j                  j                  |j                  j                  d      }| j                  t        j                  |      |d      }|j                  j                  d}n2t        j                   t#        |j                  j                              }| j                  |d      }d}	|j                  j$                  s|j                  j&                  r-|j(                  j*                  |j                  j*                  k7  r|j                  j*                   d}	| j                  dd      }
t,        j.                  j0                  dk(  r_t3        dt#        t        j4                  |j6                  j8                              dt#        |	      z   t#        |      z   z
        }d|z  |
z   }
| j;                  | |
 d|	 | d| d| 	       y )Nr   r   r   Tr4   ry      i,  r3   i  ro   iX  r   i  )r2   r/   blinkz(content missing)r.   r    <<rG   r   r{   )r   r]   r   status_coder%   is_http2is_http3reasonr   status_codes	RESPONSESrs   r   r   raw_contentr   pretty_sizer   r   r   r   r   r   rT   rF   r   r   r   r   rb   )rB   r   
replay_strreplaycode_int
code_colorcoder   sizer   arrowsr"   s               r#   _echo_response_linezDumper._echo_response_line   si   >>Z'#JZZ
xdZCFJF}}}==,,
( S  JH"s""JH"s"JzzMs?	  
 &&$--*@*@]]))F&&0044T]]5N5NPRSF..v6:D  
 ==$$,&D$$S)B)B%CDDzz$Tz*((DMM,C,C||((DMM,F,FF #mm889;LE-;;""a' E(()9)9)B)BCDs<((3z?:<C
 3Y'F		VHVHAl^D66(!D6JKr-   c                8   |j                   r| j                  |       t        j                  j                  dk\  r%| j                  |j                   j                         t        j                  j                  dk\  r| j                  |j                   |       t        j                  j                  dk\  r%| j                  |j                   j                         |j                  r| j                  |       t        j                  j                  dk\  r%| j                  |j                  j                         t        j                  j                  dk\  r| j                  |j                  |       t        j                  j                  dk\  r%| j                  |j                  j                         |j                  r@t        j                  |j                  j                        }| j!                  d| dd       | j"                  j%                          y )Nr{   rw    << Tr   r/   r2   )r   r   r   rT   rF   rm   rh   r   rq   rp   r   r   r   r   r   msgrb   r?   flushrB   fr   s      r#   	echo_flowzDumper.echo_flow   sg   99##A&{{&&!+""199#4#45{{&&!+""199a0{{&&!+##AII$6$67::$$Q'{{&&!+""1::#5#56{{&&!+""1::q1{{&&!+##AJJ$7$787744QWW[[ACIISEl%I8

r-   c                    t         j                  j                  dk(  ry| j                  syt	        j
                  | j                  |      ryy)Nr   FT)r   rT   rF   r<   r   matchrB   r   s     r#   r   zDumper.match  s;    ;;""a'{{dkk1-r-   c                J    | j                  |      r| j                  |       y y r   r   r   r   s     r#   r   zDumper.response      ::a=NN1 r-   c                J    | j                  |      r| j                  |       y y r   r   r   s     r#   r   zDumper.error!  r   r-   c                @   |j                   J | j                  |      r|j                   j                  d   }|j                  rdnd}| j	                  t        j                  |j                  j                         d| d|j                  j                  j                          d| dt        j                  |j                  j                         |j                  j                   
       t         j"                  j$                  dk\  r| j'                  ||       y y y )N-><-r   z WebSocket z	 message rw   )	websocketr   messagesfrom_clientrb   r   r   r   r   typerO   rP   server_connaddressr   pathr   rT   rF   r   )rB   r   r   	directions       r#   websocket_messagezDumper.websocket_message%  s    {{&&&::a=kk**2.G ' 3 3III''(>(>?@+[):):)@)@)B(C9+Qu33AMM4I4IJKAIINNK[]
 {{&&!+""7A. , r-   c                   |j                   J | j                  |      r|j                   j                  dv r]|j                   j                  rdnd}| j	                  d| d|j                   j                   d|j                   j
                          y t        j                  d| j                  |j                                }| j	                  dt        j                  |j                  j                         d| d	
       y y )N>         r   serverzWebSocket connection closed by rd   r   zWebSocket Error: z!Error in WebSocket connection to r   r1   )r   r   
close_codeclosed_by_clientrb   close_reasonr   Errorformat_websocket_errorr   r   r   r   )rB   r   cr   s       r#   websocket_endzDumper.websocket_end3  s    {{&&&::a={{%%);; ! < <H(		5aS1;;;Q;Q:RRSTUT_T_TlTlSmn 

'(C(CAKK(P'QR 		78L8LQ]]MbMb8c7ddfglfmn   r-   c                    	 t        |j                        j                  }|j                  r|d|j                   dz  }|S # t        $ r d|j                   }Y ;w xY w)NzUNKNOWN_ERROR=z
 (reason: ))r   r   rO   rV   r   )rB   r   rets      r#   r   zDumper.format_websocket_errorD  sk    	:i22388C !!Z	 6 67q99C
	  	:"9#7#7"89C	:s   A AAc                    | j                  |      rf| j                  d|j                  j                          dt	        j
                  |j                  j                         d|j                   d       y y )Nz	Error in z connection to rd   r   r1   )	r   rb   r   r   r   r   r   r   r   r   s     r#   _proto_errorzDumper._proto_errorM  si    ::a=IIAFFLLN+?5;O;OPQP]P]PePe;f:ggijkjqjqirs   r-   c                &    | j                  |       y r   r   r   s     r#   	tcp_errorzDumper.tcp_errorT      !r-   c                &    | j                  |       y r   r   r   s     r#   	udp_errorzDumper.udp_errorW  r   r-   c                   | j                  |      rD|j                  d   }|j                  rdnd}|j                  j                  dk(  r]|j
                  dk(  rd}nd}d| d	|j                  j                  d
d       d	| d| d| d	|j                  j                  dd       }n|j
                  }| j                  dj                  t        j                  |j                  j                        t        j                  |j                  j                        ||             t        j                   j"                  dk\  r| j%                  ||       y y y )Nr   r   r   QUICtcpstreamdgramszquic r   quic_stream_id_clientry   z mitmproxy z quic quic_stream_id_serverz0{client} {direction} {type} {direction} {server})r   r   r   r   rw   )r   r   r   r   tls_versionr   r   rs   rb   formatr   r   r   r   r   r   rT   rF   r   )rB   r   r   r   	quic_type	flow_types         r#   _proto_messagezDumper._proto_messageZ  s9   ::a=jjnG ' 3 3I}}((F266U? (I (I I;a

7Nr(R'SST kYK 8%;a

7Nr(R'SU  FF	IIBII //0F0FG //0E0EF'"	 J  {{&&!+""7A. ,1 r-   c                &    | j                  |       y r   r   r   s     r#   tcp_messagezDumper.tcp_messagev      Ar-   c                &    | j                  |       y r   r  r   s     r#   udp_messagezDumper.udp_messagey  r  r-   c                   | j                  |      }t        j                  j                  |j                  j
                        }t        j                  j                  |j                  j                  d   j                        }d| d| d}dddj                  |d      }| j                  ||	      }| j                  |j                  j                  d   j                  d
      }| j                  | d| d|        y )Nr   zDNS z (r   r3   ro   )AAAAAr   r1   Tr.   rd   r   )r   r	   op_codesto_strr   op_codetypes	questionsr   rs   r]   rO   rb   )rB   r   r   opcoder   desc
desc_colorrO   s           r#   _echo_dns_queryzDumper._echo_dns_query|  s    !!!$$$QYY%6%67yy		 3 3A 6 ; ;<fXRvQ'
 #dE
 	 zz$:z.zz!))--a055DzA		VHBtfAdV,-r-   c                    |j                   sJ  j                  |      r j                  |        j                  dd      }|j                   j                  r/dj                   fd|j                   j                  D              }n: j                  t        j                  |j                   j                        d      } j                  | d|        y y )	Nr   Tr.   z, c              3  V   K   | ]   }j                  t        |      d        " yw)bright_bluer1   N)r]   r%   )r    xrB   s     r#   r$   z&Dumper.dns_response.<locals>.<genexpr>  s'      $=>DJJs1v-J8$s   &)r   r1   r   )
r   r   r  r]   answersr(   r   r  response_coderb   )rB   r   r   r  s   `   r#   dns_responsezDumper.dns_response  s    zzz::a=  #ZZDZ1Fzz!!)) $BC**BTBT$  **"))

00 	 %  II'+, r-   c                    |j                   sJ | j                  |      rR| j                  |       t        j                  |j                   j
                        }| j                  d| dd       y y )Nr   Tr   r   )r   r   r  r   r   r   rb   r   s      r#   	dns_errorzDumper.dns_error  s[    www::a=  #44QWW[[ACIISEl%I8 r-   r   )rC   zIO[str] | None)r*   r%   returnr%   )r*   r%   )rh   zhttp.Headers)rp   zhttp.Headers | None)r   z9http.Message | TCPMessage | UDPMessage | WebSocketMessager   z!http.HTTPFlow | TCPFlow | UDPFlow)r   z	flow.Flowr  r%   )r   http.HTTPFlowr  None)r   r  r  r  )r   r  )r   r   r  r%   )r   zTCPFlow | UDPFlowr  r  )r   dns.DNSFlowr  r  )r   r  )__name__
__module____qualname__rD   rR   rZ   r]   rb   rm   rq   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r-   r#   r:   r:   /   s    F

2#
%.%H
J 0:=@:Lx2/"/8.-&9r-   r:   )r)   rM   r*   r%   r  r%   ),
__future__r   r   r}   r   r=   typingr   r   wsproto.frame_protocolr   	mitmproxyr   r   r	   r
   r   r   r   mitmproxy.contribr   r\   mitmproxy.net.dnsr   mitmproxy.optionsr   mitmproxy.tcpr   r   mitmproxy.udpr   r   mitmproxy.utilsr   r   r   mitmproxy.websocketr   r   r,   r   r8   __annotations__r:   r   r-   r#   <module>r/     s    "    
   . "         0 , 7 ! $ ! $ ! $ $ - 0- 4fogD)G	8 4 t9 t9r-   