§
    C—¶fD5  ã                   óŠ  — d Z ddlZddlmZ ddlmZ 	 ddlZn# e$ r ddlZY nw xY wddlm	Z	m
Z
 ddlmZ  G d„ dee
¦  «        Z G d	„ d
e¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de	¦  «        Z G d„ de	¦  «        Z G d„ de	¦  «        Z G d„ de	¦  «        Z G d„ de	¦  «        ZdS )zÊ
    flaskext.session.sessions
    ~~~~~~~~~~~~~~~~~~~~~~~~~

    Server-side Sessions and SessionInterfaces.

    :copyright: (c) 2014 by Shipeng Feng.
    :license: BSD, see LICENSE for more details.
é    N)Údatetime)Úuuid4)ÚSessionInterfaceÚSessionMixin)ÚCallbackDictc                   ó   — e Zd ZdZdd„ZdS )ÚServerSideSessionz)Baseclass for server-side based sessions.Nc                 ób   — d„ }t          j        | ||¦  «         || _        d| _        d| _        d S )Nc                 ó   — d| _         d S )NT)Úmodified©Úselfs    úK/var/www/piapp/venv/lib/python3.11/site-packages/flask_sessions/sessions.pyÚ	on_updatez-ServerSideSession.__init__.<locals>.on_update   s   € Ø ˆDŒMˆMˆMó    TF)r   Ú__init__ÚsidÚ	permanentr   )r   Úinitialr   r   s       r   r   zServerSideSession.__init__   s?   € ð	!ð 	!ð 	!åÔ˜d G¨YÑ7Ô7Ð7ØˆŒØˆŒØˆŒˆˆr   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   © r   r   r	   r	      s.   € € € € € Ø3Ð3ðð ð ð ð ð r   r	   c                   ó   — e Zd ZdS )ÚRedisSessionN©r   r   r   r   r   r   r   r   #   ó   € € € € € Ø€Dr   r   c                   ó   — e Zd ZdS )ÚMemcachedSessionNr   r   r   r   r    r    '   r   r   r    c                   ó   — e Zd ZdS )ÚFileSystemSessionNr   r   r   r   r"   r"   +   r   r   r"   c                   ó   — e Zd ZdS )ÚMongoDBSessionNr   r   r   r   r$   r$   /   r   r   r$   c                   ó   — e Zd ZdZd„ ZdS )ÚNullSessionInterfacezAUsed to open a :class:`flask.sessions.NullSession` instance.
    c                 ó   — d S ©Nr   )r   ÚappÚrequests      r   Úopen_sessionz!NullSessionInterface.open_session7   s   € Øˆtr   N)r   r   r   r   r+   r   r   r   r&   r&   3   s-   € € € € € ðð ðð ð ð ð r   r&   c                   ó2   — e Zd ZdZeZeZd„ Zd„ Z	d„ Z
d„ ZdS )ÚRedisSessionInterfacez¯Uses the Redis key-value store as a session backend.

    :param redis: A ``redis.Redis`` instance.
    :param key_prefix: A prefix that is added to all Redis store keys.
    c                 óx   — ddl m} |€ |¦   «         | _         n|                     |¦  «        | _         || _        d S )Nr   )ÚRedis)Úredisr/   Úfrom_urlÚ
key_prefix)r   Úurlr2   r/   s       r   r   zRedisSessionInterface.__init__E   sF   € ØÐÐÐÐÐØˆ;Ø˜™œˆDŒJˆJàŸš¨Ñ,Ô,ˆDŒJØ$ˆŒˆˆr   c                 ó8   — t          t          ¦   «         ¦  «        S r(   ©Ústrr   r   s    r   Ú_generate_sidz#RedisSessionInterface._generate_sidM   ó   € Ý•5‘7”7‰|Œ|Ðr   c                 óª  — |j                              |j        ¦  «        }|s*|                      ¦   «         }|                      |¬¦  «        S | j                             | j        |z   ¦  «        }|�O	 | j                             |¦  «        }|                      ||¬¦  «        S #  |                      |¬¦  «        cY S xY w|                      |¬¦  «        S ©N©r   )	ÚcookiesÚgetÚsession_cookie_namer7   Úsession_classr0   r2   Ú
serializerÚloads)r   r)   r*   r   ÚvalÚdatas         r   r+   z"RedisSessionInterface.open_sessionP   sÙ   € ØŒo×!Ò! #Ô"9Ñ:Ô:ˆØð 	/Ø×$Ò$Ñ&Ô&ˆCØ×%Ò%¨#Ð%Ñ.Ô.Ð.ØŒj�nŠn˜Tœ_¨sÑ2Ñ3Ô3ˆØˆ?ð3Ø”×,Ò,¨SÑ1Ô1�Ø×)Ò)¨$°CÐ)Ñ8Ô8Ð8øð3Ø×)Ò)¨cÐ)Ñ2Ô2Ð2Ð2Ð2øøøØ×!Ò! cÐ!Ñ*Ô*Ð*s   Á10B" Â"B<c           	      ó¾  — |                       |¦  «        }|                      |¦  «        }|sM|j        rD| j                             | j        |j        z   ¦  «         |                     |j        ||¬¦  «         d S |  	                    |¦  «        }|  
                    |¦  «        }|                      ||¦  «        }| j                             t          |¦  «        ¦  «        }	| j                             | j        |j        z   |	t!          |j                             ¦   «         ¦  «        ¦  «         |j        r(|                     |j        |j        |||||¬¦  «         d S d S ©N©ÚdomainÚpath©ÚexpiresÚhttponlyrG   rH   Úsecure)Úget_cookie_domainÚget_cookie_pathr   r0   Údeleter2   r   Údelete_cookier>   Úget_cookie_httponlyÚget_cookie_secureÚget_expiration_timer@   ÚdumpsÚdictÚsetexÚintÚpermanent_session_lifetimeÚtotal_secondsÚ
