§
    §MºfV'  ã                   ó  — d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ 	 d dlmZ n# e$ r	 d dlmZ Y nw xY w G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Zd„ ZdS )é    N)Úimport_module)Úsettings)ÚUpdateError)ÚSuspiciousOperation)Úparse_cookie)ÚSimpleCookie)Útimezone)Ú	force_str)Ú
LazyObject)Údatabase_sync_to_async)Ú	http_date)Úcookie_datec                   ó^   — e Zd ZdZd„ Zd„ Ze	 	 	 	 	 	 	 	 dd	„¦   «         Zedd
„¦   «         ZdS )ÚCookieMiddlewarezž
    Extracts cookies from HTTP or WebSocket-style scopes and adds them as a
    scope["cookies"] entry with the same format as Django's request.COOKIES.
    c                 ó   — || _         d S ©N©Úinner©Úselfr   s     úP/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/channels/sessions.pyÚ__init__zCookieMiddleware.__init__   ó   € ØˆŒ
ˆ
ˆ
ó    c              ƒ   ó  K  — d|vrt          d¦  «        ‚|                     dg ¦  «        D ]/\  }}|dk    r$t          |                     d¦  «        ¦  «        } nŒ0i }|                      t          ||¬¦  «        ||¦  «        ƒ d {V —†S )NÚheaderszCookieMiddleware was passed a scope that did not have a headers key (make sure it is only passed HTTP or WebSocket connections)s   cookieÚlatin1)Úcookies)Ú
ValueErrorÚgetr   Údecoder   Údict)r   ÚscopeÚreceiveÚsendÚnameÚvaluer   s          r   Ú__call__zCookieMiddleware.__call__   s¶   è è € à˜EÐ!Ð!ÝðPñô ð ð
 !Ÿ9š9 Y°Ñ3Ô3ð 	ð 	‰KˆD�%Ø�yÒ Ð Ý& u§|¢|°HÑ'=Ô'=Ñ>Ô>�Ø�ð !ð
 ˆGà—Z’Z¥ U°GÐ <Ñ <Ô <¸gÀtÑLÔLÐLÐLÐLÐLÐLÐLÐLr   Ú Nú/FÚlaxc           	      óà  — t          |¦  «        }t          ¦   «         }|||<   |�«t          |t          j        ¦  «        r…t	          j        |¦  «        rt	          j        |t          j        ¦  «        }||                     ¦   «         z
  }|t          j	        d¬¦  «        z   }d}t          d|j        dz  |j        z   ¦  «        }n|||         d<   nd||         d<   |�9|||         d<   |s,t          t          j        ¦   «         |z   ¦  «        ||         d<   |�|||         d	<   |�|||         d
<   |rd||         d<   |	rd||         d<   |
�+|
                     ¦   «         dv s
J d¦   «         ‚|
||         d<   |                     ¦   «         D ]b}|                     dg ¦  «                             dt'          |                     d¬¦  «                             ¦   «         d¬¦  «        f¦  «         ŒcdS )aY  
        Sets a cookie in the passed HTTP response message.

        ``expires`` can be:
        - a string in the correct format,
        - a naive ``datetime.datetime`` object in UTC,
        - an aware ``datetime.datetime`` object in any time zone.
        If it is a ``datetime.datetime`` object then ``max_age`` will be calculated.
        Né   )Úsecondsr   i€Q Úexpiresr)   zmax-ageÚpathÚdomainTÚsecureÚhttponly)Ústrictr+   Únonez1samesite must be either 'strict', 'lax' or 'none'Úsamesiter   s
   Set-Cookie)Úheaderzutf-8)Úencoding)r
   r   Ú
isinstanceÚdatetimer	   Úis_awareÚ
make_naiveÚutcÚutcnowÚ	timedeltaÚmaxÚdaysr.   r   ÚtimeÚlowerÚvaluesÚ
setdefaultÚappendÚbytesÚoutputÚstrip)ÚclsÚmessageÚkeyr'   Úmax_ager/   r0   r1   r2   r3   r6   r   ÚdeltaÚcs                 r   Ú
set_cookiezCookieMiddleware.set_cookie1   s4  € õ. ˜%Ñ Ô ˆÝ‘.”.ˆØˆ�‰ØÐÝ˜'¥8Ô#4Ñ5Ô5ð 2ÝÔ$ WÑ-Ô-ð IÝ&Ô1°'½8¼<ÑHÔH�GØ '§.¢.Ñ"2Ô"2Ñ2�ð ¥Ô 2¸1Ð =Ñ =Ô =Ñ=�à�Ý˜a ¤¨eÑ!3°e´mÑ!CÑDÔD��à*1�˜”˜YÑ'Ð'à&(ˆG�CŒL˜Ñ#ØÐØ&-ˆG�CŒL˜Ñ#àð KÝ*3µD´I±K´KÀ'Ñ4IÑ*JÔ*J�˜”˜YÑ'ØÐØ#'ˆG�CŒL˜Ñ ØÐØ%+ˆG�CŒL˜Ñ"Øð 	*Ø%)ˆG�CŒL˜Ñ"Øð 	,Ø'+ˆG�CŒL˜Ñ$ØÐØ—>’>Ñ#Ô#ð (ð ð ð ð Cñ	ô ð ð
 (0ˆG�CŒL˜Ñ$à—’Ñ!Ô!ð 	ð 	ˆAØ×Ò˜y¨"Ñ-Ô-×4Ò4Ø¥ a§h¢h°b hÑ&9Ô&9×&?Ò&?Ñ&AÔ&AÈGÐ TÑ TÔ TÐUñô ð ð ð	ð 	r   c                 ó8   — |                       ||d||d¬¦  «        S )z1
        Deletes a cookie in a response.
        r   zThu, 01-Jan-1970 00:00:00 GMT)rM   r0   r1   r/   )rP   )rJ   rK   rL   r0   r1   s        r   Údelete_cookiezCookieMiddleware.delete_cookieu   s1   € ð
 �~Š~ØØØØØØ3ð ñ 
