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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)BadTimeSignatureSignatureExpired)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d	e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	same_site
https_onlyreturnNc                 C   sF   || _ tt|| _|| _|| _d| | _|r!|  jd7  _d S d S )Nzhttponly; samesite=z; secure)r   itsdangerousZTimestampSignerstrsignerr   r   security_flags)selfr   r   r   r   r   r    r   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/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 rN|jj d}zjj|jd}t	t
|d< d W n ttfyM   i d< Y nw i d< dtd	d f fd
d} ||I d H  d S )Ntype)httpZ	websocketTutf-8)r   r   Fmessager   c                    s   | d dkrMd r7t td d}j|}t| d}dj|dj	j
f }|d| n sMt| d}djd	j
}|d| | I d H  d S )
Nr$   zhttp.response.startr   r&   )r!   z%s=%s; path=/; Max-Age=%d; %sz
Set-Cookiez	{}={}; {}z4null; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT;)r   jsondumpsencoder   signr   r   decoder   r   appendformat)r'   dataheadersheader_valueZinitial_session_was_emptyr!   r   r#   r   r   send_wrapper2   s,   

z0SessionMiddleware.__call__.<locals>.send_wrapper)r   r   r   cookiesr*   r   Zunsignr   r(   loadsr   r   r   r
   )r   r!   r"   r#   
connectionr/   r3   r   r2   r   __call__   s$   zSessionMiddleware.__call__)r   r   r   F)__name__
__module____qualname__r	   typingUnionr   r   intboolr    r   r   r   r7   r   r   r   r   r      s*    
r   )r(   r;   base64r   r   r   Zitsdangerous.excr   r   Zstarlette.datastructuresr   r   Zstarlette.requestsr   Zstarlette.typesr	   r
   r   r   r   r   r   r   r   r   <module>   s    