
    @OOf-a                       d dl mZ d dlZd dl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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/m0Z0 dUdZ1dVdZ2dWdZ3 G d dejh                  jj                        Z6 G d d ejh                  jn                        Z7 G d! d"e7      Z8 G d# d$e7      Z9 G d% d&ejt                  jv                        Z< G d' d(e<      Z= G d) d*e7      Z> G d+ d,e7      Z? G d- d.e7      Z@ G d/ d0e7      ZA G d1 d2e7      ZB G d3 d4e7      ZC G d5 d6e7      ZD G d7 d8e7      ZE G d9 d:e7      ZF G d; d<e7      ZG G d= d>e7      ZH G d? d@e7      ZI G dA dBe7      ZJ G dC dDe7      ZK G dE dFe7      ZL G dG dHe7      ZM G dI dJe7      ZN G dK dLe7      ZO G dM dNe7      ZP G dO dPe7      ZQ G dQ dRejh                  j                        ZS G dS dTejh                  j                        ZTy)X    )annotationsN)Callable)Sequence)BytesIO)islice)ClassVar)certs)command)contentviews)
flowfilter)http)io)log)
optmanager)version)DNSFlow)HTTPFlow)TCPFlow)
TCPMessage)UDPFlow)
UDPMessage)emoji)
always_str)WebSocketMessagec                   | sy | d   }|j                   |j                         j                         t        |j                  j                               t        |j                  j                               t        |j                        |j                  |j                  |j                  D cg c]  }t        |j                         c}dS c c}w )Nr   )keyinfosha256	notbeforenotafterserialsubjectissueraltnames)r   fingerprinthexintr   	timestampr   strr    r!   r"   r#   value)r	   certxs      X/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/tools/web/app.pycert_to_jsonr-   )   s    8D<<""$((*1134//12dkk"<<+++/==9aS\9	 	 :s   -Cc                v   | j                   | j                  | j                  | j                  | j	                         | j
                  r t        j                  | j
                  d      nd| j                  | j                  d}| j                  r| j                  j                   | j                  j                  | j                  j                  | j                  j                  t        | j                  j                        | j                  j                   | j                  j"                  t%        | j                  j&                  dd      | j                  j(                  | j                  j*                  | j                  j,                  | j                  j.                  d|d<   | j0                  r@| j0                  j                   | j0                  j                  | j0                  j                  | j0                  j2                  | j0                  j                  t        | j0                  j                        | j0                  j                   | j0                  j"                  t%        | j0                  j&                  dd      | j0                  j(                  | j0                  j*                  | j0                  j4                  | j0                  j,                  | j0                  j.                  d|d	<   | j6                  r| j6                  j9                         |d
<   t;        | t<              r| j>                  j@                  WtC        | j>                  j@                        }tE        jF                  | j>                  j@                        jI                         }nd}d}| j>                  jJ                  | j>                  jL                  | j>                  jN                  | j>                  jP                  | j>                  jR                  | j>                  jT                  tW        | j>                  jX                  j[                  d            ||| j>                  j*                  | j>                  j.                  | j>                  j\                  d|d<   | j^                  rm| j^                  j@                  WtC        | j^                  j@                        }tE        jF                  | j^                  j@                        jI                         }nd}d}| j^                  jT                  | j^                  j`                  | j^                  jb                  tW        | j^                  jX                  j[                  d            ||| j^                  j*                  | j^                  j.                  d|d<   | j^                  jd                  jf                  r>tW        | j^                  jd                  jf                  j[                  d            |d   d<   | jh                  rtk        d | jh                  jl                  D              tC        | jh                  jl                        | jh                  jl                  r#| jh                  jl                  d   jn                  ndd| jh                  jp                  | jh                  jr                  | jh                  jt                  | jh                  j.                  d|d<   |S t;        | tv        tx        f      r]tk        d | jl                  D              tC        | jl                        | jl                  r| jl                  d   jn                  ndd|d<   |S t;        | tz              rF| j>                  j}                         |d<   | j^                  r| j^                  j}                         |d<   |S )z
    Remove flow message content and cert to save transmission space.
    Args:
        flow: The original flow.
    Sync with web/src/flow.ts.
    u   🔴 )idintercepted	is_replaytypemodifiedmarkedcommenttimestamp_createdasciibackslashreplace)r0   peernamesocknametls_establishedr*   snicipheralpntls_versiontimestamp_starttimestamp_tls_setuptimestamp_endclient_conn)r0   r:   r;   addressr<   r*   r=   r>   r?   r@   rA   timestamp_tcp_setuprB   rC   server_connerrorNT)methodschemehostportpathhttp_versionheaderscontentLengthcontentHashrA   rC   pretty_hostrequest)rN   status_codereasonrO   rP   rQ   rA   rC   responsetrailersc              3  F   K   | ]  }t        |j                          y wNlencontent.0r+   s     r,   	<genexpr>zflow_to_json.<locals>.<genexpr>   s      )+,AII)   !)rP   counttimestamp_last)messages_metaclosed_by_client
close_codeclose_reasonrC   	websocketc              3  F   K   | ]  }t        |j                          y wrY   rZ   r]   s     r,   r_   zflow_to_json.<locals>.<genexpr>   s      GAQYY Gr`   rd   )?r0   r1   r2   r3   r4   r5   r   getr6   r7   rD   r:   r;   r<   r-   certificate_listr=   r>   r   r?   r@   rA   rB   rC   rG   rE   rF   rH   	get_state
isinstancer   rS   raw_contentr[   hashlibr   	hexdigestrI   rJ   rK   rL   rM   rN   tuplerO   itemsrR   rV   rT   rU   datarW   rh   summessagesr'   re   rf   rg   r   r   r   to_json)flowfcontent_lengthcontent_hashs       r,   flow_to_jsonr{   9   s    gg''^^		MMO48KK%))DKK0R<<!33		A ""%%((11((11#//?? !1!1!B!BC##''&&--t//44g?QR++77#//??#'#3#3#G#G!--;;
- ""%%((11((11''//#//?? !1!1!B!BC##''&&--t//44g?QR++77#//??#'#3#3#G#G#'#3#3#G#G!--;;
-  zzZZ))+'
$! <<##/ !9!9:N">>$,,*B*BCMMOL!NLll))ll))LL%%LL%%LL%% LL55T\\1177=>+'#||;;!\\77<<33
) ==}}((4!$T]]%>%>!?&~~dmm.G.GHRRT!%# $ : :#}}88--.. !6!6!<!<T!BC!/+#'==#@#@!%!<!<	AjM }}!!**,1MM&&//55d;-*j) >> &) )040G0G) & !!8!89~~.. '+nn&=&=b&A&K&K" %)NN$C$C"nn77 $ ; ;!%!=!=AkN4 H 
D7G,	-  G GG'=A]]dmmB/99PT
/ H 
D'	"||++-)== MM113AjMH    c                H    t        |       | j                  | j                  dS )N)r0   messagelevel)r0   msgr   )es    r,   logentry_to_jsonr      s!    e55 r|   c                      e Zd Zy)APIErrorN)__name__
__module____qualname__ r|   r,   r   r      s    r|   r   c                       e Zd ZU ded<   d fdZ fdZed        Zed        Zedd       Z	edd       Z
edd	       Zd fd
Z xZS )RequestHandlerApplicationapplicationc                    t        |t              r1t        j                  j	                  |      }| j                  dd       t        |   |       y )NContent-Typezapplication/json; charset=UTF-8)rm   listtornadoescapejson_encode
set_headersuperwrite)selfchunk	__class__s     r,   r   zRequestHandler.write   s>     eT"NN..u5EOON,MNer|   c                    t         |           | j                  dt        j                         | j                  dd       | j                  dd       | j                  dd       | j                  dd	       y )
NServerX-Frame-OptionsDENYzX-XSS-Protectionz1; mode=blockX-Content-Type-OptionsnosniffzContent-Security-PolicyzNdefault-src 'self'; connect-src 'self' ws:; style-src   'self' 'unsafe-inline')r   set_default_headersr   r   	MITMPROXY
add_header)r   r   s    r,   r   z"RequestHandler.set_default_headers   sc    #%'"3"34)62*O<0)<%1	
r|   c                F   | j                   j                  j                  dd      j                  d      st	        dd      	 t        j                  | j                   j                  j                               S # t        $ r}t	        ddt        |             d }~ww xY w)Nr   r/   zapplication/json  z0Invalid Content-Type, expected application/json.zMalformed JSON: )rS   rO   rj   
startswithr   jsonloadsbodydecode	Exceptionr(   r   r   s     r,   r   zRequestHandler.json   s    ||##'';FF
 3 RSS	=::dll//66899 	=3"23q6( ;<<	=s   6A: :	B BB c                    | j                   j                  rCt        t        | j                   j                  j	                                     d   j
                  S | j                   j
                  S )zb
        Accept either a multipart/form file upload or just take the plain request body.

        r   )rS   filesnextitervaluesr   r   s    r,   filecontentszRequestHandler.filecontents   sO     <<T\\//6689:1=BBB<<$$$r|   c                B    | j                   j                  j                  S rY   )r   masterviewr   s    r,   r   zRequestHandler.view   s    &&+++r|   c                .    | j                   j                  S rY   )r   r   r   s    r,   r   zRequestHandler.master   s    &&&r|   c                    t        | j                  d         }| j                  j                  |      }|r|S t	        dd      )Nflow_idi  zFlow not found.)r(   path_kwargsr   	get_by_idr   )r   r   rw   s      r,   rw   zRequestHandler.flow   sA    d&&y12yy""7+K3 122r|   c                    d|v r8t        |d   d   t              r"| j                  |d   d   j                         y t	        |   |fi | y )Nexc_info   )rm   r   finishlog_messager   write_error)r   rT   kwargsr   s      r,   r   zRequestHandler.write_error  sL    Jvj/A!/Dh$OKKz*1-99:G6v6r|   )r   zstr | bytes | dict | list)returnzmitmproxy.addons.view.View)r   $mitmproxy.tools.web.master.WebMaster)r   mitmproxy.flow.Flow)rT   r&   )r   r   r   __annotations__r   r   propertyr   r   r   r   rw   r   __classcell__r   s   @r,   r   r      s    
 = = % % , , ' ' 3 37 7r|   r   c                      e Zd Zd Zy)IndexHandlerc                F    | j                   }|sJ | j                  d       y )Nz