set_cookie)
r   r)   ÚsessionÚresponserG   rH   rK   rL   rJ   rB   s
             r   Úsave_sessionz"RedisSessionInterface.save_session^   s  € Ø×'Ò'¨Ñ,Ô,ˆØ×#Ò# CÑ(Ô(ˆØð 	ØÔð AØ”
×!Ò! $¤/°G´KÑ"?Ñ@Ô@Ð@Ø×&Ò& sÔ'>Ø.4¸4ð 'ñ Aô Að AàˆFð ×+Ò+¨CÑ0Ô0ˆØ×'Ò'¨Ñ,Ô,ˆØ×*Ò*¨3°Ñ8Ô8ˆØŒo×#Ò#¥D¨¡M¤MÑ2Ô2ˆØŒ
×Ò˜œ¨7¬;Ñ6¸Ý˜SÔ;×IÒIÑKÔKÑLÔLñ	Nô 	Nð 	NàÔð 	EØ×Ò Ô 7¸¼Ø$+°hØ#)°¸Vð  ñ Eô Eð Eð Eð Eð	Eð 	Er   N)r   r   r   r   Úpickler@   r   r?   r   r7   r+   r]   r   r   r   r-   r-   ;   sk   € € € € € ðð ð €JØ €Mð%ð %ð %ðð ð ð+ð +ð +ðEð Eð Eð Eð Er   r-   c                   ó>   — e Zd ZdZeZeZd„ Zd„ Z	d„ Z
d„ Zd„ Zd„ ZdS )	ÚMemcachedSessionInterfacez·A Session interface that uses memcached as backend.

    :param client: A ``memcache.Client`` instance.
    :param key_prefix: A prefix that is added to all Memcached store keys.
    c                 óp   — |€%|                       ¦   «         }|€t          d¦  «        ‚|| _        || _        d S )Nzno memcache module found)Ú_get_preferred_memcache_clientÚRuntimeErrorÚclientr2   )r   rd   r2   s      r   r   z"MemcachedSessionInterface.__init__ˆ   s>   € Øˆ>Ø×8Ò8Ñ:Ô:ˆFØˆ~Ý"Ð#=Ñ>Ô>Ð>ØˆŒØ$ˆŒˆˆr   c                 ó8   — t          t          ¦   «         ¦  «        S r(   r5   r   s    r   r7   z'MemcachedSessionInterface._generate_sid�   r8   r   c                 ó²   — dg}	 dd l }|                     |¦  «        S # t          $ r Y nw xY w	 dd l}|                     |¦  «        S # t          $ r Y d S w xY w)Nz127.0.0.1:11211r   )ÚpylibmcÚClientÚImportErrorÚmemcache)r   Úserversrg   rj   s       r   rb   z8MemcachedSessionInterface._get_preferred_memcache_client“   s”   € Ø$Ð%ˆð	+ØˆNˆNˆNð —>’> 'Ñ*Ô*Ð*øõ ð 	ð 	ð 	ØˆDð	øøøð
	,ØˆOˆOˆOð —?’? 7Ñ+Ô+Ð+øõ ð 	ð 	ð 	ØˆDˆDð	øøøs   … ž
