
    _vg               	           d dl Z d dlZd dlZ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Z ej        d          ZdZd Zd Zd	d
dddddddZd Zd ZddZddZ ej        d          Zd ZdS )    N   )packerssettings)create_tokendetect_tokenparse_tokensesamei ^c                      t           j        dS t          t          j                              t          z
  } t          j        d|           S )zi
    When SESAME_MAX_AGE is enabled, encode the time in seconds since the epoch.

    Return bytes.

    N    !i)r   MAX_AGEinttimeTIMESTAMP_OFFSETstructpack)	timestamps    M/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/sesame/tokens_v2.pypack_timestampr      s=     sDIKK  #33I;tY'''r   c                     t           j        d| fS t          j        d| dd                   | dd         c\  }} t	          t          j                              t          z
  |z
  | fS )z
    When SESAME_MAX_AGE is enabled, extract the timestamp and calculate the age.

    Return an age in seconds or None and the remaining bytes.

    Nr      )r   r   r   unpackr   r   r   )datar   s     r   unpack_timestampr       se     TztT"1"X66QRRLY$ty{{..:D@@r   ,            (          )pbkdf2_sha256pbkdf2_sha1argon2bcrypt_sha256bcryptsha1md5cryptc                    d}t           j        rc| j        \| j                            d          d         }	 t          |         }|| j        | d         z  }n# t
          $ r || j        z  }Y nw xY wt           j        r%|t          | |                                           z  }t           j	        r#| j
        || j
                                        z  }|                                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.

     N$r   )r   INVALIDATE_ON_PASSWORD_CHANGEpassword	partition
HASH_SIZESKeyErrorINVALIDATE_ON_EMAIL_CHANGEgetattrget_email_field_nameONE_TIME
last_login	isoformatencode)userr   	algorithm	hash_sizes       r   get_revocation_keyr<   :   s     D2 - /$-2KM++C003		/"9-I DM9*++..DD  	" 	" 	"DM!DDD	"
 * ;d7799::: ,T_8))+++;;==s   A A/.A/c                 V    t          j        | ||d                                          S )z+
    Create a MAC with keyed hashing.

    s   sesame.tokens_v2)digest_sizekeyperson)hashlibblake2bdigest)r   r?   sizes      r   signrE   s   s4    
 ?"	  
 fhhr   r+   c                    t           j                            t          | t          j                            }t                      }t          |           }t          ||z   |z   |	                                z   t          j
        t          j                  }||z   |z   }t          j        |                              d          }|                                S )z/
    Create a v2 signed token for a user.

       =)r   packerpack_pkr3   r   PRIMARY_KEY_FIELDr   r<   rE   r8   SIGNING_KEYSIGNATURE_SIZEbase64urlsafe_b64encoderstripdecode)r9   scopeprimary_keyr   revocation_key	signaturer   tokens           r   r   r      s    
 .((x7Q)R)RSSK  I'--Ni.05<<>>A I "Y.D$T**11$77E<<>>r   c                    |                                  } 	 t          j        | dt          |            dz  z  z             }n+# 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          |          \  }}n+# t          $ r t
                              d           Y dS w xY wt          |          t          j        k    rt
                              d           dS |t          j        }nUt          j        t
                              d           n.t          |t           j                  r|                                }|#||k    rt
                              d	|           dS  ||          }	|	(t
                              d
t          j        |           dS |dt          j                  }
t)          |	          }t          j        D ]w}t-          |
|z   |                                 z   |t          j                  }t/          j        ||          r-|dk    rdnd| }t
                              d|	|           |	c S x|dk    rdnd| }t
                              d|	|           dS )z0
    Obtain a user from a v2 signed token.

    rG   r   zBad token: cannot decode tokenNz%Bad token: cannot extract primary keyz#Bad token: cannot extract timestampz#Bad token: cannot extract signaturezHIgnoring max_age argument; it isn't supported when SESAME_MAX_AGE = NonezExpired token: age = %d secondsz!Unknown or inactive user: %s = %rr+   zin default scopez	in scope zValid token for user %s %szInvalid token for user %s %s)r8   rM   urlsafe_b64decodelen	Exceptionloggerdebugr   rH   	unpack_pkr   r   rL   r   warning
isinstancedatetime	timedeltatotal_secondsrJ   r<   VERIFICATION_KEYSrE   hmaccompare_digest)rU   get_userrQ   max_ager   user_pktimestamp_and_signatureagerT   r9   primary_key_and_timestamprS   verification_keyexpected_signature	log_scopes                  r   r   r      s	   
 LLNNE'Ua0H(HII   5666tt+2>+C+CD+I+I(((   <===tt)*ABBYY   :;;;tt 9~~000:;;;t "			!<	
 	
 	
 	
 
GX/	0	0 *''))
3'>>6<<<t 8GD|/&	
 	
 	

 t !%%?(?'?%? @'--N$6 	 	!%6G#
 

 y*<== 	.3rkk**?R5?R?RILL5tYGGGKKK	
 ',rkk""7J57J7JI
LL/yAAA4s5   +A $A*)A*."B $B98B9=C $C87C8z[A-Za-z0-9-_]{4,}c                 :    t                               |           duS )z7
    Tell whether token may be a v2 signed token.

    N)token_re	fullmatch)rU   s    r   r   r      s    
 e$$D00r   )r+   )r+   N)rM   r_   rA   rc   loggingrer   r   r+   r   r   __all__	getLoggerrZ   r   r   r   r0   r<   rE   r   r   compilero   r    r   r   <module>rw      sH        				          
9
9
9		8	$	$ 
( 
( 
(A A A 	 	
6 6 6r
 
 
   ,W W W W~ 2:*++1 1 1 1 1r   