
    Ldg                         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e          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      >F:\djangOuth\env\Lib\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
        JWTtyp)expiatnbfenc)getr"   datetimecalendartimegmutctimetupler)   find_encode_keyr   r   r   serialize_compactr   )r   headerr&   keycheckr'   claimtexts           r   encodezJsonWebToken.encode,   s     u& 	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&   r8   )optionsparams)r   callablecreate_load_keyprepare_raw_keyr   countr   deserialize_compactdecode_payloadr   r
   )	r   sr9   
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=   rP    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   rH   rH   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   rE   rE   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kidr`   zInvalid JSON Web Key Set)r"   r   r1   find_by_kidrandomchoicer`   rh   r[   rZ   r   )r9   r8   rh   rvr`   r'   s         r   r6   r6      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                 P   t          t                    r(                    |                     d                    S t          t                    rRdv rNd         }|                     d          }|D ]}|                    d          |k    r|c S  t          d          S rg   )r"   r   ri   r1   r[   rZ   )r8   r&   r`   rh   r'   r9   s        r   rM   z!create_load_key.<locals>.load_key   s    c6"" 	6??6::e#4#4555c4   	9Vs]]v;D**U##C  55<<3&&HHH '7888
r   rX   )r9   rM   s   ` r   rD   rD      s#         Or   )rT   rj   r2   r3   authlib.common.encodingr   r   r   r   claimsr   errorsr
   r   rfc7515r   rfc7516r   rfc7517r   r   objectr   rH   rE   r6   rD   rX   r   r   <module>rv      sG   				                     4 4 4 4 4 4 4 4 & & & & & & ' ' ' ' ' ' ! ! ! ! ! ! ! !Y
 Y
 Y
 Y
 Y
6 Y
 Y
 Y
x  	 	 	  @    r   