
    @OOf                         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	  ej                  e      Z G d d      Z G d de      Zdd	d
dZde	j                   defdZde	j                   fdZy)    N)ctx)httpc                       e Zd ZdZdededz  fdZedefd       Zde	j                  defd	Zde	j                  ddfd
Zy)ASGIAppa`  
    An addon that hosts an ASGI/WSGI HTTP app within mitmproxy, at a specified hostname and port.

    Some important caveats:
        - This implementation will block and wait until the entire HTTP response is completed before sending out data.
        - It currently only implements the HTTP protocol (Lifespan and WebSocket are unimplemented).
    hostportNc                 n    t         j                  j                  |      }|||c| _        | _        | _        y N)asgirefcompatibilityguarantee_single_callableasgi_appr   r   )selfr   r   r   s       Y/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/addons/asgiapp.py__init__zASGIApp.__init__   s.    ((BB8L.6d+ty$)    returnc                 :    d| j                    d| j                   S )Nzasgiapp::)r   r   )r   s    r   namezASGIApp.name   s    $))Adii[11r   flowc                    t        |j                  j                  | j                  k(  xr_ | j                  d u xs# |j                  j                  | j                  k(  xr* |j
                  xr |j                   xr |j                         S r
   )boolrequestpretty_hostr   r   liveerrorresponser   r   s     r   should_servezASGIApp.should_serve   s{    LL$$		1 "d"Ddll&7&7499&D"		" JJ" MM!
 	
r   c                 p   K   | j                  |      rt        | j                  |       d {    y y 7 wr
   )r    server   r   s     r   r   zASGIApp.request(   s0     T"t,,, #,s   +646)__name__
__module____qualname____doc__strintr   propertyr   r   HTTPFlowr   r    r    r   r   r   r      sj    Cs C#* C 2c 2 2
 
4 
-$-- -D -r   r   c                   .     e Zd Zdededz  f fdZ xZS )WSGIAppr   r   Nc                 f    t         j                  j                  |      }t        |   |||       y r
   )r   wsgi
WsgiToAsgisuperr   )r   wsgi_appr   r   r   	__class__s        r   r   zWSGIApp.__init__.   s(    <<**844.r   )r#   r$   r%   r'   r(   r   __classcell__)r3   s   @r   r-   r-   -   s    /s /#* / /r   r-   z1.01.12)zHTTP/1.0zHTTP/1.1zHTTP/2.0r   r   c                    t         j                  j                  | j                  j                  j
                        j                  dd      }|d   }t        |      dkD  r1t         j                  j                  |d         j                         }nd}dddd	t        j                  | j                  j                  d
      | j                  j                  | j                  j                  j                         || j                  j
                  || j                  j                   j"                  D cg c]  \  }}|j%                         |f c}}| j&                  j(                  dt*        j,                  idS c c}}w )Nz%3F   )maxsplitr   r   r   z3.0z2.1)versionspec_versionr5   zmitmproxy.master)typeasgihttp_versionmethodschemepathraw_pathquery_stringheadersclient
extensions)urllibparsequote_from_bytesr   datarA   splitlenunquoteencodeHTTP_VERSION_MAPgetr>   r?   r@   upperrD   fieldslowerclient_connpeernamer   master)r   quoted_pathrA   rC   r   values         r   
make_scoperY   :   s>   ,,//0A0A0F0FGMM N K q>D ;!||++KN;BBD !
 ),,T\\-F-FN,,%%,,%%++-LL%%$7;||7K7K7R7R
&3tUTZZ\5!
 ""++


! 
s   5E=c                   K   t              }t        j                         ddfd}fd}	  | |||       d{    st        d      	 j                          y7 ## t        $ rG}t
        j                  d|        t        j                  j                  dd      _
        Y d}~^d}~ww xY w# j                          w xY ww)	z
    Serves app on flow.
    Fc                     K   sddj                   j                  dS  j                          d {    ddiS 7 w)NTzhttp.request)r<   bodyr<   zhttp.disconnect)r   raw_contentwait)doner   received_bodys   r   receivezserve.<locals>.receivek   sK      M&00  ))+-.. s   1?=	?c                   K   | d   dk(  rTt         j                  j                  | d   d| j                  dg             _        j                  j                          y | d   dk(  rSj                  sJ j                  xj                  | j                  dd      z  c_        | j                  dd	      sd
y y t        d| d          w)Nr<   zhttp.response.startstatusr   rD   zhttp.response.bodyr\   	more_bodyFTzUnexpected event: )r   ResponsemakerP   r   decodecontentAssertionError)eventr   sent_responses    r   sendzserve.<locals>.sendy   s     =11 MM..heii	2&>DM MM  "6]22== =MM!!UYYvs%;;!99[%0 $ 1 !#5eFm_!EFFs   C	CNzno response sent.zError in asgi app: i  s   ASGI Error.)rY   asyncioEventRuntimeError	Exceptionlogger	exceptionr   re   rf   r   set)	appr   scopera   rl   er_   r`   rk   s	    `    @@@r   r"   r"   a   s     
 tE==?DMM/G%$'''!244  	
 	(  @.qc23**3?@ 	
sR   1CA+ A)A+ B> C)A+ +	B;4=B61B> 6B;;B> >CC)rm   loggingurllib.parserG   asgiref.compatibilityr   asgiref.wsgi	mitmproxyr   r   	getLoggerr#   rq   r   r-   rO   r*   dictrY   r"   r+   r   r   <module>r~      s}          			8	$- ->/g /  $T]] $t $N/4== /r   