
    @OOf%                         d dl Z d dlZd dlm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  e j$                  e      ZdZdZ G d d      Zy)    N)Sequence)command)ctx)
exceptions)flow)hooks)
optmanager)ALERT)status_codes)emojiz~/.mitmproxyi  c            
          e Zd Zd Z ej                  d      dededdfd       Z ej                  d      d	eej                     ddfd
       Z
 ej                  d      d	eej                     dej                  j                  ddfd       Z ej                  d      d	eej                     ddfd       Z ej                  d      d	eej                     ddfd       Z ej                  d      d	eej                     ddfd       Z ej                  d      dee   fd       Z ej                  d       ej&                  dej                  j)                  d            d	eej                     dededdfd              Z ej                  d      d	eej                     deddfd       Z ej                  d      d	eej                     deddfd       Z ej                  d       ej&                  d ej                  j)                  d!            d	eej                     ded eddfd"              Z ej                  d!      dee   fd#       Z ej                  d$      d%ej                  j4                  ddfd&       Z ej                  d'      d%ej                  j4                  ddfd(       Z ej                  d)      d.d*       Z ej                  d+      d,eddfd-       Zy)/Corec                 v   t         j                  }|j                  r!|j                  st	        j
                  d      d|v rx|j                  rkt        j                  j                  |j                        }t        j                  j                  |      s"t	        j
                  d|j                         y y y )NzSadd_upstream_certs_to_client_chain requires the upstream_cert option to be enabled.client_certsz(Client certificate path does not exist: )r   options"add_upstream_certs_to_client_chainupstream_certr   OptionsErrorr   ospath
expanduserexists)selfupdatedoptsr   s       V/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/addons/core.py	configurezCore.configure   s    {{224;M;M))e  W$  !ww11$2C2CDww~~l3$11B4CTCTBUV  4 ! %    setoptionvaluereturnNc                     |r|D cg c]	  }| d|  }}n|g}	 t        j                  j                  |  yc c}w # t        j                  $ r}t        j
                  |      |d}~ww xY w)a   
        Set an option. When the value is omitted, booleans are set to true,
        strings and integers are set to None (if permitted), and sequences
        are emptied. Boolean values can be true, false or toggle.
        Multiple values are concatenated with a single space.
        =N)r   r   r   r   r   CommandError)r   r    r!   vspecses         r   r   zCore.set%   sp     .34xq_4E4HE	4KKOOU#	 5
 && 	4))!,!3	4s   9> A,A''A,zflow.resumeflowsc                     |D cg c]  }|j                   s| }}|D ]  }|j                           t        j                  j                  j                  t        j                  |             yc c}w )z7
        Resume flows if they are intercepted.
        N)interceptedresumer   masteraddonstriggerr   
UpdateHook)r   r)   ir+   fs        r   r,   zCore.resume6   s]    
 #(9Q1==q99 	AHHJ	

!!%"2"2;"?@ :s
   A1A1z	flow.markmarkerc                    g }|t         j                   vrt        j                  d      |D ]  }||_        |j	                  |        t
        j                  j                  j                  t        j                  |             y)z
        Mark flows.
        zinvalid marker valueN)r   r   r%   markedappendr   r-   r.   r/   r   r0   )r   r)   r3   r   r1   s        r   markz	Core.markA   sn    
 $)),@BB 	AAHNN1	 	

!!%"2"27";<r   zflow.mark.togglec                     |D ]  }|j                   rd|_         d|_          t        j                  j                  j	                  t        j                  |             y)z(
        Toggle mark for flows.
         z	:default:N)r5   r   r-   r.   r/   r   r0   )r   r)   r1   s      r   mark_togglezCore.mark_toggleP   sM    
  	'Axx&		'
 	

!!%"2"25"9:r   z	flow.killc                 6   g }|D ]0  }|j                   s|j                          |j                  |       2 t        j	                  t
        dt        |      z         t        j                  j                  j                  t        j                  |             y)z%
        Kill running flows.
        zKilled %s flows.N)killablekillr6   loggerlogr
   lenr   r-   r.   r/   r   r0   r   r)   r   r2   s       r   r=   z	Core.kill\   sq    
  	"Azzq!	" 	

5,s7|;<

!!%"2"27";<r   zflow.revertc                 >   g }|D ]4  }|j                         s|j                          |j                  |       6 t        j	                  t
        dt        |      z         t        j                  j                  j                  t        j                  |             y)z&
        Revert flow changes.
        zReverted %s flows.N)modifiedrevertr6   r>   r?   r
   r@   r   r-   r.   r/   r   r0   rA   s       r   rD   zCore.revertj   ss    
  	"Azz|
q!	" 	

5.W=>

!!%"2"27";<r   zflow.set.optionsc                 
    g dS )N)hoststatus_codemethodr   urlreason r   s    r   flow_set_optionszCore.flow_set_optionsw   s    
 	
r   zflow.setattr)typec           	      <   |}|dk(  r	 t        |      }g }|D ]  }t	        |dd      }d}	|r<|dk(  r||_        n/|dk(  r||_        n"|dk(  r||_        n|d	k(  r		 ||_        nd| _
        t	        |dd      }d}|rF|dk(  r2||_        |t        j                  v r(t        j                  |   |_        n|dk(  r||_        nd}|	s|s|j                  |        t         j"                  j$                  j'                  t)        j*                  |             t,        j/                  t0        d| dt3        |       d       y# t        $ r}t        j                  d|z        |d}~ww xY w# t        $ r*}
t        j                  d
t        |       d|
       |
d}
~
ww xY w)zA
        Quickly set a number of common values on flows.
        rG   z!Status code is not an integer: %sNrequestTrH   rF   r   rI   zURL z is invalid: FresponserJ   zSet z on  z flows.)int
