Ë
    ¹ûàg   ã                   ó‚   — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlmZmZ  G d„ de
«      Zy)é    N)Úsettings)ÚVALID_KEY_CHARSÚCreateErrorÚSessionBaseÚUpdateError)ÚInvalidSessionKey)ÚImproperlyConfiguredÚSuspiciousOperationc                   ó¬   ‡ — e Zd ZdZdˆ fd„	Zed„ «       Zdd„Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zdd„Zdd„Zd„ Zd„ Zdd„Zdd„Zed„ «       Zed„ «       Zˆ xZS )ÚSessionStorez/
    Implement a file based session store.
    c                 óx   •— | j                  «       | _        t        j                  | _        t
        ‰| �  |«       y ©N)Ú_get_storage_pathÚstorage_pathr   ÚSESSION_COOKIE_NAMEÚfile_prefixÚsuperÚ__init__)ÚselfÚsession_keyÚ	__class__s     €úc/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/contrib/sessions/backends/file.pyr   zSessionStore.__init__   s/   ø€ Ø ×2Ñ2Ó4ˆÔÜ#×7Ñ7ˆÔÜ‰Ñ˜Õ%ó    c                 óô   — 	 | j                   S # t        $ r` t        t        dd «      xs t	        j
                  «       }t        j                  j                  |«      st        d|z  «      ‚|| _         |cY S w xY w)NÚSESSION_FILE_PATHz•The session storage path %r doesn't exist. Please set your SESSION_FILE_PATH setting to an existing directory in which Django can store session data.)
Ú_storage_pathÚAttributeErrorÚgetattrr   ÚtempfileÚ
gettempdirÚosÚpathÚisdirr	   )Úclsr   s     r   r   zSessionStore._get_storage_path   s   € ð	 Ø×$Ñ$Ð$øÜò 	 äœÐ"5°tÓ<ÒUÄ×@SÑ@SÓ@Uð ô —7‘7—=‘= Ô.Ü*ð6à8DñEóð ð !-ˆCÔØÒð	 ús   ‚ ŽA&A7Á6A7c                 óæ   — |€| j                  «       }t        |«      j                  t        «      st	        d«      ‚t
        j                  j                  | j                  | j                  |z   «      S )z@
        Get the file associated with this session key.
        z!Invalid characters in session key)
Ú_get_or_create_session_keyÚsetÚissubsetr   r   r!   r"   Újoinr   r   ©r   r   s     r   Ú_key_to_filezSessionStore._key_to_file/   s_   € ð ÐØ×9Ñ9Ó;ˆKô
 �;Ó×(Ñ(¬Ô9Ü#Ð$GÓHÐHä�w‰w�|‰|˜D×-Ñ-¨t×/?Ñ/?À+Ñ/MÓNÐNr   c                 óö   — t        j                  | j                  «       «      j                  }t        j
                  rt        j                  j                  nd}t        j                  j                  ||¬«      S )zY
        Return the modification time of the file storing the session's content.
        N)Útz)
r!   Ústatr+   Úst_mtimer   ÚUSE_TZÚdatetimeÚtimezoneÚutcÚfromtimestamp)r   Úmodificationr-   s      r   Ú_last_modificationzSessionStore._last_modification>   sV   € ô —w‘w˜t×0Ñ0Ó2Ó3×<Ñ<ˆÜ&.§o¢oŒX×Ñ×"Ò"¸4ˆÜ× Ñ ×.Ñ.¨|ÀÐ.ÓCÐCr   c                 ó’   — |j                  d«      xs5 | j                  «       t        j                  | j	                  «       ¬«      z   S )zS
        Return the expiry time of the file storing the session's content.
        Ú_session_expiry)Úseconds)Úgetr6   r1   Ú	timedeltaÚget_session_cookie_age)r   Úsession_datas     r   Ú_expiry_datezSessionStore._expiry_dateF   sF   € ð ×ÑÐ 1Ó2ò 
