
    !<i)                         d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ ddl	m
Z
 ddl	mZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ  G d d          Zd Zd Zd Zd ZdS )    N)
json_dumps)
json_loads)to_bytes)
to_unicode   )DecodeError)InsecureClaimError)JsonWebSignature)JsonWebEncryption)Key)KeySet   )	JWTClaimsc                       e Zd ZdZ ej        d                    g d          ej                  Zd
dZ	d Z
ddZdd	ZdS )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                 ^    t          ||          | _        t          ||          | _        d S )N)private_headers)r
   _jwsr   _jwe)self
algorithmsr   s      /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/authlib/jose/rfc7519/jwt.py__init__zJsonWebToken.__init__%   s.    $ZQQQ	%j/RRR			    c                     |D ]`}|| j         v rt          |          ||         }t          |t                    r)| j                            |          rt          |          adS )z0Check if payload contains sensitive information.N)SENSITIVE_NAMESr	   
isinstancestrSENSITIVE_VALUESsearch)r   payloadkvs       r   check_sensitive_dataz!JsonWebToken.check_sensitive_data)   s{     	, 	,AD((((+++ 
A!S!! ,d&;&B&B1&E&E ,(+++	, 	,r   Tc                    |                     dd           dD ]Z}|                    |          }t          |t          j                  r)t	          j        |                                          ||<   [|r|                     |           t          ||          }t          t          |                    }d|v r| j                            |||          S | j                            |||          S )a  Encode 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   encodezJsonWebToken.encode5   s     	%'''& 	C 	CAKKNNE%!233 C%_U-?-?-A-ABB
 	/%%g...c6**
7++,,F??9..vtSAAA9..vtSAAAr   c                    |t           }t          |          r|}nt          t          |                    }t	          |          }|                    d          }|dk    r"| j                            ||t                    }n7|dk    r"| j	                            ||t                    }nt          d           ||d         |d         ||          S )	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
        N   .r      zInvalid input segments lengthr&   r9   )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   decodezJsonWebToken.decodeP   s     "JC== 	=HH&s';';<<HQKKGGDMM	>>900HnMMDD!^^900HnMMDD=>>>zON" 	
 
 
 	
r   )N)T)NNN)__name__
__module____qualname__r!   recompilejoinDOTALLr$   r   r)   r>   rQ    r   r   r   r      s        CO!rz		  		
 		
 		 S S S S
, 
, 
,B B B B6"
 "
 "
 "
 "
 "
r   r   c                     	 t          t          |                     }n"# t          $ r}t          d          |d }~ww xY wt	          |t
                    st          d          |S )NzInvalid payload valuezInvalid payload type)r   r   
ValueErrorr   r"   dict)bytes_payloadr&   excs      r   rI   rI   u   st    <Z6677 < < <122;<gt$$ 20111Ns    
>9>c                    t          | t                    r| S t          | t                    r:|                     d          r%|                     d          rt          |           } n t          | t          t          f          rd| i} | S )N{}keys)r"   r   r#   
startswithendswithr   tuplelist)raws    r   rF   rF      s    #v 
#s s 3 3 S8I8I oo	C%	'	' smJr   c                 |   t          | t                    rQ|                    d          }|r|                     |          S t	          j        | j                  }|j        |d<   |S t          | t                    rud| v rq| d         }|                    d          }|D ]}|                    d          |k    r|c S  |s!t	          j        |          }|d         |d<   |S t          d          t          | t                    rd| v r| d         |d<   n&t          | t                    r| j        r
| j        |d<   | S )Nkidrb   Invalid JSON Web Key Set)r"   r   r2   find_by_kidrandomchoicerb   ri   r\   r[   r   )r:   r9   ri   rvrb   r'   s         r   r7   r7      sV   #v jj 	(??3''']38$$u	#t 536{jj 	 	AuuU||s"" #  	t$$BuIF5MI3444 #t  #E
u	C		  #'  uJr   c                       fd}|S )Nc                    t          t                    r(                    |                     d                    S t          t                    rpdv rld         }|                     d          }|#|D ]}|                    d          |k    r|c S  nt          |          dk    r|d         S t          d          S )Nri   rb   r   r   rj   )r"   r   rk   r2   r\   lenr[   )r9   r&   rb   ri   r'   r:   s        r   rN   z!create_load_key.<locals>.load_key   s    c6"" 	6??6::e#4#4555c4   	9Vs]]v;D**U##C ! !AuuU||s**  +!
 t99>>7N7888
r   rY   )r:   rN   s   ` r   rE   rE      s#        ( Or   )r4   r3   rl   rU   authlib.common.encodingr   r   r   r   errorsr   r	   rfc7515r
   rfc7516r   rfc7517r   r   claimsr   r   rI   rF   r7   rE   rY   r   r   <module>rx      sg      				 . . . . . . . . . . . . , , , , , , . . . . . .             ' ' ' ' ' ' & & & & & & ' ' ' ' ' '                  ^
 ^
 ^
 ^
 ^
 ^
 ^
 ^
B      @    r   