
    k7i)                         S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SKJr  S SKJr  SSK	J
r
  SSK	Jr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr   " S S5      rS rS rS rS rg)    N)
json_dumps)
json_loads)to_bytes)
to_unicode   )DecodeError)InsecureClaimError)JsonWebSignature)JsonWebEncryption)Key)KeySet   )	JWTClaimsc                       \ rS rSrSr\R                  " SR                  / SQ5      \R                  5      r	SS jr
S rSS jrSS	 jrS
rg)JsonWebToken   )passwordtokensecret
secret_key|)z1\b(?:3[47]\d|(?:4\d|5[1-5]|65)\d{2}|6011)\d{12}\bzB-----BEGIN[A-Z ]+PRIVATE KEY-----.+-----END[A-Z ]+PRIVATE KEY-----z3^\b(?!(000|666|9))\d{3}-(?!00)\d{2}-(?!0000)\d{4}\bNc                 <    [        XS9U l        [        XS9U l        g )N)private_headers)r
   _jwsr   _jwe)self
algorithmsr   s      R/home/james-whalen/.local/lib/python3.13/site-packages/authlib/jose/rfc7519/jwt.py__init__JsonWebToken.__init__%   s    $ZQ	%jR	    c                     U Hc  nX R                   ;   a  [        U5      eX   n[        U[        5      (       d  M8  U R                  R                  U5      (       d  MZ  [        U5      e   g)z0Check if payload contains sensitive information.N)SENSITIVE_NAMESr	   
isinstancestrSENSITIVE_VALUESsearch)r   payloadkvs       r   check_sensitive_data!JsonWebToken.check_sensitive_data)   sZ    A((((++ 
A!S!!d&;&;&B&B1&E&E(++ r!   c                    UR                  SS5        S H[  nUR                  U5      n[        U[        R                  5      (       d  M5  [        R
                  " UR                  5       5      X%'   M]     U(       a  U R                  U5        [        X15      n[        [        U5      5      nSU;   a  U R                  R                  XU5      $ U R                  R                  XU5      $ )zEncode a JWT with the given header, payload and key.

:param header: A dict of JWS header
:param payload: A dict to be encoded
:param key: key used to sign the signature
:param check: check if sensitive data in payload
:return: bytes
typJWT)expiatnbfenc)
setdefaultgetr$   datetimecalendartimegmutctimetupler+   find_encode_keyr   r   r   serialize_compactr   )r   headerr(   keycheckr)   claimtexts           r   encodeJsonWebToken.encode5   s     	%'&AKKNE%!2!233%__U-?-?-AB
	 ' %%g.c*
7+,F?99..vSAA99..vSAAr!   c                 j   Uc  [         n[        U5      (       a  UnO[        [        U5      5      n[	        U5      nUR                  S5      nUS:X  a!  U R                  R                  X[        5      nO2US:X  a!  U R                  R                  X[        5      nO[        S5      eU" US   US   UUS9$ )a  Decode the JWT with the given key. This is similar with
:meth:`verify`, except that it will raise BadSignatureError when
signature doesn't match.

:param s: text of JWT
:param key: key used to verify the signature
:param claims_cls: class to be used for JWT claims
:param claims_options: `options` parameters for claims_cls
:param claims_params: `params` parameters for claims_cls
:return: claims_cls instance
:raise: BadSignatureError
   .r      zInvalid input segments lengthr(   r<   )optionsparams)r   callablecreate_load_keyprepare_raw_keyr   countr   deserialize_compactdecode_payloadr   r   )	r   sr=   
claims_clsclaims_optionsclaims_paramsload_key	dot_countdatas	            r   decodeJsonWebToken.decodeP   s     "JC==H&s';<HQKGGDM	>9900nMD!^9900nMD=>>ON" 	
 	
r!   )r   r   )N)T)NNN)__name__
__module____qualname____firstlineno__r#   recompilejoinDOTALLr&   r   r+   rA   rU   __static_attributes__ r!   r   r   r      sF    COzz				
 			S
,B6"
r!   r   c                      [        [        U 5      5      n[	        U[
        5      (       d  [        S5      eU$ ! [         a  n[        S5      UeS nAff = f)NzInvalid payload valuezInvalid payload type)r   r   
ValueErrorr   r$   dict)bytes_payloadr(   excs      r   rM   rM   u   sV    <Z67 gt$$011N	  <12;<s   8 
AAAc                    [        U [        5      (       a  U $ [        U [        5      (       a9  U R                  S5      (       a#  U R	                  S5      (       a  [        U 5      n U $ [        U [        [        45      (       a  SU 0n U $ )N{}keys)r$   r   r%   
startswithendswithr   tuplelist)raws    r   rJ   rJ      sn    #v
#ss 3 3S8I8Io J 
C%	'	'smJr!   c                    [        U [        5      (       aZ  UR                  S5      nU(       a  U R                  U5      $ [        R
                  " U R                  5      nUR                  US'   U$ [        U [        5      (       ap  SU ;   aj  U S   nUR                  S5      nU H  nUR                  S5      U:X  d  M  Us  $    U(       d   [        R
                  " U5      nUS   US'   U$ [        S5      e[        U [        5      (       a  SU ;   a
  U S   US'   U $ [        U [        5      (       a   U R                  (       a  U R                  US'   U $ )Nkidri   Invalid JSON Web Key Set)r$   r   r5   find_by_kidrandomchoiceri   rp   rc   rb   r   )r=   r<   rp   rvri   r)   s         r   r:   r:      s   #vjj??3'']]388$u	#t36{jjAuuU|s"  t$BuIF5MI344 #t#E
u J 
C		#''uJr!   c                    ^  U 4S jnU$ )Nc                 ^  > [        T[        5      (       a   TR                  U R                  S5      5      $ [        T[        5      (       aa  ST;   a[  TS   nU R                  S5      nUb#  U H  nUR                  S5      U:X  d  M  Us  $    O[        U5      S:X  a  US   $ [        S5      eT$ )Nrp   ri   r   r   rq   )r$   r   rr   r5   rc   lenrb   )r<   r(   ri   rp   r)   r=   s        r   rR   !create_load_key.<locals>.load_key   s    c6""??6::e#455c4  Vs]v;D**U#CAuuU|s*  
 t9>7N788
r!   r`   )r=   rR   s   ` r   rI   rI      s    ( Or!   )r7   r6   rs   r[   authlib.common.encodingr   r   r   r   errorsr   r	   rfc7515r
   rfc7516r   rfc7517r   r   claimsr   r   rM   rJ   r:   rI   r`   r!   r   <module>r      sT       	 . . , .   ' & '   ^
 ^
B@r!   