Ø×#Ñ#Ó%Ü× Ñ ¨×)DÑ)DÓ)FÔGñHð	
r   c                 ó‚  — i }	 t        | j                  «       d¬«      5 }|j                  «       }d d d «       rZ	 | j                  |«      }| j                  | j                  |«      ¬«      }|dk  r"i }| j!                  «        | j                  «        |S # 1 sw Y   ŒgxY w# t        t
        f$ rp}t        |t
        «      rFt        j                  d|j                  j                  z  «      }|j                  t        |«      «       | j                  «        Y d }~ŒÐd }~ww xY w# t"        t
        f$ r d | _        Y |S w xY w)NÚascii)Úencodingzdjango.security.%s)Úexpiryr   )Úopenr+   ÚreadÚdecodeÚEOFErrorr
   Ú
isinstanceÚloggingÚ	getLoggerr   Ú__name__ÚwarningÚstrÚcreateÚget_expiry_ager>   ÚdeleteÚOSErrorÚ_session_key)r   r=   Úsession_fileÚ	file_dataÚeÚloggerÚ
expiry_ages          r   ÚloadzSessionStore.loadO   s'  € Øˆð	%Ü�d×'Ñ'Ó)°GÔ<ð 0ÀØ(×-Ñ-Ó/�	÷0ñ ð"Ø#'§;¡;¨yÓ#9�Lð "×0Ñ0¸×8IÑ8IÈ,Ó8WÐ0ÓX�
Ø ’?Ø#%�LØ—K‘K”MØ—K‘K”Mð Ð÷/0ð 0ûô !Ô"5Ð6ò "Ü! !Ô%8Ô9Ü!(×!2Ñ!2Ø0°1·;±;×3GÑ3GÑGó"˜ð Ÿ™¤s¨1£vÔ.Ø—K‘K—M‘Mûð"ûô Ô,Ð-ò 	%Ø $ˆDÕØÐð	%úsR   „D$ ŸB°
D$ »B" ÁAD$ ÂBÂD$ Â"D!Â1A&DÄD$ ÄD!Ä!D$ Ä$D>Ä=D>c              ƒ   ó*   K  — | j                  «       S ­wr   )rW   ©r   s    r   ÚaloadzSessionStore.aloadk   s   è ø€ Ø�y‰y‹{Ðùó   ‚c                 ó‚   — 	 | j                  «       | _        	 | j                  d¬«       d| _        y # t        $ r Y Œ<w xY w)NT©Úmust_create)Ú_get_new_session_keyrQ   Úsaver   ÚmodifiedrY   s    r   rM   zSessionStore.createn   sI   € ØØ $× 9Ñ 9Ó ;ˆDÔðØ—	‘	 d�	Ô+ð !ˆDŒMØøô ò Ùðús   ˜2 ²	>½>c              ƒ   ó*   K  — | j                  «       S ­wr   )rM   rY   s    r   ÚacreatezSessionStore.acreatex   s   è ø€ Ø�{‰{‹}Ðùr[   c                 óÊ  — | j                   €| j                  «       S | j                  |¬«      }| j                  «       }	 t        j
                  t        t        dd«      z  }|r$|t        j                  t        j                  z  z  }t	        j                  ||«      }t	        j                  |«       t        j                  j!                  |«      \  }}	 t#        j$                  ||dz   ¬«      \  }}	d}
	 	 t	        j&                  || j)                  |«      j)                  «       «       t	        j                  |«       t+        j,                  |	|«       d}
