o
    ùT·j7  ã                   @  s°   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
„ d
ƒZG dd„ deeejf ƒZdS )é    )ÚannotationsN)Ú	b64decodeÚ	b64encode)ÚLiteral)ÚBadSignature)ÚMutableHeadersÚSecret)ÚHTTPConnection)ÚASGIAppÚMessageÚReceiveÚScopeÚSendc                   @  s0   e Zd Z							d#d$dd„Zd%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ÚpartitionedÚreturnÚNonec
           
      C  sz   || _ t t|ƒ¡| _|| _|| _|| _d| | _|r"|  jd7  _|d ur0|  jd|› �7  _|	r;|  jd7  _d S d S )Nzhttponly; samesite=z; securez	; domain=z; partitioned)	r   ÚitsdangerousÚTimestampSignerr   Úsignerr   r   r   Úsecurity_flags)
Úselfr   r   r   r   r   r   r   r    r"   © r*   ú`/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/starlette/middleware/sessions.pyÚ__init__   s   
ÿzSessionMiddleware.__init__Úscoper   Úreceiver   Úsendr   c                 ƒ  sÔ   �ˆd dvrˆ  ˆ|ˆ¡I d H  d S tˆƒ}d‰ ˆj|jv rO|jˆj  d¡}zˆjj|ˆjd�}tt	 
t|ƒ¡ƒˆd< d‰ W n tyN   tƒ ˆd< Y nw tƒ ˆd< d‡ ‡‡‡fdd„}ˆ  ˆ||¡I d H  d S )NÚtype)ÚhttpÚ	websocketTúutf-8)r   r   FÚmessager   r#   r$   c                 “  sÞ   �| d dkrfˆd }t | d�}|jr| d¡ |jrN|rNtt |¡ d¡ƒ}ˆj 	|¡}dj
ˆj| d¡ˆjˆjrAdˆj› d	�nd
ˆjd�}| d|¡ n|jrfˆ sfdj
ˆjdˆjdˆjd�}| d|¡ ˆ| ƒI d H  d S )Nr0   zhttp.response.startr   )r-   ÚCookier3   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   r7   r   Úexpiresr(   )r   ÚaccessedÚadd_vary_headerÚmodifiedr   ÚjsonÚdumpsÚencoder'   ÚsignÚformatr   Údecoder   r   r(   Úappend)r4   r   Úheadersr7   Úheader_value©Úinitial_session_was_emptyr-   r)   r/   r*   r+   Úsend_wrapper=   s6   €


û
ûz0SessionMiddleware.__call__.<locals>.send_wrapper)r4   r   r#   r$   )r   r	   r   Úcookiesr?   r'   Úunsignr   ÚSessionr=   Úloadsr   r   )r)   r-   r.   r/   Ú
connectionr7   rH   r*   rF   r+   Ú__call__*   s$   €ÿ
zSessionMiddleware.__call__)r   r   r   r   FNF)r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r   r#   r$   )r-   r   r.   r   r/   r   r#   r$   )Ú__name__Ú
__module__Ú__qualname__r,   rN   r*   r*   r*   r+   r      s    ör   c                      s°   e Zd ZU dZded< dZded< d%dd„Zd%d	d
„Zd&‡ fdd„Zd'‡ fdd„Z	d%‡ fdd„Z
d(‡ fdd„Zd)‡ fdd„Zd*d+‡ fdd„Zd,‡ fd d!„Zd-‡ fd#d$„Z‡  ZS ).rK   Fr   r:   r<   r#   r$   c                 C  s
   d| _ d S ©NT)r:   ©r)   r*   r*   r+   Úmark_accessedb   s   
zSession.mark_accessedc                 C  s   d| _ d| _d S rR   )r:   r<   rS   r*   r*   r+   Úmark_modifiede   s   
zSession.mark_modifiedÚkeyr   Úvalueú
typing.Anyc                   s   |   ¡  tƒ  ||¡ d S ©N)rU   ÚsuperÚ__setitem__)r)   rV   rW   ©Ú	__class__r*   r+   r[   i   s   zSession.__setitem__c                   s   |   ¡  tƒ  |¡ d S rY   )rU   rZ   Ú__delitem__)r)   rV   r\   r*   r+   r^   m   s   zSession.__delitem__c                   s   |   ¡  tƒ  ¡  d S rY   )rU   rZ   ÚclearrS   r\   r*   r+   r_   q   s   zSession.clearÚargsc                   s$   | j p|| v | _ tƒ j|g|¢R Ž S rY   )r<   rZ   Úpop)r)   rV   r`   r\   r*   r+   ra   u   s   zSession.popútuple[str, typing.Any]c                   s   t ƒ  ¡ }|  ¡  |S rY   )rZ   ÚpopitemrU   )r)   Úitemr\   r*   r+   rc   y   s   
zSession.popitemNÚdefaultc                   s   || vr|   ¡  tƒ  ||¡S rY   )rU   rZ   Ú
setdefault)r)   rV   re   r\   r*   r+   rf   ~   s   zSession.setdefaultÚkwargsc                   s   |   ¡  tƒ j|i |¤Ž d S rY   )rU   rZ   Úupdate)r)   r`   rg   r\   r*   r+   rh   ƒ   s   zSession.updateÚotherc                  s   |   ¡  tƒ  |¡S rY   )rU   rZ   Ú__ior__)r)   ri   r\   r*   r+   rj   ‡   s   zSession.__ior__)r#   r$   )rV   r   rW   rX   r#   r$   )rV   r   r#   r$   )rV   r   r`   rX   r#   rX   )r#   rb   rY   )rV   r   re   rX   r#   rX   )r`   rX   rg   rX   r#   r$   )ri   rX   r#   rK   )rO   rP   rQ   r:   Ú__annotations__r<   rT   rU   r[   r^   r_   ra   rc   rf   rh   rj   Ú__classcell__r*   r*   r\   r+   rK   ^   s   
 

rK   )Ú
__future__r   r=   ÚtypingÚbase64r   r   r   r%   Úitsdangerous.excr   Ústarlette.datastructuresr   r   Ústarlette.requestsr	   Ústarlette.typesr
   r   r   r   r   r   Údictr   ÚAnyrK   r*   r*   r*   r+   Ú<module>   s    N