
    @OOfC                     z   d dl Z d dlZd dlZd dlm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  G d de      Z G d dej2                        Z G d dej6                        Z G d dej:                  ej<                        Zy)    N)	lru_cache)contentviews)ctx)dns)http)tcp)udp)common)flowdetailview)layoutwidget)
searchable)tabs)strutilsc                       e Zd Zy)SearchErrorN)__name__
__module____qualname__     a/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/tools/console/flowview.pyr   r      s    r   r   c                   "    e Zd Z	 	 	 	 ddZd Zy)FlowViewHeaderNc                 2    || _         | j                          y N)masterfocus_changed)selfr   s     r   __init__zFlowViewHeader.__init__   s     r   c                    | j                   j                  j                         \  }}| j                   j                  j                  j
                  r|t        j                  | j                   j                  j                  j
                  t        j                  j                  | j                   j                  j                        | _        y t        j                  g       | _        y )N)render_mode
hostheader)r   uiget_cols_rowsviewfocusflowr
   format_flow
RenderMode
DETAILVIEWoptionsshowhost_wurwidPile)r   cols_s      r   r   zFlowViewHeader.focus_changed$   s    ++....0a;;!!&&((  &&++"--88;;..77DG jjnDGr   )r   z,mitmproxy.tools.console.master.ConsoleMasterreturnN)r   r   r   r   r   r   r   r   r   r      s    > 
	%r   r   c                       e Zd Z fdZed        Zedej                  j                  fd       Zd Z	d Z
d Zd Zdefd	Zdefd
Zd Zd Zd Zd Zd Zd Zd Zd ZdedefdZdej4                   dfZdej8                   dfZd Zdej@                  fdZ!d Z"d Z# e$d      d        Z%d  Z&d!ed"e'jP                  d#z  de)jT                  fd$Z+ xZ,S )%FlowDetailsc                    || _         t        | 	  g        | j                          d | _        t
        j                  j                  | j                         t
        j                  j                  | j                         y r   )
r   superr   showlast_displayed_bodyr   on_addconnectcontentview_changed	on_remover   r   	__class__s     r   r   zFlowDetails.__init__1   s\    		#' ##D$<$<=&&t'?'?@r   c                 .    | j                   j                  S r   )r   r%   r   s    r   r%   zFlowDetails.view9   s    {{r   r2   c                 V    | j                   j                  j                  j                  S r   )r   r%   r&   r'   r@   s    r   r'   zFlowDetails.flow=   s    {{%%***r   c                     | j                   j                          | j                  j                  j	                  d      r| j                          y y )Nflowview)_get_content_viewcache_clearr   windowcurrent_windowr7   )r   r%   s     r   r;   zFlowDetails.contentview_changedA   s<     	**,;;,,Z8IIK 9r   c                 J   | j                   }|rt        |t        j                        r|j                  re| j
                  | j                  f| j                  | j                  f| j                  | j                  f| j                  | j                  fg| _        nT| j
                  | j                  f| j                  | j                  f| j                  | j                  fg| _        nt        |t        j                        r6| j                   | j"                  f| j                  | j                  fg| _        nt        |t$        j&                        r6| j(                  | j"                  f| j                  | j                  fg| _        nft        |t*        j,                        rL| j.                  | j0                  f| j2                  | j4                  f| j                  | j                  fg| _        | j7                          y | j8                  j:                  j=                          y r   )r'   
