
    @OOf'                        d dl Zd dlZd dlZd dlmZ d dlmZ 	 h dZ ej                  d      Z
 G d dej                        Zeeedz  ef   Zeeeedz  f      Zd Zd	 Zd"d
Zd Zd#dZd#dedeee   ef   fdZdedefdZd$dZd Zd Zd Zd Zdedee   fdZ dee   dee   fdZ!dee   defdZ"dededefdZ#d Z$d  Z%d! Z&y)%    N)Iterable)	multidict>   pathsecurecommentexpiresversionhttponlymax-agez([\"\\])c                   ,    e Zd Zed        Zed        Zy)CookieAttrsc                 "    | j                         S N)lower)keys    [/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/net/http/cookies.py_kconvzCookieAttrs._kconv(   s    yy{    c                     | d   S )N )valuess    r   _reduce_valueszCookieAttrs._reduce_values,   s     bzr   N)__name__
__module____qualname__staticmethodr   r   r   r   r   r   r   '   s(       r   r   c                     |t        |       k(  rd|dz   fS t        |t        |             D ]  }| |   |v s| || |fc S  | |dz    |dz   fS )z>
    Read until one of the characters in term is reached.
        )lenrange)sstarttermis       r   _read_untilr'   7   sn     A519}5#a&! !Q44<U1:q= ! UQUQU""r   c                     d}g }|}t        |dz   t        |             D ]D  }|r|j                  | |          d}| |   dk(  r n!| |   dk(  rd}1|j                  | |          F dj                  |      |dz   fS )af  
    start: offset to the first quote of the string to be read

    A sort of loose super-set of the various quoted string specifications.

    RFC6265 disallows backslashes or double quotes within quoted strings.
    Prior RFCs use backslashes to escape. This leaves us free to apply
    backslash escaping by default and be compatible with everything.
    Fr    "\Tr   )r"   r!   appendjoin)r#   r$   escapingretr&   s        r   _read_quoted_stringr/   C   s     H
CA519c!f% 	JJqtHqTS[qTT\HJJqt	 773<Qr   c                     t        | ||      S )zA
    Read a key - the LHS of a token/value pair in a cookie.
    )r'   r#   r$   delimss      r   	_read_keyr3   ^   s     q%((r   c                 h    |t        |       k\  rd|fS | |   dk(  rt        | |      S t        | ||      S )zD
    Reads a value - the RHS of a token/value pair in a cookie.
    r   r)   )r!   r/   r'   r1   s      r   _read_valuer5   e   s@     A5y	
5S"1e,,1eV,,r   c                     g }	 t        | |      \  }}|j                         }d}|t        |       k  r| |   dk(  rt        | |dz   d      \  }}|s|r|j	                  ||g       |dz  }|t        |       k  s	 ||fS z)zR
    Read pairs of lhs=rhs values from Cookie headers.

    off: start offset
    r   =r    ;)r3   lstripr!   r5   r+   )r#   offpairslhsrhss        r   _read_cookie_pairsr>   q   s     E
Q$SjjlQ<AcFcM"1cAgs3HC#LL#s$qSV|#: r   r#   returnc                    g }g }	 t        | |d      \  }}|j                         }d}|t        |       k  rk| |   dk(  rct        | |dz   d      \  }}|j	                         dk(  r)t        |      dk  rt        | |dz   d      \  }}|dz   |z   }|j                  ||f       n|r|j                  |d	f       |t        |       k  r| |   dk(  r|j                  |       g }|dz  }|t        |       k  sn|s|s|j                  |       ||fS )
z
    Read pairs of lhs=rhs values from SetCookie headers while handling multiple cookies.

    off: start offset
    specials: attributes that are treated specially
    z;=,r   r7   r    z;,r      ,N)r3   r9   r!   r5   r   r+   )r#   r:   cookiesr;   r<   r=   trails          r   _read_set_cookie_pairsrE      s'    GE
QU+SjjlQ<AcFcM"1cAgt4HC yy{i' s8q=!,Qa!>JE3)e+C LL#s$LL#t% Q<AcFcMNN5!EqSV|I L GuC<r   c                 L    | D ]  }|dv r yt        |      }|dk  s|dkD  s y y)Nz",;\T!   ~   F)ord)r#   r&   os      r   _has_specialrK      s9     <Ft8q4x r   c                     g }| D ]b  \  }}||}nG|j                         |vr.t        |      r#t        j                  d|      }d|z  }| d| }n| d| }|j	                  |       d |j                  |      S )zG
    specials: A lower-cased list of keys that will not be quoted.
    z\\\1z"%s"r7   )r   rK   ESCAPEsubr+   r,   )r;   specialssepvalskvvals          r   _format_pairsrU      s     D 	19CWWYh&<?