ô 
ð 	
r   )r)   NNr*   NFFr+   )r*   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r(   ÚclassmethodrP   rR   © r   r   r   r      sž   € € € € € ðð ð
ð ð ðMð Mð Mð$ ð
 ØØØØØØØðAð Að Añ „[ðAðF ð
ð 
ð 
ñ „[ð
ð 
ð 
r   r   c                   ó6   — e Zd ZdZdgZdgZd„ Zd„ Zd„ Zd„ Z	dS )ÚInstanceSessionWrapperzf
    Populates the session in application instance scope, and wraps send to save
    the session.
    zhttp.response.startc                 ó0  — t           j        | _        t          t           j        ¦  «        j        | _        t          |¦  «        | _        d| j        v rd| _	        n5d| j        vrt          d¦  «        ‚t          ¦   «         | j        d<   d| _	        || _        d S )NÚsessionFr   zPNo cookies in scope - SessionMiddleware needs to run inside of CookieMiddleware.T)r   ÚSESSION_COOKIE_NAMEÚcookie_namer   ÚSESSION_ENGINEÚSessionStoreÚsession_storer"   r#   Ú	activatedr   r   Ú	real_send)r   r#   r%   s      r   r   zInstanceSessionWrapper.__init__�   s”   € Ý#Ô7ˆÔÝ*­8Ô+BÑCÔCÔPˆÔå˜%‘[”[ˆŒ
à˜œ
Ð"Ð"ð #ˆDŒNˆNð  ¤
Ð*Ð*Ý ð2ñô ð õ
 %/¡L¤LˆDŒJ�yÑ!Ø!ˆDŒNð ˆŒˆˆr   c              ƒ   óº   K  — | j         d                              | j        ¦  «        } t          | j        ¦  «        |¦  «        ƒ d {V —†| j         d         _        d S )Nr   r\   )r#   r    r^   r   ra   Ú_wrapped)r   Úsession_keys     r   Úresolve_sessionz&InstanceSessionWrapper.resolve_session¨   sx   è è € Ø”j Ô+×/Ò/°Ô0@ÑAÔAˆð0
Õ/EØÔñ0
ô 0
à
ñ0ô 0ð *ð *ð *ð *ð *ð *ˆŒ
�9ÔÔ&Ð&Ð&r   c              ƒ   óä  K  — | j         �rÌ| j        d         j        }| j        d                              ¦   «         }|d         | j        v �r‹|                     dd¦  «        dk    �rp|st          j        �ra t          | j	        ¦  «        ¦   «         ƒ d{V —† |d         | j
        v �r/|rVt          j        | j        d         v r<t                               |t          j        t          j        t          j        ¬¦  «         n×| j        d                              ¦   «         rd}d}nD| j        d                              ¦   «         }t%          j        ¦   «         |z   }t'          |¦  «        }t                               || j        | j        d         j        ||t          j        t          j        t          j        pdt          j        pdt          j        ¬	¦
  «
         |                      |¦  «        ƒ d{V —†S )