+ª+¯A Á
AÁAc                 óX   — |dk    r#|t          t          j        ¦   «         ¦  «        z  }|S )z–
        Memcached deals with long (> 30 days) timeouts in a special
        way. Call this function to obtain a safe value for your timeout.
        i �' )rW   Útime)r   Útimeouts     r   Ú_get_memcache_timeoutz/MemcachedSessionInterface._get_memcache_timeout£   s.   € ð
 �WÒÐð •s�4œ9™;œ;Ñ'Ô'Ñ'ˆGØˆr   c                 ó  — |j                              |j        ¦  «        }|s*|                      ¦   «         }|                      |¬¦  «        S | j        |z   }t          |t          ¦  «        r|                     d¦  «        }| j	                             |¦  «        }|�O	 | j
                             |¦  «        }|                      ||¬¦  «        S #  |                      |¬¦  «        cY S xY w|                      |¬¦  «        S )Nr;   úutf-8)r<   r=   r>   r7   r?   r2   Ú
isinstanceÚunicodeÚencoderd   r@   rA   )r   r)   r*   r   Úfull_session_keyrB   rC   s          r   r+   z&MemcachedSessionInterface.open_session²   s  € ØŒo×!Ò! #Ô"9Ñ:Ô:ˆØð 	/Ø×$Ò$Ñ&Ô&ˆCØ×%Ò%¨#Ð%Ñ.Ô.Ð.Øœ?¨SÑ0ÐÝÐ&­Ñ0Ô0ð 	@Ø/×6Ò6°wÑ?Ô?ÐØŒk�oŠoÐ.Ñ/Ô/ˆØˆ?ð3Ø”×,Ò,¨SÑ1Ô1�Ø×)Ò)¨$°CÐ)Ñ8Ô8Ð8øð3Ø×)Ò)¨cÐ)Ñ2Ô2Ð2Ð2Ð2øøøØ×!Ò! cÐ!Ñ*Ô*Ð*s   Â0C ÃC(c           
      ó"  — |                       |¦  «        }|                      |¦  «        }| j        |j        z   }t	          |t
          ¦  «        r|                     d¦  «        }|s@|j        r7| j         	                    |¦  «         | 
                    |j        ||¬¦  «         d S |                      |¦  «        }|                      |¦  «        }|                      ||¦  «        }	| j                             t#          |¦  «        ¦  «        }
| j                             ||
|                      t)          |j                             ¦   «         ¦  «        ¦  «        ¦  «         |j        r(|                     |j        |j        |	||||¬¦  «         d S d S )Nrq   rF   rI   )rM   rN   r2   r   rr   rs   rt   r   rd   rO   rP   r>   rQ   rR   rS   r@   rT   rU   Úsetro   rW   rX   rY   rZ   )r   r)   r[   r\   rG   rH   ru   rK   rL   rJ   rB   s              r   r]   z&MemcachedSessionInterface.save_sessionÃ   s¸  € Ø×'Ò'¨Ñ,Ô,ˆØ×#Ò# CÑ(Ô(ˆØœ?¨W¬[Ñ8ÐÝÐ&­Ñ0Ô0ð 	@Ø/×6Ò6°wÑ?Ô?ÐØð 	ØÔð AØ”×"Ò"Ð#3Ñ4Ô4Ð4Ø×&Ò& sÔ'>Ø.4¸4ð 'ñ Aô Að AàˆFð ×+Ò+¨CÑ0Ô0ˆØ×'Ò'¨Ñ,Ô,ˆØ×*Ò*¨3°Ñ8Ô8ˆØŒo×#Ò#¥D¨¡M¤MÑ2Ô2ˆØŒ�ŠÐ(¨#¨t×/IÒ/IÝ˜CÔ:×HÒHÑJÔJÑKÔKñ0Mô 0Mñ 	Nô 	Nð 	NàÔð 	EØ×Ò Ô 7¸¼Ø$+°hØ#)°¸Vð  ñ Eô Eð Eð Eð Eð	Eð 	Er   N)r   r   r   r   r^   r@   r    r?   r   r7   rb   ro   r+   r]   r   r   r   r`   r`   ~   s‰   € € € € € ðð ð €JØ$€Mð%ð %ð %ðð ð ð,ð ,ð ,ð ð ð ð+ð +ð +ð" Eð  Eð  Eð  Eð  Er   r`   c                   ó.   — e Zd ZdZeZd„ Zd„ Zd„ Zd„ Z	dS )ÚFileSystemSessionInterfacea®  Uses the :class:`werkzeug.contrib.cache.FileSystemCache` as a session
    backend.

    :param cache_dir: the directory where session files are stored.
    :param threshold: the maximum number of items the session stores before it
                      starts deleting some.
    :param mode: the file mode wanted for the session files, default 0600
    :param key_prefix: A prefix that is added to FileSystemCache store keys.
    c                 óF   — ddl m}  ||||¬¦  «        | _        || _        d S )Nr   )ÚFileSystemCache)Ú	thresholdÚmode)Úwerkzeug.contrib.cacher{   Úcacher2   )r   Ú	cache_dirr|   r}   r2   r{   s         r   r   z#FileSystemSessionInterface.__init__ó   s7   € Ø:Ð:Ð:Ð:Ð:Ð:Ø$�_ Y¸)È$ÐOÑOÔOˆŒ
Ø$ˆŒˆˆr   c                 ó8   — t          t          ¦   «         ¦  «        S r(   r5   r   s    r   r7   z(FileSystemSessionInterface._generate_sidø   r8   r   c                 ó:  — |j                              |j        ¦  «        }|s*|                      ¦   «         }|                      |¬¦  «        S | j                             | j        |z   ¦  «        }|�|                      ||¬¦  «        S |                      |¬¦  «        S r:   )r<   r=   r>   r7   r?   r   r2   )r   r)   r*   r   rC   s        r   r+   z'FileSystemSessionInterface.open_sessionû   sš   € ØŒo×!Ò! #Ô"9Ñ:Ô:ˆØð 	/Ø×$Ò$Ñ&Ô&ˆCØ×%Ò%¨#Ð%Ñ.Ô.Ð.ØŒz�~Š~˜dœo°Ñ3Ñ4Ô4ˆØÐØ×%Ò% d°Ð%Ñ4Ô4Ð4Ø×!Ò! cÐ!Ñ*Ô*Ð*r   c           	      óŽ  — |                       |¦  «        }|                      |¦  «        }|sM|j        rD| j                             | j        |j        z   ¦  «         |                     |j        ||¬¦  «         d S |  	                    |¦  «        }|  
                    |¦  «        }|                      ||¦  «        }t          |¦  «        }	| j                             | j        |j        z   |	t          |j                             ¦   «         ¦  «        ¦  «         |j        r(|                     |j        |j        |||||¬¦  «         d S d S rE   )rM   rN   r   r   rO   r2   r   rP   r>   rQ   rR   rS   rU   rw   rW   rX   rY   rZ   )
