o
    ߭h                     @   s~   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 G dd dZdS )	    N)	b64decode	b64encode)BadSignature)MutableHeadersSecret)HTTPConnection)ASGIAppMessageReceiveScopeSendc                   @   s~   e Zd Z						ddedejeef d	ed
eje	 dedej
d dedeje ddfddZdedededdfddZdS )SessionMiddlewaresession u /laxFNapp
secret_keysession_cookiemax_agepath	same_site)r   strictnone
https_onlydomainreturnc	           	      C   sh   || _ tt|| _|| _|| _|| _d| | _|r"|  jd7  _|d ur2|  jd| 7  _d S d S )Nzhttponly; samesite=z; securez	; domain=)	r   itsdangerousTimestampSignerstrsignerr   r   r   security_flags)	selfr   r   r   r   r   r   r   r    r#   b/var/www/html/stock_analysis/be/venv/lib/python3.10/site-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   r/   r   expiresr!   )r   jsondumpsencoder    signr   formatr   decoder   r   r!   append)r-   r/   headersheader_valueinitial_session_was_emptyr&   r"   r(   r#   r$   send_wrapper7   s2   

z0SessionMiddleware.__call__.<locals>.send_wrapper)r   r   r   cookiesr4   r    unsignr   r2   loadsr   r   r	   )r"   r&   r'   r(   
connectionr/   r=   r#   r;   r$   __call__$   s$   zSessionMiddleware.__call__)r   r   r   r   FN)__name__
__module____qualname__r   typingUnionr   r   OptionalintLiteralboolr%   r   r
   r   rB   r#   r#   r#   r$   r      s6    	

r   )r2   rF   base64r   r   r   itsdangerous.excr   starlette.datastructuresr   r   starlette.requestsr   starlette.typesr   r	   r
   r   r   r   r#   r#   r#   r$   <module>   s    