index.html)
xsrf_tokenrender)r   tokens     r,   rj   zIndexHandler.get  s    uL!r|   Nr   r   r   rj   r   r|   r,   r   r     s    "r|   r   c                      e Zd Zd Zy)
FilterHelpc                V    | j                  t        t        j                               y )N)commands)r   dictr   helpr   s    r,   rj   zFilterHelp.get  s    

412r|   Nr   r   r|   r,   r   r     s    3r|   r   c                  ^    e Zd ZU ded<    e       Zded<   d Zd Zed
d       Z	ed        Z
y	)WebSocketEventBroadcasterz(ClassVar[set[WebSocketEventBroadcaster]]connectionszClassVar[set[asyncio.Task]]_send_tasksc                :    | j                   j                  |        y rY   )r   addr   s    r,   openzWebSocketEventBroadcaster.open  s    T"r|   c                :    | j                   j                  |        y rY   )r   discardr   s    r,   on_closez"WebSocketEventBroadcaster.on_close"  s      &r|   c                      fd}t        j                   |             } j                  j                  |       |j	                   j                  j
                         y )Nc                    K   	 j                         d {    y 7 # t        j                  j                  $ r  j                  j                         Y y w xY wwrY   )write_messager   rh   WebSocketClosedErrorr   r   )clsconnr~   s   r,   wrapperz/WebSocketEventBroadcaster.send.<locals>.wrapper'  sL     .((111$$99 .''-.s1   A! ! A! 8AAAA)asynciocreate_taskr   r   add_done_callbackremove)r   r   r~   r   ts   ```  r,   sendzWebSocketEventBroadcaster.send%  sF    	. 	*A	COO223r|   c                    t        j                  |d      j                  dd      }| j                  j	                         D ]  }| j                  ||        y )NF)ensure_asciiutf8surrogateescape)r   dumpsencoder   copyr   )r   r   r~   r   s       r,   	broadcastz#WebSocketEventBroadcaster.broadcast1  sO    **V%8??%
 OO((* 	$DHHT7#	$r|   N)r   r   r~   bytesr   None)r   r   r   r   setr   r   r   classmethodr   r   r   r|   r,   r   r     sG    99/2uK,4#' 	4 	4 $ $r|   r   c                  &    e Zd ZU  e       Zded<   y)ClientConnectionzClassVar[set]r   N)r   r   r   r   r   r   r   r|   r,   r   r   ;  s    !$K&r|   r   c                      e Zd Zd Zy)Flowsc                r    | j                  | j                  D cg c]  }t        |       c}       y c c}w rY   )r   r   r{   r   rx   s     r,   rj   z	Flows.get@  s$    

TYY7LO787s   4Nr   r   r|   r,   r   r   ?  s    9r|   r   c                      e Zd ZddZd Zy)	DumpFlowsc                   | j                  dd       | j                  dd       	 t        j                  | j                  j                  d   d   j                               }t               5 }t        j                  |      }| j                  D ]  } ||      s|j                  |        | j                  |j!                                d d d        y # t        $ r t        dd      t        t        f$ r d
d	}Y w xY w# 1 sw Y   y xY w)NContent-Dispositionzattachment; filename=flowsr   application/octet-streamfilterr   r   zInvalid filter argument / regexc                     y)NTr   )_s    r,   matchzDumpFlows.get.<locals>.matchS  s    r|   )r   bool)r   r   parserS   	argumentsr   
ValueErrorr   KeyError
IndexErrorr   r   
FlowWriterr   r   r   getvalue)r   r  biofwrx   s        r,   rj   zDumpFlows.getE  s    -/KL(BC
	$$T\\%;%;H%Ea%H%O%O%QRE Y 	'#s#BYY 8FF1I JJs||~&	' 	'  	D3"ACC
 	
		' 	's#   =C --D2D'D ?D Dc                $  K   | j                   j                          t        | j                        }t	        j
                  |      j                         D ]%  }| j                  j                  |       d {    ' |j                          y 7 wrY   )
r   clearr   r   r   
FlowReaderstreamr   	load_flowclose)r   r  rx   s      r,   postzDumpFlows.post]  sk     		d''(s#**, 	+A++''***	+		 +s   A4B6B7BNr   r   )r   r   r   rj   r  r   r|   r,   r   r   D  s    '0r|   r   c                      e Zd Zd Zy)ClearAllc                    | j                   j                          | j                  j                  j                          y rY   )r   r  r   eventsr   s    r,   r  zClearAll.postf  s&    		  "r|   Nr   r   r   r  r   r|   r,   r  r  e  s    #r|   r  c                      e Zd Zd Zy)ResumeFlowsc                    | j                   D ];  }|j                  s|j                          | j                   j                  |g       = y rY   )r   r1   resumeupdater   s     r,   r  zResumeFlows.postl  s<     	"A==HHJIIaS!		"r|   Nr  r   r|   r,   r  r  k  s    "r|   r  c                      e Zd Zd Zy)	KillFlowsc                    | j                   D ];  }|j                  s|j                          | j                   j                  |g       = y rY   )r   killablekillr"  r   s     r,   r  zKillFlows.postu  s9     	&Azz		  !%	&r|   Nr  r   r|   r,   r$  r$  t  s    &r|   r$  c                      e Zd Zd Zy)
ResumeFlowc                    | j                   j                          | j                  j                  | j                   g       y rY   )rw   r!  r   r"  r   r   s     r,   r  zResumeFlow.post}  s*    				$))%r|   Nr  r   r|   r,   r)  r)  |  s    &r|   r)  c                      e Zd Zd Zy)KillFlowc                    | j                   j                  rA| j                   j                          | j                  j	                  | j                   g       y y rY   )rw   r&  r'  r   r"  r+  s     r,   r  zKillFlow.post  s:    99IINNIIdii[) r|   Nr  r   r|   r,   r-  r-        *r|   r-  c                      e Zd Zd ZddZy)FlowHandlerc                    | j                   j                  r| j                   j                          | j                  j	                  | j                   g       y rY   )rw   r&  r'  r   r   r+  s     r,   deletezFlowHandler.delete  s5    99IINN		$))%r|   c           	     8   | j                   }|j                          	 | j                  j                         D ]  \  }}|dk(  r3t	        |d      r&|j
                  }|j                         D ]  \  }}|dv rt        ||t        |             "|dk(  rt        |      |_	        8|dk(  r;|j                  j                          |D ]  } |j                  j                  |   x|dk(  rk|j                  |j                  j                          n#t        j                  j!                         |_        |D ]  }	 |j                  j                  |	   |dk(  r||_        t%        dd| d	|        @|d
