Ë
    üûàgV'  ã                   óâ   — d dl Z d dlZd dlm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  G d„ d«      Z G d„ d«      Z G d„ d«      Zd„ Zy)é    N)Úimport_module)Úsettings)ÚUpdateError)ÚSuspiciousOperation)Úparse_cookie)ÚSimpleCookie)Útimezone)Ú	force_str)Ú
LazyObject)Ú	http_date)Údatabase_sync_to_asyncc                   óP   — e Zd ZdZd„ Zd„ Ze	 	 	 	 	 	 	 	 dd„«       Zedd„«       Zy)	Ú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                 ó   — || _         y ©N©Úinner©Úselfr   s     úO/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/channels/sessions.pyÚ__init__zCookieMiddleware.__init__   ó	   € Øˆ�
ó    c              ƒ   óò   K  — d|vrt        d«      ‚|j                  dg «      D ]&  \  }}|dk(  sŒt        |j                  d«      «      } n i }| j	                  t        ||¬«      ||«      ƒ d {  –—† S 7 Œ­w)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ò 	‰KˆD�%Ø�yÓ Ü& u§|¡|°HÓ'=Ó>�Ùð	ð ˆGà—Z‘Z¤ U°GÔ <¸gÀtÓL×LÐLÐLús   ‚-A7°A A7Á0A5Á1A7Nc           	      ój  — t        |«      }t        «       }|||<   |�±t        |t        j                  «      rŽt	        j
                  |«      r$t	        j                  |t        j                  «      }||j                  «       z
  }|t        j                  d¬«      z   }d}t        d|j                  dz  |j                  z   «      }n|||   d<   nd||   d<   |�0|||   d<   |s&t        t        j                  «       |z   «      ||   d<   |�|||   d	<   |�|||   d
<   |rd||   d<   |	rd||   d<   |
�!|
j                  «       dv sJ d«       ‚|
||   d<   |j!                  «       D ]N  }|j#                  dg «      j%                  dt'        |j)                  d¬«      j+                  «       d¬«      f«       ŒP y)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 ÚexpiresÚ zmax-ageÚpathÚdomainTÚsecureÚhttponly)ÚstrictÚlaxÚ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+   r-   r.   r/   r0   r4   r   ÚdeltaÚcs                 r   Ú
set_cookiezCookieMiddleware.set_cookie.   sÓ  € ô. ˜%Ó ˆÜ“.ˆØˆ�‰ØÐÜ˜'¤8×#4Ñ#4Ô5Ü×$Ñ$ WÔ-Ü&×1Ñ1°'¼8¿<¹<ÓH�GØ '§.¡.Ó"2Ñ2�ð ¤× 2Ñ 2¸1Ô =Ñ=�à�Ü˜a §¡¨eÑ!3°e·m±mÑ!CÓD‘à*1�˜‘˜YÒ'à&(ˆG�C‰L˜Ñ#ØÐØ&-ˆG�C‰L˜Ñ#áÜ*3´D·I±I³KÀ'Ñ4IÓ*J�˜‘˜YÑ'ØÐØ#'ˆG�C‰L˜Ñ ØÐØ%+ˆG�C‰L˜Ñ"ÙØ%)ˆG�C‰L˜Ñ"ÙØ'+ˆG�C‰L˜Ñ$ØÐØ—>‘>Ó#ð (ñ ð Cð Có	Cð ð
 (0ˆG�C‰L˜Ñ$à—‘Ó!ò 	ˆAØ×Ñ˜y¨"Ó-×4Ñ4Ø¤ a§h¡h°b hÓ&9×&?Ñ&?Ó&AÈGÔ TÐUõñ	r   c                 ó0   — | j                  ||d||d¬«      S )z1
        Deletes a cookie in a response.
        r   zThu, 01-Jan-1970 00:00:00 GMT)rK   r-   r.   r+   )rN   )rH   rI   rJ   r-   r.   s        r   Údelete_cookiezCookieMiddleware.delete_cookier   s,   € ð
 �~‰~ØØØØØØ3ð ó 
