a
    5XhJ                     @   s|   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 de
ZdS )    N)settings)VALID_KEY_CHARSCreateErrorSessionBaseUpdateError)InvalidSessionKey)ImproperlyConfiguredSuspiciousOperationc                       s   e Zd ZdZd fdd	Zedd ZdddZd	d
 Zdd Z	dd Z
dd ZdddZdd ZdddZdd Zedd Z  ZS ) SessionStorez/
    Implement a file based session store.
    Nc                    s"   |   | _tj| _t | d S N)_get_storage_pathstorage_pathr   SESSION_COOKIE_NAMEfile_prefixsuper__init__selfsession_key	__class__ j/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/django/contrib/sessions/backends/file.pyr      s    
zSessionStore.__init__c                 C   sV   z| j W S  tyP   ttdd p(t }tj|sBt	d| || _ | Y S 0 d S )NZSESSION_FILE_PATHzThe 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.)
Z_storage_pathAttributeErrorgetattrr   tempfile
gettempdirospathisdirr   )clsr   r   r   r   r      s    zSessionStore._get_storage_pathc                 C   s<   |du r|   }t|ts&tdtj| j| j	| S )z@
        Get the file associated with this session key.
        Nz!Invalid characters in session key)
Z_get_or_create_session_keysetissubsetr   r   r   r   joinr   r   r   r   r   r   _key_to_file/   s
    zSessionStore._key_to_filec                 C   s2   t |  j}tjrtjjnd}tjj	||dS )zY
        Return the modification time of the file storing the session's content.
        N)tz)
r   statr$   st_mtimer   ZUSE_TZdatetimetimezoneutcfromtimestamp)r   Zmodificationr%   r   r   r   _last_modification>   s    zSessionStore._last_modificationc                 C   s"   | dp |  tj|  d S )zS
        Return the expiry time of the file storing the session's content.
        Z_session_expiry)seconds)getr,   r(   	timedeltaZget_session_cookie_age)r   session_datar   r   r   _expiry_dateF   s
    
zSessionStore._expiry_datec              
   C   s   i }zt |  dd}| }W d    n1 s40    Y  |rz| |}W nZ ttfy } z>t|trtd|j	j
 }|t| |   W Y d }~n
d }~0 0 | j| |d}|dkri }|   |   W n ttfy   d | _Y n0 |S )Nascii)encodingzdjango.security.%s)Zexpiryr   )openr$   readdecodeEOFErrorr	   
isinstancelogging	getLoggerr   __name__warningstrcreateZget_expiry_ager1   deleteOSError_session_key)r   r0   session_fileZ	file_dataeloggerZ
expiry_ager   r   r   loadO   s,    &

zSessionStore.loadc                 C   s<   |   | _z| jdd W n ty0   Y q Y n0 d| _d S )NT)must_create)Z_get_new_session_keyrA   saver   modifiedr   r   r   r   r>   k   s    

zSessionStore.createFc              	   C   sP  | j d u r|  S | j|d}|  }z@tjttddB }|rN|tjtjB O }t	||}t
| W n2 ty   |s|tY n ty   |rtY n0 tj|\}}ztj||d d\}}	d}
zVz$t|| |  W t
| nt
| 0 t|	| d}
W |
s0t|	 n|
s.t|	 0 W n ttfyJ   Y n0 d S )N)Zno_loadO_BINARYr   Z_out_)dirprefixFT)r   r>   Z_get_sessionr$   r   O_WRONLYr   O_EXCLO_CREATr4   closeFileNotFoundErrorr   FileExistsErrorr   r   splitr   mkstempwriteencodeshutilmoveunlinkr7   r@   )r   rF   r0   Zsession_file_nameflagsfdrK   rL   Zoutput_file_fdZoutput_file_nameZrenamedr   r   r   rG   u   sD    


zSessionStore.savec                 C   s   t j| |S r   )r   r   existsr$   r   r   r   r   r\      s    zSessionStore.existsc                 C   sH   |d u r| j d u rd S | j }zt| | W n tyB   Y n0 d S r   )r   r   rY   r$   r@   r   r   r   r   r?      s    
zSessionStore.deletec                 C   s   d S r   r   rI   r   r   r   clean   s    zSessionStore.cleanc                 C   sX   |   }tj}t|D ]:}||s(q|t|d  }| |}dd |_|  qd S )Nc                   S   s   d S r   r   r   r   r   r   <lambda>       z,SessionStore.clear_expired.<locals>.<lambda>)	r   r   r   r   listdir
startswithlenr>   rE   )r    r   r   rB   r   sessionr   r   r   clear_expired   s    

zSessionStore.clear_expired)N)N)F)N)r;   
__module____qualname____doc__r   classmethodr   r$   r,   r1   rE   r>   rG   r\   r?   r]   rd   __classcell__r   r   r   r   r
      s   

	

?

r
   )r(   r9   r   rW   r   Zdjango.confr   Z%django.contrib.sessions.backends.baser   r   r   r   Z"django.contrib.sessions.exceptionsr   Zdjango.core.exceptionsr   r	   r
   r   r   r   r   <module>   s   