k(  r3t	        |d
      r&|j&                  }
|j                         D ]  \  }}|dv rt        |
|t        |             "|dk(  rt        |      |
_        8|dk(  r;|
j                  j                          |D ]  } |
j                  j                  |   x|dk(  rk|
j                  |
j                  j                          n#t        j                  j!                         |
_        |D ]  }	 |
j                  j                  |	   |dk(  r||
_        t%        dd| d	|        y|dk(  r	||_        |dk(  r	||_        t%        dd| d	|        	 | j0                  j3                  |g       y # t$        $ r |j/                           w xY w)NrS   )rI   rJ   rK   rM   rN   rL   rO   rW   r\   r   zUnknown update request.z: rV   )r   rN   codezUnknown update response.r5   r6   zUnknown update )rw   backupr   rr   hasattrrS   setattrr(   r&   rL   rO   r  r   rW   	mitmproxyr   Headerstextr   rV   rT   r5   r6   revertr   r"  )r   r   rw   abrS   kvheadertrailerrV   s              r,   putzFlowHandler.put  s   $(II7			) 3D1	>gdI&>6:llG !	 T1 TT#GQA7&[+.q6GL)^#OO113*+ = 3 3 3V <=*_&//; ' 0 0 6 6 83<>>3I3I3K 0+, ? 4 0 0 4 4g >?)^+,GL"*32I!Bqc0R"SS'T* *_z)B8<H !	 U1 77#HaQ8&[36q6H0)^$,,224*+ > 4 0 0 4 4f =>*_'00< ( 1 1 7 7 94=NN4J4J4L 1+, @ 5 1 1 5 5w ?@)^,-HM"*32J1#RPQs0S"TT'U( (]"#DK)^#$DL"3/!Bqc(BCCg3Dn 			$   	KKM	s   KK> >LNr  )r   r   r   r3  rC  r   r|   r,   r1  r1    s    &
;!r|   r1  c                      e Zd Zd Zy)DuplicateFlowc                    | j                   j                         }| j                  j                  |g       | j	                  |j
                         y rY   )rw   r   r   r   r   r0   )r   r   rx   s      r,   r  zDuplicateFlow.post  s4    IINN		qc

