o
     d                     @   s   d dl Z d dlZd dlZd dlmZ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 ejdkrFd dlmZ nd dlmZ G d	d
 d
ZdS )    N)	b64decode	b64encode)BadSignature)MutableHeadersSecret)HTTPConnection)ASGIAppMessageReceiveScopeSend)      )Literalc                   @   sp   e Zd Z					ddedejeef ded	eje	 d
ede
d deddfddZdedededdfddZdS )SessionMiddlewaresession u /laxFapp
secret_keysession_cookiemax_agepath	same_site)r   strictnone
https_onlyreturnNc                 C   sL   || _ tt|| _|| _|| _|| _d| | _|r$|  jd7  _d S d S )Nzhttponly; samesite=z; secure)	r   itsdangerousTimestampSignerstrsignerr   r   r   security_flags)selfr   r   r   r   r   r   r    r%   H/usr/local/lib/python3.10/dist-packages/starlette/middleware/sessions.py__init__   s   

zSessionMiddleware.__init__scopereceivesendc                    s   d dvr |I d H  d S t}d j|jv rL|jj d}zjj|jd}t	t
|d< d W n tyK   i d< Y nw i d< dtd	d f fd
d} ||I d H  d S )Ntype)http	websocketTutf-8)r   r   Fmessager   c                    s   | d dkr]d rCt td d}j|}t| d}djj|	dj
jr6dj dnd	jd
}|d| n s]t| d}djjdj
djd}|d| | I d H  d S )Nr+   zhttp.response.startr   r.   )r(   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   r1   r   expiresr#   )r   jsondumpsencoder"   signr   formatr   decoder   r   r#   append)r/   r1   headersheader_valueinitial_session_was_emptyr(   r$   r*   r%   r&   send_wrapper:   s2   

z0SessionMiddleware.__call__.<locals>.send_wrapper)r   r   r   cookiesr6   r"   unsignr   r4   loadsr   r   r	   )r$   r(   r)   r*   
connectionr1   r?   r%   r=   r&   __call__'   s$   zSessionMiddleware.__call__)r   r   r   r   F)__name__
__module____qualname__r   typingUnionr!   r   Optionalintr   boolr'   r   r
   r   rD   r%   r%   r%   r&   r      s0    	
r   )r4   sysrH   base64r   r   r   itsdangerous.excr   starlette.datastructuresr   r   starlette.requestsr   starlette.typesr   r	   r
   r   r   version_infor   typing_extensionsr   r%   r%   r%   r&   <module>   s    
