
    h                        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mZ  G d de	      Z
 G d de j                        Z G d de      Z G d	 d
e      Z	 d dlZ G d de      Z G d d      Z e       Zej)                  de       ej)                  de       y# e$ r dxZZY w xY w# e$ rZ G d de      ZY dZ[ZdZ[ww xY w)    N)FernetMultiFernetc                       e Zd ZdZy)SerializerDoesNotExistz'The requested serializer was not found.N)__name__
__module____qualname____doc__     V/var/www/Befach/backend/env/lib/python3.12/site-packages/channels_redis/serializers.pyr   r      s    1r   r   c                   z    e Zd Z	 	 	 d	dZd Zd Zej                  d        Zej                  d        Z	d Z
d Zy)
BaseMessageSerializerNc                 B    || _         || _        | j                  |       y N)random_prefix_lengthexpiry_setup_encryption)selfsymmetric_encryption_keysr   r   s       r   __init__zBaseMessageSerializer.__init__   s"     %9!89r   c                     |rat        |t        t        f      rt        d      t        t        d      |D cg c]  }| j                  |       }}t	        |      | _        y d | _        y c c}w )Nz9symmetric_encryption_keys must be a list of possible keys<Cannot run with encryption without 'cryptography' installed.)
isinstancestrbytes
ValueErrorr   make_fernetcrypter)r   r   keysub_fernetss       r   r   z'BaseMessageSerializer._setup_encryption   sv    $3c5\B O  " R  =VVS4++C0VKV&{3DLDL Ws   A,c                     t         t        d      t        |t              r|j	                  d      }t        j                  t        j                  |      j                               }t        |      S )zT
        Given a single encryption key, returns a Fernet instance using it.
        r   utf-8)
r   r   r   r   encodebase64urlsafe_b64encodehashlibsha256digest)r   r    formatted_keys      r   r   z!BaseMessageSerializer.make_fernet-   s`     >N  c3**W%C001D1K1K1MNm$$r   c                     t         r   NotImplementedErrorr   messageargskwargss       r   as_byteszBaseMessageSerializer.as_bytes;       !!r   c                     t         r   r,   r.   s       r   
from_bytesz BaseMessageSerializer.from_bytes?   r3   r   c                    | j                  |      }| j                  r| j                  j                  |      }| j                  dkD  r?t	        j
                  d| j                  z        j                  | j                  d      |z   }|S )z6
        Serializes message to a byte string.
        r      big)r2   r   encryptr   randomgetrandbitsto_bytes)r   r/   s     r   	serializezBaseMessageSerializer.serializeC   s     --(<<ll**73G$$q( ""1t'@'@#@AJJ--u   r   c                     | j                   dkD  r|| j                   d }| j                  rC| j                  | j                  n| j                  dz   }| j                  j                  ||      }| j	                  |      S )z2
        Deserializes from a byte string.
        r   N
   )r   r   r   decryptr5   )r   r/   ttls      r   deserializez!BaseMessageSerializer.deserializeU   sn     $$q(d779:G<<!%!4$++$++:JCll**7C8Gw''r   )Nr   N)r   r   r	   r   r   r   abcabstractmethodr2   r5   r=   rB   r   r   r   r   r      sZ     #'		:  % 	" " 	" "$(r   r   c                       e Zd ZdZd Zy)MissingSerializerNc                     | j                   r   )	exception)r   r0   r1   s      r   r   zMissingSerializer.__init__f   s    nnr   )r   r   r	   rH   r   r   r   r   rF   rF   c   s    Ir   rF   c                   6    e Zd Zd Z eej                        Zy)JSONSerializerc                 V    t        j                  |g|i |}|j                  d      S )Nr#   )jsondumpsr$   r.   s       r   r2   zJSONSerializer.as_byteso   s)    **W6t6v6~~g&&r   N)r   r   r	   r2   staticmethodrL   loadsr5   r   r   r   rJ   rJ   j   s    
' djj)Jr   rJ   c                   T    e Zd Z eej
                        Z eej                        ZyMsgPackSerializerN)	r   r   r	   rN   msgpackpackbr2   unpackbr5   r   r   r   rR   rR      s    .!'//2
r   rR   c                       e Zd ZeZyrQ   )r   r   r	   excrH   r   r   r   rR   rR   {   s    	r   c                   "    e Zd ZdZd Zd Zd Zy)SerializersRegistryzO
    Serializers registry inspired by that of ``django.core.serializers``.
    c                     i | _         y r   )	_registry)r   s    r   r   zSerializersRegistry.__init__   s	    r   c                     t        |t              r(t        |t              st	        |d      rt	        |d      sJ d       || j
                  |<   y)z<
        Register a new serializer for given format
        r=   rB   z
            `serializer_class` should be a class which implements `serialize` and `deserialize` method
            or a subclass of `channels_redis.serializers.BaseMessageSerializer`
        N)r   type
issubclassr   hasattrr[   )r   formatserializer_classs      r   register_serializerz'SerializersRegistry.register_serializer   sU     *D1')>?(+6,m<					 
 "2vr   c                 b    	 | j                   |   } ||i |S # t        $ r t        |      w xY wr   )r[   KeyErrorr   )r   r`   r0   r1   ra   s        r   get_serializerz"SerializersRegistry.get_serializer   sD    	1#~~f5  000  	1(00	1s    .N)r   r   r	   r
   r   rb   re   r   r   r   rY   rY      s    2"1r   rY   rL   rS   )rC   r%   r'   rL   r:   cryptography.fernetr   r   ImportErrorrd   r   ABCr   rF   rJ   rS   rR   rW   rY   registryrb   r   r   r   <module>rj      s    
     7
2X 2O(CGG O(d- 	** 	*331 3
1 1D     V^ 4   Y(9 :A   K& `  -  s)   B B) 	B&%B&)C.B>>C