144r|   Nr  r   r|   r,   rE  rE    s    r|   rE  c                      e Zd Zd Zy)
RevertFlowc                    | j                   j                         rA| j                   j                          | j                  j	                  | j                   g       y y rY   )rw   r4   r<  r   r"  r+  s     r,   r  zRevertFlow.post  s?    99IIIIdii[)  r|   Nr  r   r|   r,   rH  rH    r/  r|   rH  c                      e Zd Zd Zy)
ReplayFlowc                f    | j                   j                  j                  d| j                  g       y )Nzreplay.client)r   r   callrw   r+  s     r,   r  zReplayFlow.post  s"    !!/DII;?r|   Nr  r   r|   r,   rK  rK    s    @r|   rK  c                      e Zd Zd Zd Zy)FlowContentc                    | j                   j                          t        | j                   |      }| j                  |_        | j
                  j                  | j                   g       y rY   )rw   r6  getattrr   r\   r   r"  )r   r   r~   s      r,   r  zFlowContent.post  sG    		$))W-++		$))%r|   c                   t        | j                  |      }t        | j                  t              sJ |j                  j                  dd       }d }|r)t        j                  d|      x}r|j                  d      }|sD| j                  j                  j                  j                  d      d   j                  d      d   }t        j                  dd	|      }d