ð 	
r   )r,   NNú/NFFr2   )rQ   N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r'   ÚclassmethodrN   rP   © r   r   r   r      sW   „ ñò
òMð$ ð
 ØØØØØØØòAó ðAðF ò
ó ñ
r   r   c                   ó4   — e Zd ZdZdgZdgZd„ Zd„ Zd„ Zd„ Z	y)ÚInstanceSessionWrapperzf
    Populates the session in application instance scope, and wraps send to save
    the session.
    zhttp.response.startc                 óT  — t         j                  | _        t        t         j                  «      j
                  | _        t        |«      | _        d| j                  v rd| _	        || _        y d| j                  vrt        d«      ‚t        «       | j                  d<   d| _	        || _        y )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Ñ7ˆÔÜ*¬8×+BÑ+BÓC×PÑPˆÔä˜%“[ˆŒ
à˜Ÿ
™
Ñ"ð #ˆDŒNð ˆ�ð  §
¡
Ñ*Ü ð2óð ô
 %/£LˆD�J‰J�yÑ!Ø!ˆDŒNð ˆ�r   c              ƒ   ó¢   K  — | j                   d   j                  | j                  «      }| j                  |«      | j                   d   _        y ­w)Nr   r[   )r"   r   r]   r`   Ú_wrapped)r   Úsession_keys     r   Úresolve_sessionz&InstanceSessionWrapper.resolve_session¥   sA   è ø€ Ø—j‘j Ñ+×/Ñ/°×0@Ñ0@ÓAˆØ)-×);Ñ);¸KÓ)Hˆ�
‰
�9ÑÕ&ùs   ‚AAc              ƒ   ó@  K  — | j                   �rð| j                  d   j                  }| j                  d   j                  «       }|d   | j                  v �r¨|j                  dd«      dk7  �r’|st        j                  �r| j                  «       ƒ d{  –—†  |d   | j                  v �rU|rdt        j                  | j                  d   v �r3t        j                  |t        j                  t        j                  t        j                  ¬«       nï| j                  d   j                  «       rd}d}n?| j                  d   j!                  «       }t#        j"                  «       |z   }t%        |«      }t        j'                  || j(                  | j                  d   j*                  ||t        j                  t        j                  t        j,                  xs dt        j.                  xs dt        j0                  ¬	«
       | j3                  |«      ƒ d{  –—† S 7 �Œ…7 Œ­w)
