
    i                        d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dlZd dl	m
Z
 d dlmZmZ d dlmZ d dlmZmZmZmZmZ  G d	 d
          Z G d deeej        f                   ZdS )    )annotationsN)	b64decode	b64encode)Literal)BadSignature)MutableHeadersSecret)HTTPConnection)ASGIAppMessageReceiveScopeSendc                  ,    e Zd Z	 	 	 	 	 	 d d!dZd"dZdS )#SessionMiddlewaresession u /laxFNappr   
secret_keystr | Secretsession_cookiestrmax_age
int | Nonepath	same_site Literal['lax', 'strict', 'none']
https_onlybooldomain
str | NonereturnNonec	                    || _         t          j        t          |                    | _        || _        || _        || _        d|z   | _        |r| xj        dz  c_        || xj        d| z  c_        d S d S )Nzhttponly; samesite=z; securez	; domain=)	r   itsdangerousTimestampSignerr   signerr   r   r   security_flags)	selfr   r   r   r   r   r   r    r"   s	            Z/root/projects/qq-shell/venv/lib/python3.11/site-packages/starlette/middleware/sessions.py__init__zSessionMiddleware.__init__   s     "23z??CC,	3i? 	.:-#7v#7#77     scoper   receiver   sendr   c                H   K   d         dvr                      |           d {V  d S t                    }d j        |j        v r|j         j                                     d          }	  j                            | j                  }t          t          j
        t          |                              d<   dn2# t          $ r t                      d<   Y nw xY wt                      d<   d fd}                      ||           d {V  d S )Ntype)http	websocketTutf-8)r   r   Fmessager   r$   r%   c                  K   | d         dk    r8d         }t          |           }|j        r|                    d           |j        r|rt	          t          j        |                              d                    }j        	                    |          }d
                    j        |                    d          j        j        rdj         d	nd
j                  }|                    d|           nH|j        rAs?d
                    j        dj        dj                  }|                    d|            |            d {V  d S )Nr3   zhttp.response.startr   )r/   Cookier6   z?{session_cookie}={data}; path={path}; {max_age}{security_flags}zMax-Age=z;  )r   datar   r   r*   z
Set-Cookiez?{session_cookie}={data}; path={path}; {expires}{security_flags}nullz'expires=Thu, 01 Jan 1970 00:00:00 GMT; )r   r;   r   expiresr*   )r   accessedadd_vary_headermodifiedr   jsondumpsencoder)   signformatr   decoder   r   r*   append)	r7   r   headersr;   header_valueinitial_session_was_emptyr/   r+   r1   s	        r,   send_wrapperz0SessionMiddleware.__call__.<locals>.send_wrapper:   s     v"777#(#3(w777# 6++H555# ? ?$TZ%8%8%?%?%H%HIID;++D11D#d#k#k'+':![[11!Y?C| S ;4< ; ; ; ;QS'+': $l $ $L NN<>>>>% 	?.G 	?#d#k#k'+':#!Y I'+': $l $ $L NN<>>>$w--r.   )r7   r   r$   r%   )r   r
   r   cookiesrC   r)   unsignr   SessionrA   loadsr   r   )r+   r/   r0   r1   
connectionr;   rK   rJ   s   `` `   @r,   __call__zSessionMiddleware.__call__'   sq     = 555((5'4000000000F#E**
$(!*"444%d&9:AA'JJD-{))$)EE#*4:ioo+F+F#G#Gi ,1)) - - -#*99i   -  'yyE)	  	  	  	  	  	  	  	  	 < hhug|44444444444s   5AC
 
C('C()r   r   r   r   FN)r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   )r/   r   r0   r   r1   r   r$   r%   )__name__
__module____qualname__r-   rQ    r.   r,   r   r      sU        
 (/6; !8 8 8 8 8,15 15 15 15 15 15r.   r   c                       e Zd ZU dZded<   dZded<   ddZddZd fdZd fdZ	d fdZ
d fdZdd fdZd fdZ xZS )rN   Fr!   r>   r@   r$   r%   c                    d| _         d S NT)r>   r+   s    r,   mark_accessedzSession.mark_accessed_   s    r.   c                "    d| _         d| _        d S rX   )r>   r@   rY   s    r,   mark_modifiedzSession.mark_modifiedb   s    r.   keyr   value
typing.Anyc                t    |                                   t                                          ||           d S N)r\   super__setitem__)r+   r]   r^   	__class__s      r,   rc   zSession.__setitem__f   s5    C'''''r.   c                r    |                                   t                                          |           d S ra   )r\   rb   __delitem__)r+   r]   rd   s     r,   rf   zSession.__delitem__j   s3    C     r.   c                p    |                                   t                                                       d S ra   )r\   rb   clear)r+   rd   s    r,   rh   zSession.clearn   s*    r.   argsc                X    | j         p|| v | _          t                      j        |g|R  S ra   )r@   rb   pop)r+   r]   ri   rd   s      r,   rk   zSession.popr   s3    4uww{3&&&&&r.   Ndefaultc                x    || vr|                                   t                                          ||          S ra   )r\   rb   
setdefault)r+   r]   rl   rd   s      r,   rn   zSession.setdefaultv   s8    d??   ww!!#w///r.   kwargsc                b    |                                    t                      j        |i | d S ra   )r\   rb   update)r+   ri   ro   rd   s      r,   rq   zSession.update{   s6    ''''''r.   )r$   r%   )r]   r   r^   r_   r$   r%   )r]   r   r$   r%   )r]   r   ri   r_   r$   r_   ra   )r]   r   rl   r_   r$   r_   )ri   r_   ro   r_   r$   r%   )rR   rS   rT   r>   __annotations__r@   rZ   r\   rc   rf   rh   rk   rn   rq   __classcell__)rd   s   @r,   rN   rN   [   s$        HH      ( ( ( ( ( (! ! ! ! ! !     ' ' ' ' ' '0 0 0 0 0 0 0
( ( ( ( ( ( ( ( ( (r.   rN   )
__future__r   rA   typingbase64r   r   r   r'   itsdangerous.excr   starlette.datastructuresr   r	   starlette.requestsr
   starlette.typesr   r   r   r   r   r   dictr   AnyrN   rU   r.   r,   <module>r}      s5   " " " " " "   ' ' ' ' ' ' ' '           ) ) ) ) ) ) ; ; ; ; ; ; ; ; - - - - - - B B B B B B B B B B B B B BH5 H5 H5 H5 H5 H5 H5 H5V"( "( "( "( "(d3
?# "( "( "( "( "(r.   