| }| j                  d|       | j                  dd       | j                  dd       | j                  dd       | j                  |j                  d             y )Nr  zfilename=([-\w" .()]+)r   ?r   /ra   z[^-\w" .()]r/   zattachment; filename=r   zapplication/textr   r   r   r   F)strict)rQ  rw   rm   r   rO   rj   researchgrouprS   rM   splitsubr   r   get_content)r   r   r~   original_cdfilenamemcds          r,   rj   zFlowContent.get  s   $))W-$))X...oo))*?FII7EEqE771:yy((--33C8;AA#FrJH66."h7$XJ/-r2(:;0)<)62

7&&e&45r|   N)r   r   r   r  rj   r   r|   r,   rO  rO    s    &6r|   rO  c                  .    e Zd Z	 d	 	 	 	 	 	 	 ddZddZy)FlowContentViewNc                    t        j                  |||      \  }}}|rt        j                  |       |rt	        ||      }t        t        |      |      S )N)linesdescription)r   get_message_content_viewloggingrH   r   r   r   )r   viewnamer~   rw   	max_linesrd  rc  rH   s           r,   message_to_jsonzFlowContentView.message_to_json  sY     %1$I$Igt%
!UE MM% 5),Eu+#
 	
r|   c                "   | j                   }t        |t        t        t        f      sJ | j
                  j                  j                  d      r&t        | j
                  j                  d   d         }nd }|dk(  rt        |t              r#|j                  r|j                  j                  }n/t        |t        t        f      r|j                  }nt        dd      g }|D ]`  }| j                  ||||      }	|j                  |	d<   |j                  |	d<   |j                  |	       |sI|t!        |	d         z  }|dk  s` n | j#                  |       y t%        | j                   |      }| j#                  | j                  ||||             y )Nrc  r   ru   r   zThis flow has no messages.from_clientr'   )rw   rm   r   r   r   rS   r	  rj   r&   rh   ru   r   ri  rk  r'   appendr[   r   rQ  )
r   r   r~   content_viewrw   rh  ru   msgsr^  ds
             r,   rj   zFlowContentView.get  sT   yy$7G <===<<!!%%g.DLL227;A>?IIj $)dnn>>22D7G"45==s&@BBD ((q$	J#$==- !"+AQwZ0I A~ JJtdii1GJJt++L'4STr|   rY   )rg  r(   r~   z9http.Message | TCPMessage | UDPMessage | WebSocketMessagerw   zHTTPFlow | TCPFlow | UDPFlowrh  z