zG
        Overridden send that also does session saves/cookies.
        r[   ÚtypeÚstatuséÈ   iô  Nr   )r-   r.   )rK   r+   r.   r-   r/   r0   r4   )ra   r"   ÚmodifiedÚis_emptyÚsave_message_typesr   r   ÚSESSION_SAVE_EVERY_REQUESTÚsave_sessionÚcookie_response_message_typesr\   r   rP   ÚSESSION_COOKIE_PATHÚSESSION_COOKIE_DOMAINÚget_expire_at_browser_closeÚget_expiry_ager@   r   rN   r]   re   ÚSESSION_COOKIE_SECUREÚSESSION_COOKIE_HTTPONLYÚSESSION_COOKIE_SAMESITErb   )r   rI   rk   ÚemptyrK   r+   Úexpires_times          r   r$   zInstanceSessionWrapper.send©   s¾  è ø€ ð
 �>‹>Ø—z‘z )Ñ,×5Ñ5ˆHØ—J‘J˜yÑ)×2Ñ2Ó4ˆEð
 ˜‘ 4×#:Ñ#:Ò:Ø—K‘K ¨#Ó.°#Ó5Ù¤×!DÓ!Dà×'Ñ'Ó)×)Ð)ð ˜6‘? d×&HÑ&HÒHÙä#×7Ñ7¸4¿:¹:ÀiÑ;PÒPÜ,×:Ñ:Ø 'Ü (× <Ñ <Ü%-×%AÑ%AÜ'/×'EÑ'Eð	 ;õ ð  Ÿ:™: iÑ0×LÑLÔNØ&*˜GØ&*™Gà&*§j¡j°Ñ&;×&JÑ&JÓ&L˜GÜ+/¯9©9«;¸Ñ+@˜LÜ&/°Ó&=˜Gä(×3Ñ3Ø#Ø ×,Ñ,Ø ŸJ™J yÑ1×=Ñ=Ø$+Ø$+Ü#+×#AÑ#AÜ!)×!=Ñ!=Ü#+×#AÑ#AÒ#IÀTÜ%-×%EÑ%EÒ%MÈÜ%-×%EÑ%Eð 4ô ð —^‘^ GÓ,×,Ð,ðI *ùðH -ús%   ‚BHÂHÂE?HÈHÈHÈHc              ƒ   ó  K  — 	 t         j                  dk\  r&| j                  d   j                  «       ƒ d{  –—†  y t	        | j                  d   j
                  «      «       ƒ d{  –—†  y7 Œ57 Œ# t        $ r t        d«      ‚w xY w­w)z,
        Saves the current session.
        )é   r)   r[   Nz‚The request's session was deleted before the request completed. The user may have logged out in a concurrent request, for example.)ÚdjangoÚVERSIONr"   Úasaver   Úsaver   r   )r   s    r   ro   z#InstanceSessionWrapper.save_sessionß   s~   è ø€ ð
	Ü�~‰~ Ò'Ø—j‘j Ñ+×1Ñ1Ó3×3Ñ3àHÔ,¨T¯Z©Z¸	Ñ-B×-GÑ-GÓHÓJ×JÑJð 4øàJùÜò 	Ü%ð<óð ð	üsH   ‚B	„3A1 ·A-¸A1 ¼B	½*A1 Á'A/Á(A1 Á,B	Á-A1 Á/A1 Á1BÂB	N)
rR   rS   rT   rU   rm   rp   r   rf   r$   ro   rW   r   r   rY   rY   �   s3   „ ñð 0Ð0Ðð &;Ð$;Ð!òò0Iò4-ólr   rY   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú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                 ó   — || _         y r   r   r   s     r   r   zSessionMiddleware.__init__ù   r   r   c              ƒ   ó¸   K  — t        ||«      }|j                  «       ƒ d{  –—†  | j                  |j                  ||j                  «      ƒ d{  –—† S 7 Œ37 Œ­w)z{
        Instantiate a session wrapper for this scope, resolve the session and
        call the inner application.
        N)rY   rf   r   r"   r$   )r   r"   r#   r$   Úwrappers        r   r'   zSessionMiddleware.__call__ü   sM   è ø€ ô
 )¨°Ó5ˆà×%Ñ%Ó'×'Ð'à—Z‘Z §¡¨w¸¿¹ÓE×EÐEð 	(øàEús!   ‚ A¢A£.AÁAÁAÁAN)rR   rS   rT   rU   r   r'   rW   r   r   r�   r�   ð   s   „ ñòó	Fr   r�   c                 ó*   — t        t        | «      «      S r   )r   r�   r   s    r   ÚSessionMiddlewareStackr†   	  s   € ÜÔ-¨eÓ4Ó5Ð5r   )r8   r@   Ú	importlibr   r|   Údjango.confr   Ú%django.contrib.sessions.backends.baser   Údjango.core.exceptionsr   Údjango.httpr   Údjango.http.cookier   Údjango.utilsr	   Údjango.utils.encodingr
   Údjango.utils.functionalr   Údjango.utils.httpr   Úchannels.dbr   r   rY   r�   r†   rW   r   r   ú<module>r’      sZ   ðÛ Û Ý #ã Ý  Ý =Ý 6Ý $Ý +Ý !Ý +Ý .Ý 'å .÷k
ñ k
÷\lñ l÷^Fñ Fó26r   