
     h                         d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ  G d dej                  Z G d	 d
ej                  Z G d d          Z G d de          ZdS )    N)settings)BaseStorageMessage)signing)SimpleCookie)SafeData	mark_safec                   &     e Zd ZdZdZ fdZ xZS )MessageEncoderzI
    Compactly serialize instances of the ``Message`` class as JSON.
    __json_messagec                    t          |t                    rVt          |j        t                    rdnd}| j        ||j        |j        g}|j        |                    |j                   |S t                      	                    |          S )N   r   )

isinstancer   messager   message_keylevel
extra_tagsappendsuperdefault)selfobjis_safedatar   	__class__s       e/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/django/contrib/messages/storage/cookie.pyr   zMessageEncoder.default   s{    c7## 	)#+x@@G!!aK'ciMG~)s~...Nwws###    )__name__
__module____qualname____doc__r   r   __classcell__r   s   @r   r   r      sI          #K$ $ $ $ $ $ $ $ $r   r   c                   (     e Zd ZdZd Z fdZ xZS )MessageDecoderzE
    Decode JSON that includes serialized ``Message`` instances.
    c                 J    t          |t                    rW|rU|d         t          j        k    r1|d         rt	          |d                   |d<   t          |dd           S  fd|D             S t          |t                    r  fd|                                D             S |S )Nr   r         c                 :    g | ]}                     |          S  process_messages).0itemr   s     r   
<listcomp>z3MessageDecoder.process_messages.<locals>.<listcomp>(   s'    @@@DD))$//@@@r   c                 B    i | ]\  }}|                     |          S r)   r*   )r,   keyvaluer   s      r   
<dictcomp>z3MessageDecoder.process_messages.<locals>.<dictcomp>*   s-    TTT*#uC..u55TTTr   )r   listr   r   r	   r   dictitemsr   r   s   ` r   r+   zMessageDecoder.process_messages"   s    c4   	AS 	A1v333q6 /&s1v..CFABB((@@@@C@@@@c4   	UTTTT		TTTT
r   c                 b     t                      j        |fi |}|                     |          S )N)r   decoder+   )r   skwargsdecodedr   s       r   r8   zMessageDecoder.decode-   s4     %''.--f--$$W---r   )r   r   r   r    r+   r8   r!   r"   s   @r   r$   r$      sQ         	 	 	. . . . . . . . .r   r$   c                       e Zd Zd Zd ZdS )MessageSerializerc                 `    t          j        |dt                                        d          S )N),:)
separatorsclslatin-1)jsondumpsr   encoder6   s     r   rE   zMessageSerializer.dumps3   s3    z!
 
 
 &

		r   c                 ^    t          j        |                    d          t                    S )NrC   )rB   )rD   loadsr8   r$   r   datas     r   rH   zMessageSerializer.loads:   s#    z$++i00nEEEEr   N)r   r   r   rE   rH   r)   r   r   r=   r=   2   s7          F F F F Fr   r=   c                   T     e Zd ZdZdZdZdZdZ fdZd Z	d Z
dd
ZddZd Z xZS )CookieStoragez%
    Store messages in a cookie.
    messagesi   __messagesnotfinished__zdjango.contrib.messagesc                 x     t                      j        |i | t          j        | j                  | _        d S )N)salt)r   __init__r   get_cookie_signerkey_saltsigner)r   argsr:   r   s      r   rQ   zCookieStorage.__init__K   s:    $)&)))/T]CCCr   c                     | j         j                            | j                  }|                     |          }|o|d         | j        k     }|r|s|                                 ||fS )a
  
        Retrieve a list of messages from the messages cookie. If the
        not_finished sentinel value is found at the end of the message list,
        remove it and return a result indicating that not all messages were
        retrieved by this storage.
        )requestCOOKIESgetcookie_name_decodenot_finishedpop)r   rU   r:   rJ   rM   all_retrieveds         r   _getzCookieStorage._getO   sp     |#''(899<<%%%K(2,$:K*KL 	M 	LLNNN&&r   c                    |rN|                     | j        |t          j        t          j        pdt          j        pdt          j                   dS |                    | j        t          j        t          j                   dS )zz
        Either set the cookie with the encoded data if there is any data to
        store, or delete the cookie.
        N)domainsecurehttponlysamesite)rb   re   )
set_cookier[   r   SESSION_COOKIE_DOMAINSESSION_COOKIE_SECURESESSION_COOKIE_HTTPONLYSESSION_COOKIE_SAMESITEdelete_cookie)r   encoded_dataresponses      r   _update_cookiezCookieStorage._update_cookie^   s    
  	 55=!9AT!9        "" 5!9 #     r   Tc                   	 g }|                      |          }| j        rt                      		fd}|r ||          | j        k    r|r)|                    |                    d                     n(|                    d|                                           |                      || j        gz   |          }|r ||          | j        k    |                     ||           |S )aT  
        Store the messages to a cookie and return a list of any messages which
        could not be stored.

        If the encoded data is larger than ``max_cookie_size``, remove
        messages until the data fits (these are the messages which are
        returned), and add the not_finished sentinel value to indicate as much.
        c                 T    t                              |           d                   S )Nr   )lenvalue_encode)valcookies    r   stored_lengthz+CookieStorage._store.<locals>.stored_length   s$    6..s33A6777r   r   )encode_empty)_encodemax_cookie_sizer   r   r^   insertr]   rn   )
r   rM   rm   remove_oldestrU   r:   unstored_messagesrl   ru   rt   s
            @r   _storezCookieStorage._stores   s    ||H-- 	 "^^F8 8 8 8 8  ==#>#>AU#U#U  @%,,X\\!__====%,,Q???#|| 122AR  ,      ==#>#>AU#U#U 	L(333  r   Fc                 R    |s|r"| j                             |t          d          S dS )a  
        Return an encoded version of the messages list which can be stored as
        plain text.

        Since the data will be retrieved from the client-side, the encoded data
        also contains a hash to ensure that the data was not tampered with.
        T)
serializercompressN)rT   sign_objectr=   )r   rM   rv   s      r   rw   zCookieStorage._encode   sD      	| 	;**%6 +   	 	r   c                     |sdS 	 | j                             |t                    S # t          j        t
          j        t          j        f$ r Y nw xY wd| _	        dS )z
        Safely decode an encoded text stream back into a list of messages.

        If the encoded text stream contained an invalid hash or was in an
        invalid format, return None.
        N)r~   T)
rT   unsign_objectr=   r   BadSignaturebinasciiErrorrD   JSONDecodeErrorusedrI   s     r   r\   zCookieStorage._decode   so      	4	;,,T>O,PPP$hnd6JK 	 	 	D	 	ts    ' &AA)T)F)r   r   r   r    r[   rx   r]   rS   rQ   r`   rn   r|   rw   r\   r!   r"   s   @r   rL   rL   >   s          K O,L(HD D D D D' ' '  *! ! ! !<         r   rL   )r   rD   django.confr   $django.contrib.messages.storage.baser   r   django.corer   django.httpr   django.utils.safestringr   r	   JSONEncoderr   JSONDecoderr$   r=   rL   r)   r   r   <module>r      sE                 E E E E E E E E       $ $ $ $ $ $ 7 7 7 7 7 7 7 7$ $ $ $ $T% $ $ $$. . . . .T% . . .*	F 	F 	F 	F 	F 	F 	F 	Fp p p p pK p p p p pr   