
    ~h)                         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y)    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j                  g d      ej                        Zd	dZ	d Z
d
dZddZy)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                 L    t        ||      | _        t        ||      | _        y )N)private_headers)r
   _jwsr   _jwe)self
algorithmsr   s      T/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/authlib/jose/rfc7519/jwt.py__init__zJsonWebToken.__init__%   s    $ZQ	%j/R	    c                     |D ]W  }|| j                   v rt        |      ||   }t        |t              s2| j                  j                  |      sNt        |       y)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(++	,r   c                    |j                  dd       dD ]T  }|j                  |      }t        |t        j                        s/t	        j
                  |j                               ||<   V |r| j                  |       t        ||      }t        t        |            }d|v r| j                  j                  |||      S | j                  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AKKNE%!2!23%__U-?-?-AB
		C %%g.c6*
7+,F?99..vtSAA99..vtSAAr   c                 d   |t         }t        |      r|}nt        t        |            }t	        |      }|j                  d      }|dk(  r"| j                  j                  ||t              }n2|dk(  r"| j                  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
           .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=H&s';<HQKGGDM	>9900HnMD!^9900HnMD=>>ON" 	
 	
r   )N)T)NNN)__name__
__module____qualname__r!   recompilejoinDOTALLr$   r   r)   r>   rQ    r   r   r   r      sH    CO!rzz				
 			S
,B6"
r   r   c                     	 t        t        |             }t	        |t
              st        d      |S # t        $ r}t        d      |d }~ww xY w)NzInvalid payload valuezInvalid payload type)r   r   
ValueErrorr   r"   dict)bytes_payloadr&   excs      r   rI   rI   u   sS    <Z67 gt$011N	  <12;<s   3 	AAAc                     t        | t              r| S t        | t              r/| j                  d      r| j	                  d      rt        |       } | S 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S8Io J 
C%	'smJr   c                 J   t        | t              rT|j                  d      }|r| j                  |      S t	        j
                  | j                        }|j                  |d<   |S t        | t              red| v ra| d   }|j                  d      }|D ]  }|j                  d      |k(  s|c S  |st	        j
                  |      }|d   |d<   |S t        d      t        | t              rd| v r
| d   |d<   | S 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      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                       fd}|S )Nc                 P   t        t              r j                  | j                  d            S t        t              rddv r`d   }| j                  d      }|*|D ]  }|j                  d      |k(  s|c S  t        d      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::e#455c4 Vs]v;D**U#C !AuuU|s* ! 788 t9>7N7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      sT       	 . . , .   ' & '   ^
 ^
B@r   