isinstancer   HTTPFlow	websockettab_http_requestview_requesttab_http_responseview_responsetab_websocket_messagesview_websocket_messagestab_detailsview_detailsr   r   TCPFlowtab_tcp_streamview_message_streamr	   UDPFlowtab_udp_streamr   DNSFlowtab_dns_requestview_dns_requesttab_dns_responseview_dns_responser7   r   rF   pop)r   fs     r   r   zFlowDetails.focus_changedH   s   II!T]]+;;..0A0AB//1C1CD44d6R6RS))4+<+<=	!DI ..0A0AB//1C1CD))4+<+<=!DI
 As{{+(($*B*BC%%t'8'89	 As{{+(($*B*BC%%t'8'89	 As{{+))4+@+@A**D,B,BC%%t'8'89	
 IIKKK""$r   c                     | j                   }t        |t        j                        sJ | j                   j                  r|j
                  syyNzRequest interceptedRequest)r'   rI   r   rJ   interceptedresponser   r'   s     r   rL   zFlowDetails.tab_http_requestm   s8    yy$...99  (r   c                    | j                   }t        |t        j                        sJ |j                  xr" t        |j                  j                        dk7  }| j                   j                  xr |j                  xr | }|ryy)Nr   Response interceptedResponse)	r'   rI   r   rJ   rK   lenmessagesrc   rd   )r   r'   websocket_startedresponse_is_intercepteds       r   rN   zFlowDetails.tab_http_responseu   ss    yy$... !NNPs4>>3J3J/Kq/PII!!MdmmM<M8M 	  #)r   c                     | j                   }t        |t        j                        sJ | j                   j                  r|j
                  syyra   r'   rI   r   rY   rc   rd   re   s     r   rZ   zFlowDetails.tab_dns_request   s8    yy$,,,99  (r   c                     | j                   }t        |t        j                        sJ | j                   j                  r|j
                  ryy)Nrg   rh   rn   re   s     r   r\   zFlowDetails.tab_dns_response   s8    yy$,,,99  T]])r   c                      y)Nz
TCP Streamr   r@   s    r   rU   zFlowDetails.tab_tcp_stream       r   c                      y)Nz
UDP Streamr   r@   s    r   rX   zFlowDetails.tab_udp_stream   rq   r   c                     | j                   }t        |t        j                        sJ |j                  sJ | j                   j
                  r#t        |j                  j                        dk7  ryy)Nr   zWebSocket Messages interceptedzWebSocket Messages)r'   rI   r   rJ   rK   rc   ri   rj   re   s     r   rP   z"FlowDetails.tab_websocket_messages   sT    yy$...~~~99  S)@)@%AQ%F3'r   c                      y)NDetailr   r@   s    r   rR   zFlowDetails.tab_details   s    r   c                     | j                   }t        |t        j                        sJ | j	                  |j
                        S r   )r'   rI   r   rJ   	conn_textrequestre   s     r   rM   zFlowDetails.view_request   s2    yy$...~~dll++r   c                     | j                   }t        |t        j                        sJ | j	                  |j
                        S r   )r'   rI   r   rJ   rw   rd   re   s     r   rO   zFlowDetails.view_response   s2    yy$...~~dmm,,r   c                     | j                   }t        |t        j                        sJ | j	                  d|j
                        S )Nrx   )r'   rI   r   rY   dns_message_textrx   re   s     r   r[   zFlowDetails.view_dns_request   s6    yy$,,,$$Y==r   c                     | j                   }t        |t        j                        sJ | j	                  d|j
                        S )Nrd   )r'   rI   r   rY   r{   rd   re   s     r   r]   zFlowDetails.view_dns_response   s6    yy$,,,$$Z??r   descriptionviewmodec           	          t        j                  d|fg      t        j                  ddddd|z  fgd      g}t        j                  t        j                  |      d      }|S )Nheading r   [heading_keym:%s]rightalign)r.   TextAttrWrapColumns)r   r}   r~   r0   contentview_status_bars        r   _contentview_status_barz#FlowDetails._contentview_status_bar   sr    JJ,
 JJ$((!24	 
  "'d0CY!O%%r   from_clientr   	to_clientc           
         | j                   }t        |t        j                        sJ |j                  J |j                  j
                  s)t        j                  t        j                  d      g      S | j                  j                  j                  d      }g }|j                  j
                  D ]  }t        j                  |||      \  }}}|D ]k  }|j                  r|j!                  d| j"                         n|j!                  d| j$                         |j'                  t        j                  |             m  |j                  j(                  |j'                  t        j                  |j                  j(                  r| j"                  n| j$                  |j                  j*                  dv rdndd|j                  j*                   d|j                  j,                   fg             |j.                  r,|d	   j1                         d   }|d	   j3                  d
