
    ([f>                         d dl Z d dlZd dlZd dlZd dlmZmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZ dd	lmZmZ  G d
 d          Zd Zd Zd Zd ZdS )    N)to_bytes
to_unicode
json_loads
json_dumps   )	JWTClaims   )DecodeErrorInsecureClaimError)JsonWebSignature)JsonWebEncryption)KeySetKeyc                       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      L/var/www/piapp/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.encode,   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.decodeG   s     "JC== 	=HH&s';';<<HQKKGGDMM	>>900HnMMDD!^^900HnMMDD=>>>zOT(^" 
 
 
 	
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 )-26"
 "
 "
 "
 "
 "
r   r   c                     	 t          t          |                     }n# t          $ r t          d          w xY wt	          |t
                    st          d          |S )NzInvalid payload valuezInvalid payload type)r   r   
ValueErrorr
   r"   dict)bytes_payloadr&   s     r   rI   rI   l   sn    3Z6677 3 3 312223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   v   s    #v 
#s NN3$'LL$5$5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kidra   Invalid JSON Web Key Set)r"   r   r2   find_by_kidrandomchoicera   rh   r\   r[   r   )r:   r9   rh   rvra   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 )Nrh   ra   r   r   ri   )r"   r   rj   r2   r\   lenr[   )r9   r&   ra   rh   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   )rU   rk   r3   r4   authlib.common.encodingr   r   r   r   claimsr   errorsr
   r   rfc7515r   rfc7516r   rfc7517r   r   r   rI   rF   r7   rE   rY   r   r   <module>rw      sE   				                     4 4 4 4 4 4 4 4 & & & & & & ' ' ' ' ' ' ! ! ! ! ! ! ! !Y
 Y
 Y
 Y
 Y
 Y
 Y
 Y
x  	 	 	  @    r   