7A&A
ACq*CCq*CC	 88D>r   c                     t        | d      S )N)r   r   )rO   rU   lsts    r   _format_set_cookie_pairsrZ      s    ':;;r   c                 "    t        |       \  }}|S )zO
    Parse a Cookie header value.
    Returns a list of (lhs, rhs) tuples.
    )r>   )liner;   off_s      r   parse_cookie_headerr^      s    
 %T*KE4Lr   c                 L    g }| D ]  }|j                  t        |              |S r   )extendr^   )cookie_headerscookie_listheaders      r   parse_cookie_headersrd      s0    K  8.v678r   c                     t        |       S )z(
    Formats a Cookie header value.
    rW   rX   s    r   format_cookie_headerrf      s     r   r\   c                     t        |       \  }}g }|D ],  }|s|^}}|j                  |d   |d   t        |      f       . |S )z
    Parse a Set-Cookie header value

    Returns:
        A list of (name, value, attrs) tuples, where attrs is a
        CookieAttrs dict of attributes. No attempt is made to parse attribute
        values - they are treated purely as strings.
    r   r    )rE   r+   r   )r\   cookie_pairsr:   rC   r;   cookieattrss          r   parse_set_cookie_headerrk      s\     /t4L#G G"NFUNNF1Ivay+e2DEFG Nr   headersc                 P    g }| D ]  }t        |      }|j                  |         |S r   )rk   r`   )rl   rvrc   rC   s       r   parse_set_cookie_headersro   
  s3    	B )&1
		' Ir   set_cookiesc                     g }| D ]N  \  }}}||fg}|j                  t        |d      r|j                  n|       |j                  t	        |             P dj                  |      S )z,
    Formats a Set-Cookie header value.
    fieldsz, )r`   hasattrrr   r+   rZ   r,   )rp   rn   namevaluerj   r;   s         r   format_set_cookie_headerrv     sg    
 
B) 3eUWUH%=U\\5I
		*512	3 99R=r   cdeltac                 h   t        |       }|D ]  }|\  }}}|r|st        d      d|v st        j                  j	                  |d         }|rUt        j                  j                  |      |z   }|j                  dt        j                  j                  |d      g       |d=  t        |      S )z
    Args:
        c: A Set-Cookie string
        delta: Time delta in seconds
    Returns:
        A refreshed Set-Cookie string
    Raises:
        ValueError, if the cookie is invalid.
    zInvalid Cookier   T)usegmt)	rk   
ValueErroremailutilsparsedate_tz	mktime_tzset_all
formatdaterv   )	rw   rx   rC   ri   rt   ru   rj   efs	            r   refresh_set_cookie_headerr   "  s     &a(G %#eU5-..((y)9:AKK))!,u4i%++*@*@4*@*P)QR )$#%$ $G,,r   c                 
   d| v rDt         j                  j                  | d         }|rt         j                  j                  |      S yd| v r(	 t	        | d         }t        j
                         }||z   S y# t        $ r Y yw xY w)z
    Determines the time when the cookie will be expired.

    Considering both 'expires' and 'max-age' parameters.

    Returns: timestamp of when the cookie will expire.
             None, if no expiration time is set.
    r   r   zMax-AgeN)r|   r}   r~   r   inttimer{   )cookie_attrsr   max_agenow_tss       r   get_expiration_tsr   B  s     L KK$$\)%<=;;((++  
l	"	$,y12G YY[FG##  	
 	s   A6 6	BBc                 P    t        |       }t        j                         }|y||k  S )zH
    Determines whether a cookie has expired.

    Returns: boolean
    F)r   r   )r   exp_tsr   s      r   
is_expiredr   \  s.     |,FYY[F ~r   c                    | sg S g }| d   \  }}g }| dd D ]R  \  }}|j                         t        v r|j                  ||f       0|j                  ||t        |      f       ||g }}}T |j                  ||t        |      f       |S )zM
    Converts a list of pairs to a (name, value, attrs) for each cookie.
    r   r    N)r   _cookie_paramsr+   r   )r;   rb   rt   ru   rj   rR   rS   s          r   group_cookiesr   m  s    
 	K (KD%Eab	 *1779&LL!Q e[-?@A!"Ar%D* e[%789r   )z;=)r   )r   z; )'email.utilsr|   rer   collections.abcr   mitmproxy.coretypesr   r   compilerM   	MultiDictr   tuplestr
TSetCookielistTPairsr'   r/   r3   r5   r>   r   rE   boolrK   rU   rZ   r^   rd   rf   rk   ro   rv   r   r   r   r   r   r   r   <module>r      sO    	  $ )$ 
K	 	)%% 	 3d
K/0
	eCtO$	%	#6)	-43c 3U4<3D-E 3lC D $<# $z*: $hsm Z8H $z*: s  - -S -S -@4 "r   