|f       |j!                  d| j5                  |j7                         |             t        j                  |      S )N	highlightzNo messages.console.flowview.moder   )i  i  i  alerterrorzConnection closed: r   	intercept)r'   rI   r   rJ   rK   rj   r   
Searchabler.   r   r   commandscallr   get_message_content_viewr   insertFROM_CLIENT_MARKERTO_CLIENT_MARKERappendclosed_by_client
close_codeclose_reasonrc   get_textset_textr   
capitalize	r   r'   r~   widget_linesr   r1   lineslinemarkups	            r   rQ   z#FlowDetails.view_websocket_messages   s   yy$...~~)))~~&&((%**5R*S)TUU;;'',,-DE(( 		6A&??!TRKAua 6==KK4#:#:;KK4#8#89##EJJt$456		6 >>**6

  $~~>> !33!%!6!6  $~~88<NN $!(1$..2K2K1LAdnnNiNiMjk	$ !"%..03F%%{F&;<t++H,?,?,A8L	
 $$\22r   c                 \   | j                   }t        |t        j                  t        j
                  f      sJ |j                  s)t        j                  t        j                  d      g      S | j                  j                  j                  d      }g }|j                  D ]  }t        j                  |||      \  }}}|D ]k  }|j                   r|j#                  d| j$                         n|j#                  d| j&                         |j)                  t        j                  |             m  |j*                  r,|d   j-                         d   }|d   j/                  d|f       |j#                  d| j1                  |j3                         |             t        j                  |      S )Nr   r   r   r   r   )r'   rI   r   rT   r	   rW   rj   r   r   r.   r   r   r   r   r   r   r   r   r   r   r   rc   r   r   r   r   r   s	            r   rV   zFlowDetails.view_message_stream  sf   yy$ckk :;;;}}((%**5R*S)TUU;;'',,-DE 		6A&??!TRKAua 6==KK4#:#:;KK4#8#89##EJJt$456		6 !"%..03F%%{F&;<t++H,?,?,A8L	
 $$\22r   c                 V    t        j                  | j                  | j                        S r   )r   flowdetailsr%   r'   r@   s    r   rS   zFlowDetails.view_details$  s    ))$))TYY??r   c           	         |j                   dt        j                  dg      g}}||fS | j                  j                  j                  d      }|dk(  rt        j                  }nt        j                  j                  }t        |j                   |j                  j                  t        |dd       f      }|| _        | j!                  |||      S )N )r   z[content missing]z.view.settings.getval @focus fullcontents falsetruepath)raw_contentr.   r   r   r   executesysmaxsizer   r+   content_view_lines_cutoffhashheadersfieldsgetattr_get_content_view_messagerD   )r   r~   messagemsgbodyfulllimitflow_modify_cache_invalidations           r   content_viewzFlowDetails.content_view'  s    &UZZ)G(HIJC9;;''//@D v~==-1''OO**GVT2.* .5D*))%!? r      )r   c                    | j                   }d | _         t        j                  ||| j                        \  }}}|rt	        j
                  |       |dk(  rt        |t        j                        rd}d}||z  }	d}
g }|D ]  }g }|D ]F  \  }}|
t        |      z   |	kD  r|d |	|
z
   }|j                  ||f       |
t        |      z  }
|
|	k(  sF n t        t        j                  |
|z        |z        }
|j                  t        j                  |             |
|	k(  s|j                  t        j                  dd|z  fddg              ||fS  ||fS )	Nz
No contentzNo request contentP   r   r   z.Stopped displaying data after %d lines. Press )keyr_   )r   z to load all data.)r   r   r   r'   loggingdebugrI   r   rb   ri   r   intmathceilr.   r   )r   r~   	max_linesr1   r   r}   r   r   chars_per_line	max_charstotal_charstext_objectsr   txtstyletexts                   r   rD   zFlowDetails._get_content_viewA  s   00)-&$0$I$Igtyy%
!UE MM% ,&:gt||+L.K .	 	DC# tT*Y6 9)k"9:D

E4=)s4y()+ diin(DEVWK

30i'##JJ !, P"+!,
 )?
 L((=	< L((r   c           	         |r5g }|j                   j                  D ]E  \  }}t        j                  |      dz   }t        j                  |      }|j	                  ||f       G t        j                  |d      }| j                  j                  j                  d      }| j                  ||      \  }}t        j                  d|fg      t        j                  ddddd	|z  fgd
      g}	t        j                  t        j                  |	      d      }
|j	                  |
       |j                  |       n,t        j                  d      t        j                  g d      g}t!        j"                  |      S )N:header)