int | Noner  )r   r   r   ri  rj   r   r|   r,   ra  ra    s9     !%

 K
 +	

 
(Ur|   ra  c                      e Zd ZddZy)Commandsc           
        i }| j                   j                  j                  j                         D ]  \  }}|j                  |j                  D cg c]B  }|j
                  t        j                  |j                        t        |j                        dD c}|j                  rt        j                  |j                        nd |j                         d||<    | j                  |       y c c}w )N)namer3   kind)r   
parametersreturn_typesignature_help)r   r   rr   r   ru  rs  r
   typenamer3   r(   rt  rv  rw  r   )r   r   rs  cmdparams        r,   rj   zCommands.get3  s    --66<<> 	ID# "% 	 !&

 ' 0 0 < #EJJ ??  '//@"%"4"4"6HTN	  	

8s   AC.Nr  r   r   r|   r,   rq  rq  2  s    r|   rq  c                      e Zd ZddZy)ExecuteCommandc                   	 | j                   d   }	 | j                  j                  j	                  ||      }| j                  d|i       y # t        $ r g }Y Hw xY w# t        $ r&}| j                  dt        |      i       Y d }~y d }~ww xY w)Nr	  r)   rH   )r   r   r   r   call_stringsr   r   r(   )r   ry  argsresultr   s        r,   r  zExecuteCommand.postI  s    	99[)D
	[[))66sDAF JJV  	D	  	*JJQ())	*s(   A &A AA	B&BBN)ry  r(   r  r   r|   r,   r|  r|  H  s    r|   r|  c                      e Zd Zd Zy)Eventsc                    | j                  | j                  j                  j                  D cg c]  }t	        |       c}       y c c}w rY   )r   r   r  rs   r   r   s     r,   rj   z