r   r)   r[   r\   rG   rH   rK   rL   rJ   rC   s
             r   r]   z'FileSystemSessionInterface.save_session  sm  € Ø×'Ò'¨Ñ,Ô,ˆØ×#Ò# CÑ(Ô(ˆØð 	ØÔð AØ”
×!Ò! $¤/°G´KÑ"?Ñ@Ô@Ð@Ø×&Ò& sÔ'>Ø.4¸4ð 'ñ Aô Að AàˆFð ×+Ò+¨CÑ0Ô0ˆØ×'Ò'¨Ñ,Ô,ˆØ×*Ò*¨3°Ñ8Ô8ˆÝ�G‰}Œ}ˆØŒ
�Š�t”¨¬Ñ4°dÝ˜SÔ;×IÒIÑKÔKÑLÔLñ	Nô 	Nð 	NàÔð 	EØ×Ò Ô 7¸¼Ø$+°hØ#)°¸Vð  ñ Eô Eð Eð Eð Eð	Eð 	Er   N)
r   r   r   r   r"   r?   r   r7   r+   r]   r   r   r   ry   ry   æ   sf   € € € € € ðð ð &€Mð%ð %ð %ð
ð ð ð+ð +ð +ðEð Eð Eð Eð Er   ry   c                   ó2   — e Zd ZdZeZeZd„ Zd„ Z	d„ Z
d„ ZdS )ÚMongoDBSessionInterfacea  A Session interface that uses mongodb as backend.

    :param client: A ``pymongo.MongoClient`` instance.
    :param db: The database you want to use.
    :param collection: The collection you want to use.
    :param key_prefix: A prefix that is added to all MongoDB store keys.
    c                 ól   — |€ddl m}  |¦   «         }|| _        ||         |         | _        || _        d S )Nr   )ÚMongoClient)Úpymongor‡   rd   Ústorer2   )r   rd   ÚdbÚ