key_formatr   r   r   r   r   r   r   r   r   ))r   zNo response. Press )r   e)r   z  and edit any aspect to add one.)r   r   r   bytes_to_escaped_strr   r
   format_keyvalsr   r   r   r   r.   r   r   r   extendr   r   )r   connhdrskvr   r~   r   r   r0   titles              r   rw   zFlowDetails.conn_texts  s^   D++ $1$ 11!4s:11!4QF#)$* ''BC{{++001HIH))(D9IC 

"C(
 

(,"Vh%68	 "D  NN5==#6	BEJJuJJt 

2

	C $$S))r   typer   Nc                 l   |rdt         j                  fd}g }|j                  t        j                  dj                  |j                  rdnd                   |j                  d |j                  D               |j                  t        j                  d             |j                  t        j                  dj                  |j                  rd	nd|j                  rdnd
                   |j                  t        ||j                               |j                  t        j                  d             |j                  t        j                  d             |j                  t        ||j                               |j                  t        j                  d             |j                  t        j                  d             |j                  t        ||j                               t        j                   |      S t        j                   t        j                  dd| df      g      S )Nrrc                     t        j                  d| j                   dt        j                  j                  | j                         dt        j                  j                  | j                         d| j                   dt        |        
      S )N  r   )r.   r   namer   typesto_strr   classesclass_ttlstr)r   s    r   rr_textz-FlowDetails.dns_message_text.<locals>.rr_text  sv    zz	399#3#3BGG#<"=Qs{{?Q?QRTR[R[?\>]]^_a_e_e^ffghklnhogpq r   z{recursive}Questionz
Recursive r   )	recursivec              3     K   | ]z  }t        j                  d |j                   dt        j                  j                  |j                         dt        j                  j                  |j                                | yw)r   r   N)	r.   r   r   r   r   r   r   r   r   ).0qs     r   	<genexpr>z/FlowDetails.dns_message_text.<locals>.<genexpr>  sh        

#))"2"2166":!;1S[[=O=OPQPXPX=Y<Z[s   B Bz {authoritative}{recursive}AnswerzAuthoritative )authoritativer   	AuthorityAdditionr   zNo .)r   ResourceRecordr   r.   r   formatrecursion_desiredr   	questionsauthoritative_answerrecursion_availablemapanswersauthoritiesadditionalsr   r   )r   r   r   r   r   s        r   r{   zFlowDetails.dns_message_text  s    C.. 
 CJJ

)00292K2K,QS 1  JJ  !**	  JJuzz"~&JJ

6=="77 '7292M2M,SU	 > 	 JJs7GOO45JJuzz"~&JJuzz+./JJs7G$7$789JJuzz"~&JJuzz*-.JJs7G$7$789((--((%**kSa=5Q*R)STTr   )-r   r   r   r   propertyr%   	mitmproxyr'   Flowr;   r   rL   rN   r   rZ   r\   rU   rX   rP   rR   rM   rO   r[   r]   r   r
   SYMBOL_FROM_CLIENTr   SYMBOL_TO_CLIENTr   rQ   r.   WidgetrV   rS   r   r   rD   rw   r   Messager   r   r{   __classcell__r>   s   @r   r4   r4   0   sP   A     +inn)) + +#%J # (,
-
>
@
&3 &# &( (F,E,E+Fa)HI#(?(?'@%BC13f3U\\ 3>@4 s/) /)b;*z-U-U"%++"4-U			-Ur   r4   c                   ,     e Zd ZdZdZ fdZd Z xZS )FlowViewrC   zFlow Detailsc                 Z    t         |   t        |      t        |             || _        y )N)r   )r6   r   r4   r   r   r=   s     r   r   zFlowView.__init__  s.    !&) 	 	
 r   c                 l    | j                   j                          | j                  j                          y r   )r   r   r   )r   argskwargss      r   r   zFlowView.focus_changed  s"    		!!!#r   )r   r   r   keyctxr   r   r   r
  r  s   @r   r  r    s    FE$r   r  ) r   r   r   	functoolsr   r.   mitmproxy.flowr  mitmproxy.tools.console.masterr   r   r   r   r   r	   mitmproxy.tools.consoler
   r   r   r   r   mitmproxy.utilsr   	Exceptionr   
WidgetWrapr   Tabsr4   FrameLayoutWidgetr  r   r   r   <module>r     s      
    % "      * 2 0 . ( $	) 	%U%% %(mU$)) mU`$u{{L55 $r   