Events.get]  s2    

1C1C1H1HIA$Q'IJIs   ANr   r   r|   r,   r  r  \  s    Kr|   r  c                      e Zd Zd Zd Zy)Optionsc                t    | j                  t        j                  | j                  j                               y rY   )r   r   
dump_dictsr   optionsr   s    r,   rj   zOptions.getb  s#    

:(()<)<=>r|   c                    | j                   }	  | j                  j                  j                  di | y # t        $ r}t        d|       d }~ww xY w)Nr   r   )r   r   r  r"  r   r   )r   r"  errs      r,   rC  zOptions.pute  sL    	*&DKK&&00 	*33%))	*s   &5 	AAAN)r   r   r   rj   rC  r   r|   r,   r  r  a  s    ?*r|   r  c                      e Zd Zd Zy)SaveOptionsc                     y rY   r   r   s    r,   r  zSaveOptions.postn  s    
 	r|   Nr  r   r|   r,   r  r  m  s    r|   r  c                      e Zd Zd Zy)	DnsRebindc                D    t         j                  j                  dd      )Ni  zTo protect against DNS rebinding, mitmweb can only be accessed by IP at the moment. (https://github.com/mitmproxy/mitmproxy/issues/3234))rU   )r   web	HTTPErrorr   s    r,   rj   zDnsRebind.getw  s'    kk##C $ 
 	
r|   Nr   r   r|   r,   r  r  v  s    
r|   r  c                      e Zd Zd Zy)Statec           	     >   | j                  t        j                  t        j                  D cg c]  }|j
                  dk7  s|j
                    c}| j                  j                  j                  D cg c]  }|j                          c}d       y c c}w c c}w )NQuery)r   contentViewsservers)
r   r   VERSIONr   viewsrs  r   proxyserverr  rv   )r   r@  ss      r,   rj   z	State.get  ss    

"??$0$6$6! !&&G:KAFF! 261H1H1P1PQAAIIKQ	
! Rs   B
B
4BNr   r   r|   r,   r  r    s    	
r|   r  c                  R    e Zd Zdhej                  j
                  j                  Zy)GZipContentAndFlowFilesr  N)r   r   r   r   r  GZipContentEncodingCONTENT_TYPESr   r|   r,   r  r    s$    "		(	(	6	6Mr|   r  c                  8     e Zd ZU ded<   	 	 	 	 	 	 d fdZ xZS )r   r   r   c                   || _         t        | 	  dt        j                  j                  t        j                  j                  t              d      t        j                  j                  t        j                  j                  t              d      dt        j                  d      |dt        g       | j                  ddt        fg       | j                  d	d