|
st	        j.                  |	«       y y # t        $ r |st        ‚Y ŒÐt        $ r |rt        ‚Y Œâw xY w# t	        j                  |«       w xY w# |
st	        j.                  |	«       w w xY w# t0        t2        f$ r Y y w xY w)N)Úno_loadÚO_BINARYr   Ú_out_)ÚdirÚprefixFT)r   rM   Ú_get_sessionr+   r!   ÚO_WRONLYr   ÚO_EXCLÚO_CREATrC   ÚcloseÚFileNotFoundErrorr   ÚFileExistsErrorr   r"   Úsplitr   ÚmkstempÚwriteÚencodeÚshutilÚmoveÚunlinkrF   rP   )r   r^   r=   Úsession_file_nameÚflagsÚfdrh   ri   Úoutput_file_fdÚoutput_file_nameÚrenameds              r   r`   zSessionStore.save{   s¬  € Ø×ÑÐ#Ø—;‘;“=Ð ð ×(Ñ(°Ð(Ó=ˆà ×-Ñ-Ó/Ðð	"ô —K‘K¤'¬"¨j¸!Ó"<Ñ<ˆEÙØœŸ™¤R§Z¡ZÑ/Ñ/�Ü—‘Ð*¨EÓ2ˆBÜ�H‰H�RŒLô. —g‘g—m‘mÐ$5Ó6‰ˆˆVð	Ü/7×/?Ñ/?Ø ¨Ñ 0ô0Ñ,ˆNÐ,ð ˆGð0ð-Ü—H‘H˜^¨T¯[©[¸Ó-F×-MÑ-MÓ-OÔPä—H‘H˜^Ô,ô
 —‘Ð,Ð.?Ô@Ø�áÜ—I‘IÐ.Õ/ð øôS !ò 	"ÙÜ!Ð!ñ äò 	"ÙÜ!Ð!ñ ð	"ûô< —H‘H˜^Õ,ûñ Ü—I‘IÐ.Õ/ð ûäœ'Ð"ò 	Ùð	úsU   Á A3E0 ÃG Ã73F Ä*-F3 ÅG Å0FÆFÆFÆF0Æ0F3 Æ3GÇG ÇG"Ç!G"c              ƒ   ó.   K  — | j                  |¬«      S ­w)Nr]   )r`   )r   r^   s     r   ÚasavezSessionStore.asaveº   s   è ø€ Ø�y‰y [ˆyÓ1Ð1ùó   ‚c                 ó^   — t         j                  j                  | j                  |«      «      S r   )r!   r"   Úexistsr+   r*   s     r   r‚   zSessionStore.exists½   s    € Ü�w‰w�~‰~˜d×/Ñ/°Ó<Ó=Ð=r   c              ƒ   ó,   K  — | j                  |«      S ­wr   )r‚   r*   s     r   ÚaexistszSessionStore.aexistsÀ   s   è ø€ Ø�{‰{˜;Ó'Ð'ùó   ‚c                 ó¢   — |€| j                   €y | j                   }	 t        j                  | j                  |«      «       y # t        $ r Y y w xY wr   )r   r!   rw   r+   rP   r*   s     r   rO   zSessionStore.deleteÃ   sP   € ØÐØ×ÑÐ'ØØ×*Ñ*ˆKð	Ü�I‰I�d×'Ñ'¨Ó4Õ5øÜò 	Ùð	ús   �$A Á	AÁAc              ƒ   ó.   K  — | j                  |¬«      S ­w)N)r   )rO   r*   s     r   ÚadeletezSessionStore.adeleteÍ   s   è ø€ Ø�{‰{ {ˆ{Ó3Ð3ùr€   c                 óþ   — | j                  «       }t        j                  }t        j                  |«      D ]E  }|j                  |«      sŒ|j                  |«      } | |«      }d„ |_        |j                  «        ŒG y )Nc                   ó   — y r   © r‹   r   r   ú<lambda>z,SessionStore.clear_expired.<locals>.<lambda>Ý   s   � r   )	r   r   r   r!   ÚlistdirÚ
startswithÚremoveprefixrM   rW   )r$   r   r   rR   r   Úsessions         r   Úclear_expiredzSessionStore.clear_expiredÐ   sp   € à×,Ñ,Ó.ˆÜ×2Ñ2ˆäŸJ™J |Ó4ò 		ˆLØ×*Ñ*¨;Ô7ØØ&×3Ñ3°KÓ@ˆKÙ˜+Ó&ˆGñ *ˆGŒNØ�L‰L�Nñ		r   c              ƒ   ó,   K  — | j                  «        y ­wr   )r‘   )r$   s    r   Úaclear_expiredzSessionStore.aclear_expiredà   s   è ø€ à×ÑÕùr…   r   )F)rJ   Ú
__module__Ú__qualname__Ú__doc__r   Úclassmethodr   r+   r6   r>   rW   rZ   rM   rc   r`   r   r‚   r„   rO   rˆ   r‘   r“   Ú__classcell__)r   s   @r   r   r      s�   ø„ ñõ&ð
 ñ ó ð ó$OòDò
òò8òòó=ó~2ò>ò(óó4ð ñó ðð ñó ôr   r   )r1   rH   r!   ru   r   Údjango.confr   Ú%django.contrib.sessions.backends.baser   r   r   r   Ú"django.contrib.sessions.exceptionsr   Údjango.core.exceptionsr	   r
   r   r‹   r   r   ú<module>r�      s8   ðÛ Û Û 	Û Û å  ÷ó õ Aß LôP�;õ Pr   