ValueErrorr   r%   getattrrH   rF   r   rI   reprrupdaterG   r   	RESPONSESrJ   r6   r   r-   r.   r/   r   r0   r>   r?   r
   r@   )r   r)   rN   r!   valr&   r   r2   reqrW   r(   respsupdates                r   flow_setzCore.flow_set   s    = #h  !	"A!Y-CG8#!$CJV^"CHV^"CHU]!"% $)DL1j$/DG=('*D$l444&2&<&<S&AX%"%DK#G'q!C!	"F 	

!!%"2"27";<

5DeCL>ABU   --7#=& & !(55"49+]1#> !!s/   D> E(>	E%E  E%(	F1%FFzflow.decodepartc                 \   g }|D ]C  }t        ||d      }|s|j                          |j                          |j                  |       E t        j
                  j                  j                  t        j                  |             t        j                  t        dt        |      z         y)z
        Decode flows.
        NzDecoded %s flows.)rU   backupdecoder6   r   r-   r.   r/   r   r0   r>   r?   r
   r@   )r   r)   r^   r   r2   ps         r   ra   zCore.decode   s    
  	"A4&A

q!	" 	

!!%"2"27";<

5-G<=r   zflow.encode.togglec                    g }|D ]v  }t        ||d      }|s|j                          |j                  j                  dd      }|dk(  r|j	                  d       n|j                          |j                  |       x t        j                  j                  j                  t        j                  |             t        j                  t        dt!        |      z         y)zN
        Toggle flow encoding on and off, using deflate for encoding.
        Ncontent-encodingidentitydeflatezToggled encoding on %s flows.)rU   r`   headersgetencodera   r6   r   r-   r.   r/   r   r0   r>   r?   r
   r@   )r   r)   r^   r   r2   rb   current_encs          r   encode_togglezCore.encode_toggle   s    
  		"A4&A
iimm,>
K*,HHY'HHJq!		" 	

!!%"2"27";<

59CLHIr   zflow.encodeencodingzflow.encode.optionsc                    g }|D ]f  }t        ||d      }|s|j                  j                  dd      }|dk(  s5|j                          |j	                  |       |j                  |       h t        j                  j                  j                  t        j                  |             t        j                  t        dt        |      z         y)z9
        Encode flows with a specified encoding.
        Nrd   re   zEncoded %s flows.)rU   rg   rh   r`   ri   r6   r   r-   r.   r/   r   r0   r>   r?   r
   r@   )r   r)   r^   rl   r   r2   rb   rj   s           r   ri   zCore.encode   s      	&A4&Aiimm,>
K*,HHJHHX&NN1%	& 	

!!%"2"27";<

5-G<=r   c                 
    g dS )zD
        The possible values for an encoding specification.
        )gziprf   brzstdrK   rL   s    r   encode_optionszCore.encode_options   s
    
 10r   zoptions.loadr   c                     	 t        j                  t        j                  |       y# t        t
        j                  f$ r}t        j                  d|z        |d}~ww xY w)z+
        Load options from a file.
        zCould not load options - %sN)r	   
load_pathsr   r   OSErrorr   r   r%   r   r   r(   s      r   options_loadzCore.options_load   sS    
	T!!#++t4001 	T))*G!*KLRSS	Ts   $' A AAzoptions.savec                     	 t        j                  t        j                  |       y# t        $ r}t        j                  d|z        |d}~ww xY w)z)
        Save options to a file.
        zCould not save options - %sN)r	   saver   r   ru   r   r%   rv   s      r   options_savezCore.options_save  sF    
	TOOCKK. 	T))*G!*KLRSS	Ts   $' 	AA		Azoptions.resetc                 @    t         j                  j                          y)z0
        Reset all options to defaults.
        N)r   r   resetrL   s    r   options_resetzCore.options_reset  s    
 	r   zoptions.reset.onenamec                     |t         j                  vrt        j                  d|z        t	        t         j                  |t         j                  j                  |             y)z8
        Reset one option to its default value.
        zNo such option: %sN)r   r   r   r%   setattrdefault)r   r~   s     r   options_reset_onezCore.options_reset_one  sK    
 s{{"))*>*EFFKKKK%	
r   )r"   N)__name__
__module____qualname__r   r   strr   r   r   Flowr,   	mitmproxytypesMarkerr7   r:   r=   rD   rM   argumentChoicer]   ra   rk   ri   rr   Pathrw   rz   r}   r   rK   r   r   r   r      s    W__U4# 4s 4t 4 4  W__]#AHTYY/ AD A $A W__[!=(499- =y7M7M =RV = "= W__'(	;$))!4 	; 	; )	; W__[!
=(499- 
=$ 
= "
= W__]#
=HTYY/ 
=D 
= $
= W__'(
(3- 
 )
 W__Z Wf9??#9#9:L#MN2Chtyy1 2C 2CS 2CT 2C O !2Ch W__]#>HTYY/ >s >t > $> W__)*J8DII#6 Jc Jd J +J$ W__]#Wjy'='=>S'TU>		"> > 	>
 
> V $>* W__*+1 1 ,1 W__^$T!5!5 T$ T %T W__^$T!5!5 T$ T %T W___% & W__()

c 

d 

 *

r   r   )loggingr   collections.abcr   mitmproxy.typesr   r   r   r   r   r   r	   mitmproxy.logr
   mitmproxy.net.httpr   mitmproxy.utilsr   	getLoggerr   r>   CONF_DIRLISTEN_PORTr   rK   r   r   <module>r      sT     	 $           + !			8	$H
 H
r   