t        fdt        fdt        fdt        fdt         fdt"        fdt$        fdt&        fdt(        fdt*        fdt,        fdt.        fdt0        fdt2        fdt4        fdt6        fdt8        fdt:        fdt<        fdt>        fdt@        fdtB        fg       y ) Nzdns-rebind-protection	templatesstaticT   F)default_hosttemplate_pathstatic_pathxsrf_cookiescookie_secretdebug
autoreload
transformsz/.*z'^(localhost|[0-9.]+|\[[0-9a-fA-F:]+\])$rT  z/filter-help(?:\.json)?z/updatesz/commands(?:\.json)?z/commands/(?P<cmd>[a-z.]+)z/events(?:\.json)?z/flows(?:\.json)?z/flows/dumpz/flows/resumez/flows/killz/flows/(?P<flow_id>[0-9a-f\-]+)z&/flows/(?P<flow_id>[0-9a-f\-]+)/resumez$/flows/(?P<flow_id>[0-9a-f\-]+)/killz)/flows/(?P<flow_id>[0-9a-f\-]+)/duplicatez&/flows/(?P<flow_id>[0-9a-f\-]+)/replayz&/flows/(?P<flow_id>[0-9a-f\-]+)/revertzS/flows/(?P<flow_id>[0-9a-f\-]+)/(?P<message>request|response|messages)/content.dataz}/flows/(?P<flow_id>[0-9a-f\-]+)/(?P<message>request|response|messages)/content/(?P<content_view>[0-9a-zA-Z\-\_%]+)(?:\.json)?z/clearz/options(?:\.json)?z/options/savez/state(?:\.json)?)"r   r   __init__osrM   joindirname__file__urandomr  add_handlersr  r   r   r   rq  r|  r  r   r   r  r$  r1  r)  r-  rE  rK  rH  rO  ra  r  r  r  r  )r   r   r  r   s      r,   r  zApplication.__init__  sf    0'',,rwwx'@+NRWW__X%>I**S//0 	 		
 	1VY4G3HI6|$+Z8./((3.?&/%u-+!;/+3[A:JG8(C=}M:JG:JGj
N#
 H%'1!;/%u-;"	
r|   )r   r   r  r  r   r   )r   r   r   r   r  r   r   s   @r,   r   r     s+    002
:2
CG2
	2
 2
r|   r   )r	   zSequence[certs.Cert]r   zdict | None)rw   r   r   r   )r   zlog.LogEntryr   r   )U
__future__r   r   ro   r   rf  os.pathr  rV  collections.abcr   r   r   r   	itertoolsr   typingr   tornado.escaper   tornado.webtornado.websocketmitmproxy.flowr9  mitmproxy.tools.web.masterr	   r
   r   r   r   r   r   r   mitmproxy.dnsr   mitmproxy.httpr   mitmproxy.tcpr   r   mitmproxy.udpr   r   mitmproxy.utils.emojir   mitmproxy.utils.strutilsr   mitmproxy.websocketr   r-   r{   r   r  r  r   r   r   r   rh   WebSocketHandlerr   r   r   r   r  r  r$  r)  r-  r1  rE  rH  rK  rO  ra  rq  r|  r  r  r  r  r  r  r  r   r   r|   r,   <module>r     s   "      	 $ $        !   "         ! # ! $ ! $ ' / 0 D	w{{$$ 	D7W[[// D7N"> "3 3
$ 1 1 B B $B'0 '9N 9
 B#~ #". "& && &*~ *A!. A!HN * *@ @
6. 683Un 3Ul~ ,^ (K^ K
	*n 	*. 
 


N 

gkk== 5
'++)) 5
r|   