
    _vg2                         d dl Z d dlZd dlmZ d dlmZ ddlmZmZ g dZ	 e j
        d          Zd Zd	 Z e            Zd
 Zd ZddZddZd Z e            Zd ZdS )    N)signing)crypto   )packerssettings)create_tokendetect_tokenparse_tokensesamec                 F   d}t           j        r
|| j        z  }t           j        r%|t	          | |                                           z  }t           j        r|t          | j                  z  }t          j
        |t           j        t           j        t           j                  S )ay  
    When the value returned by this method changes, this revokes tokens.

    It is derived from the hashed password so that changing the password
    revokes tokens.

    It may be derived from the email so that changing the email revokes tokens
    too.

    For one-time tokens, it also contains the last login datetime so that
    logging in revokes existing tokens.

     )digest)r   INVALIDATE_ON_PASSWORD_CHANGEpasswordINVALIDATE_ON_EMAIL_CHANGEgetattrget_email_field_nameONE_TIMEstr
last_loginr   pbkdf2SALT
ITERATIONSDIGEST)userdatas     M/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/sesame/tokens_v1.pyget_revocation_keyr      s     D- * ;d7799::: %DO$$$
 =	       c                  z    t           j        t          j        } nt          j        }  | t           j        d          S )Nsha1)salt	algorithm)r   MAX_AGEr   SignerTimestampSignerr   )r%   s    r   
get_signerr'   /   s3    (6x}7777r   c                     t          j        |                                           } t                              |           S )z9
    Create a URL-safe, signed token from ``data``.

    )r   
b64_encodedecodesignersign)r   s    r   r,   r,   :   s2    
 d##**,,D;;tr   c                     t           j        t                              |           }n&t                              | t           j                  }t	          j        |                                          S )z4
    Extract the data from a signed ``token``.

    N)max_age)r   r$   r+   unsignr   
b64_decodeencode)tokenr   s     r   r/   r/   C   sQ    
 }}U##}}UH,<}==dkkmm,,,r   r   c                     |dk    rt          d          t          j                            t	          | t
          j                            }t          |           }t          ||z             S )z/
    Create a v1 signed token for a user.

    r   v1 tokens don't support scope)	NotImplementedErrorr   packerpack_pkr   r   PRIMARY_KEY_FIELDr   r,   )r   scopeprimary_keykeys       r   r   r   O   s^    
 {{!"ABBB.((x7Q)R)RSSK
T
"
"Cc!"""r   c                 "   |dk    rt          d          |t          d          	 t          |           }n# t          j        $ r t                              d|            Y dS t          j        $ r t                              d|            Y dS t          $ r t                              d           Y dS w xY w	 t          j
                            |          \  }}n+# t          $ r t                              d           Y dS w xY w ||          }|t                              d	|           dS t          j        |t          |                    st                              d
|            dS t                              d||            |S )z0
    Obtain a user from a v1 signed token.

    r   r4   Nzv1 tokens don't support max_agezExpired token: %szBad token: %szkValid signature but unexpected token; if you enabled or disabled SESAME_MAX_AGE, you must regenerate tokensz^Valid signature but unexpected token; if you changed SESAME_PACKER, you must regenerate tokenszUnknown or inactive user: %szInvalid token: %szValid token for user %s: %s)r5   r/   r   SignatureExpiredloggerdebugBadSignature	Exception	exceptionr   r6   	unpack_pkr   constant_time_comparer   )r2   get_userr9   r.   r   user_pkr;   r   s           r   r
   r
   [   s   
 {{!"ABBB!"CDDDe}}#   (%000tt   _e,,,tt   E	
 	
 	
 tt~//55   8	
 	
 	
 tt 8GD|3W===t'-?-E-EFF (%000t
LL.e<<<Ks-   8 *B8%)B8#B87B8<"C $DDc                  j    t           j        t          j        d          S t          j        d          S )Nz#[A-Za-z0-9-_]{4,}:[A-Za-z0-9-_]{27}z2[A-Za-z0-9-_]{4,}:[0-9A-Za-z]{6}:[A-Za-z0-9-_]{27})r   r$   recompile r   r   get_token_rerK      s1     z@AAA
 zOPPPr   c                 :    t                               |           duS )z7
    Tell whether token may be a v1 signed token.

    N)token_re	fullmatch)r2   s    r   r	   r	      s    
 e$$D00r   )r   )r   N)loggingrH   django.corer   django.utilsr   r   r   r   __all__	getLoggerr>   r   r'   r+   r,   r/   r   r
   rK   rM   r	   rJ   r   r   <module>rT      s    				                    
9
9
9		8	$	$  B8 8 8 
  	- 	- 	-	# 	# 	# 	#+ + + +\
Q 
Q 
Q <>>1 1 1 1 1r   