a
    h                     @  s   d dl m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
 d
ZdS )    )annotationsN)	b64decode	b64encode)Literal)BadSignature)MutableHeadersSecret)HTTPConnection)ASGIAppMessageReceiveScopeSendc                   @  s@   e Zd Zdddd	d
d	ddddd	ddZdddddddZdS )SessionMiddlewaresession u /laxFNr
   zstr | Secretstrz
int | Nonez Literal['lax', 'strict', 'none']boolz
str | NoneNone)	app
secret_keysession_cookiemax_agepath	same_site
https_onlydomainreturnc	           	      C  sd   || _ tt|| _|| _|| _|| _d| | _|rD|  jd7  _|d ur`|  jd| 7  _d S )Nzhttponly; samesite=z; securez	; domain=)	r   itsdangerousZTimestampSignerr   signerr   r   r   security_flags)	selfr   r   r   r   r   r   r   r    r$   Y/var/www/html/assistant/venv/lib/python3.9/site-packages/starlette/middleware/sessions.py__init__   s    
zSessionMiddleware.__init__r   r   r   )scopereceivesendr   c                   s   d dvr$ |I d H  d S t}d j|jv r|jj d}z,jj|jd}t	t
|d< d W q ty   i d< Y q0 ni d< dd	d
 fdd} ||I d H  d S )Ntype)httpZ	websocketTutf-8)r   r   Fr   r   )messager   c                   s   | d dkrd rt td d}j|}t| d}djj|	dj
jrjdj dnd	jd
}|d| n4 st| 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Zinitial_session_was_emptyr'   r#   r)   r$   r%   send_wrapper9   s0    

z0SessionMiddleware.__call__.<locals>.send_wrapper)r   r	   r   cookiesr4   r!   Zunsignr   r2   loadsr   r   )r#   r'   r(   r)   
connectionr/   r<   r$   r;   r%   __call__&   s     zSessionMiddleware.__call__)r   r   r   r   FN)__name__
__module____qualname__r&   r@   r$   r$   r$   r%   r      s          r   )
__future__r   r2   base64r   r   typingr   r    Zitsdangerous.excr   Zstarlette.datastructuresr   r   Zstarlette.requestsr	   Zstarlette.typesr
   r   r   r   r   r   r$   r$   r$   r%   <module>   s   