collectionr2   r‡   s         r   r   z MongoDBSessionInterface.__init__1  sF   € Øˆ>Ø+Ð+Ð+Ð+Ð+Ð+Ø �[‘]”]ˆFØˆŒØ˜B”Z 
Ô+ˆŒ
Ø$ˆŒˆˆr   c                 ó8   — t          t          ¦   «         ¦  «        S r(   r5   r   s    r   r7   z%MongoDBSessionInterface._generate_sid9  r8   r   c                 ó8  — |j                              |j        ¦  «        }|s*|                      ¦   «         }|                      |¬¦  «        S | j                             d| j        |z   i¦  «        }|r,|                     d¦  «        t          j	        ¦   «         k    r|nd }|�d	 |d         }| j
                             t          |¦  «        ¦  «        }|                      ||¬¦  «        S #  |                      |¬¦  «        cY S xY w|                      |¬¦  «        S )Nr;   ÚidÚ
expirationrB   )r<   r=   r>   r7   r?   r‰   Úfind_oner2   r   Úutcnowr@   rA   r6   )r   r)   r*   r   ÚdocumentrB   rC   s          r   r+   z$MongoDBSessionInterface.open_session<  s'  € ØŒo×!Ò! #Ô"9Ñ:Ô:ˆØð 	/Ø×$Ò$Ñ&Ô&ˆCØ×%Ò%¨#Ð%Ñ.Ô.Ð.Ø”:×&Ò&¨¨d¬oÀÑ.CÐ'DÑEÔEˆØ'ð NØ—\’\ ,Ñ/Ô/µ(´/Ñ2CÔ2CÒCÐCð �8ØIMð 	àÐð3Ø˜u”o�Ø”×,Ò,­S°©X¬XÑ6Ô6�Ø×)Ò)¨$°CÐ)Ñ8Ô8Ð8øð3Ø×)Ò)¨cÐ)Ñ2Ô2Ð2Ð2Ð2øøøØ×!Ò! cÐ!Ñ*Ô*Ð*s   Â#AC) Ã)Dc           	      óp  — |                       |¦  «        }|                      |¦  «        }| j        |j        z   }|sB|j        r9| j                             d|i¦  «         |                     |j        ||¬¦  «         d S |  	                    |¦  «        }|  
                    |¦  «        }|                      ||¦  «        }	| j                             t          |¦  «        ¦  «        }
| j                             d|i||
|	dœd¦  «         |j        r(|                     |j        |j        |	||||¬¦  «         d S d S )NrŽ   rF   )rŽ   rB   r�   TrI   )rM   rN   r2   r   r   r‰   rO   rP   r>   rQ   rR   rS   r@   rT   rU   ÚupdaterZ   )r   r)   r[   r\   rG   rH   Ústore_idrK   rL   rJ   rB   s              r   r]   z$MongoDBSessionInterface.save_sessionM  s~  € Ø×'Ò'¨Ñ,Ô,ˆØ×#Ò# CÑ(Ô(ˆØ”? W¤[Ñ0ˆØð 	ØÔð AØ”
×!Ò! 4¨Ð"2Ñ3Ô3Ð3Ø×&Ò& sÔ'>Ø.4¸4ð 'ñ Aô Að AàˆFð ×+Ò+¨CÑ0Ô0ˆØ×'Ò'¨Ñ,Ô,ˆØ×*Ò*¨3°Ñ8Ô8ˆØŒo×#Ò#¥D¨¡M¤MÑ2Ô2ˆØŒ
×Ò˜4 Ð*Ø!)Ø"%Ø)0ð2ð 2à37ñ	9ô 	9ð 	9ð Ôð 	EØ×Ò Ô 7¸¼Ø$+°hØ#)°¸Vð  ñ Eô Eð Eð Eð Eð	Eð 	Er   N)r   r   r   r   r^   r@   r$   r?   r   r7   r+   r]   r   r   r   r…   r…   %  sk   € € € € € ðð ð €JØ"€Mð%ð %ð %ðð ð ð+ð +ð +ð" Eð  Eð  Eð  Eð  Er   r…   )r   rm   r   Úuuidr   ÚcPickler^   ri   Úflask.sessionsr   r   Úwerkzeug.datastructuresr   r	   r   r    r"   r$   r&   r-   r`   ry   r…   r   r   r   ú<module>rš      sž  ððð ð €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðØÐÐÐÐøØð ð ð Ø€M€M€M€M€Mðøøøð :Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ð	ð 	ð 	ð 	ð 	˜ lñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð$ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð(ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð)ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð&ñ 	ô 	ð 	ðð ð ð ð Ð+ñ ô ð ð@Eð @Eð @Eð @Eð @EÐ,ñ @Eô @Eð @EðFeEð eEð eEð eEð eEÐ 0ñ eEô eEð eEðP<Eð <Eð <Eð <Eð <EÐ!1ñ <Eô <Eð <Eð~HEð HEð HEð HEð HEÐ.ñ HEô HEð HEð HEð HEs   ” ™	%¤%