zG
        Overridden send that also does session saves/cookies.
        r\   ÚtypeÚstatuséÈ   iô  Nr   )r0   r1   )rM   r/   r1   r0   r2   r3   r6   )rb   r#   ÚmodifiedÚis_emptyÚsave_message_typesr    r   ÚSESSION_SAVE_EVERY_REQUESTr   Úsave_sessionÚcookie_response_message_typesr]   r   rR   ÚSESSION_COOKIE_PATHÚSESSION_COOKIE_DOMAINÚget_expire_at_browser_closeÚget_expiry_agerB   r   rP   r^   rf   ÚSESSION_COOKIE_SECUREÚSESSION_COOKIE_HTTPONLYÚSESSION_COOKIE_SAMESITErc   )r   rK   rl   ÚemptyrM   r/   Úexpires_times          r   r%   zInstanceSessionWrapper.send®   sñ  è è € ð
 Œ>ñ -	Ø”z )Ô,Ô5ˆHØ”J˜yÔ)×2Ò2Ñ4Ô4ˆEð
 ˜” 4Ô#:Ð:Ñ:Ø—K’K ¨#Ñ.Ô.°#Ò5Ñ5Øð 6Ý!)Ô!Dñ 6ð @Õ,¨TÔ->Ñ?Ô?ÑAÔAÐAÐAÐAÐAÐAÐAÐAð ˜6”? dÔ&HÐHÑHØð å#Ô7¸4¼:ÀiÔ;PÐPÐPÝ,×:Ò:Ø 'Ý (Ô <Ý%-Ô%AÝ'/Ô'Eð	 ;ñ ô ð øð  œ: iÔ0×LÒLÑNÔNð >Ø&*˜GØ&*˜G˜Gà&*¤j°Ô&;×&JÒ&JÑ&LÔ&L˜GÝ+/¬9©;¬;¸Ñ+@˜LÝ&/°Ñ&=Ô&=˜Gå(×3Ò3Ø#Ø Ô,Ø œJ yÔ1Ô=Ø$+Ø$+Ý#+Ô#AÝ!)Ô!=Ý#+Ô#AÐ#IÀTÝ%-Ô%EÐ%MÈÝ%-Ô%Eð 4ñ ô ð ð —^’^ GÑ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r   c                 ó€   — 	 | j         d                              ¦   «          dS # t          $ r t          d¦  «        ‚w xY w)z,
        Saves the current session.
        r\   z‚The request's session was deleted before the request completed. The user may have logged out in a concurrent request, for example.N)r#   Úsaver   r   )r   s    r   rp   z#InstanceSessionWrapper.save_sessionä   sX   € ð	ØŒJ�yÔ!×&Ò&Ñ(Ô(Ð(Ð(Ð(øÝð 	ð 	ð 	Ý%ð<ñô ð ð	øøøs   ‚# £=N)
rS   rT   rU   rV   rn   rq   r   rg   r%   rp   rX   r   r   rZ   rZ   „   sq   € € € € € ðð ð 0Ð0Ðð &;Ð$;Ð!ðð ð ð0ð ð ð4-ð 4-ð 4-ðlð ð ð ð r   rZ   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚSessionMiddlewarezü
    Class that adds Django sessions (from HTTP cookies) to the
    scope. Works with HTTP or WebSocket protocol types (or anything that
    provides a "headers" entry in the scope).

    Requires the CookieMiddleware to be higher up in the stack.
    c                 ó   — || _         d S r   r   r   s     r   r   zSessionMiddleware.__init__û   r   r   c              ƒ   ó¨   K  — t          ||¦  «        }|                     ¦   «         ƒ d{V —† |                      |j        ||j        ¦  «        ƒ d{V —†S )z{
        Instantiate a session wrapper for this scope, resolve the session and
        call the inner application.
        N)rZ   rg   r   r#   r%   )r   r#   r$   r%   Úwrappers        r   r(   zSessionMiddleware.__call__þ   sg   è è € õ
 )¨°Ñ5Ô5ˆà×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'à—Z’Z ¤¨w¸¼ÑEÔEÐEÐEÐEÐEÐEÐEÐEr   N)rS   rT   rU   rV   r   r(   rX   r   r   r~   r~   ò   sA   € € € € € ðð ðð ð ð	Fð 	Fð 	Fð 	Fð 	Fr   r~   c                 ó:   — t          t          | ¦  «        ¦  «        S r   )r   r~   r   s    r   ÚSessionMiddlewareStackrƒ     s   € ÝÕ-¨eÑ4Ô4Ñ5Ô5Ð5r   )r:   rB   Ú	importlibr   Údjango.confr   Ú%django.contrib.sessions.backends.baser   Údjango.core.exceptionsr   Údjango.httpr   Údjango.http.cookier   Údjango.utilsr	   Údjango.utils.encodingr
   Údjango.utils.functionalr   Úchannels.dbr   Údjango.utils.httpr   ÚImportErrorr   r   rZ   r~   rƒ   rX   r   r   ú<module>r�      sÃ  ðØ €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #à  Ð  Ð  Ð  Ð  Ð  Ø =Ð =Ð =Ð =Ð =Ð =Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø $Ð $Ð $Ð $Ð $Ð $Ø +Ð +Ð +Ð +Ð +Ð +Ø !Ð !Ð !Ð !Ð !Ð !Ø +Ð +Ð +Ð +Ð +Ð +Ø .Ð .Ð .Ð .Ð .Ð .à .Ð .Ð .Ð .Ð .Ð .ð;Ø+Ð+Ð+Ð+Ð+Ð+Ð+øØð ;ð ;ð ;Ø:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ð;øøøðk
ð k
ð k
ð k
ð k
ñ k
ô k
ð k
ð\kð kð kð kð kñ kô kð kð\Fð Fð Fð Fð Fñ Fô Fð Fð26ð 6ð 6ð 6ð 6s   ÁA ÁAÁA