o
    if^1                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZ ddlmZ dd	lmZmZmZmZmZmZmZ dd
lmZ erTddlmZmZ G dd dZe ZejZejZej Z dS )    )annotationsN)timegm)Iterable)datetime	timedeltatimezone)TYPE_CHECKINGAny   )api_jws)DecodeErrorExpiredSignatureErrorImmatureSignatureErrorInvalidAudienceErrorInvalidIssuedAtErrorInvalidIssuerErrorMissingRequiredClaimError)RemovedInPyjwt3Warning)AllowedPrivateKeysAllowedPublicKeysc                   @  s   e Zd ZdJdKddZedLd	d
Z				dMdNddZ		dOdPddZ								dQdRd0d1ZdSd3d4Z									dQdTd5d6Z
			dUdVd7d8ZdWd9d:ZdXd=d>ZdXd?d@ZdXdAdBZdCdDdYdFdGZdZdHdIZdS )[PyJWTNoptionsdict[str, Any] | NonereturnNonec                 C  s"   |d u ri }i |   || _d S N)_get_default_optionsr   )selfr    r   D/var/www/html/corbot_env/lib/python3.10/site-packages/jwt/api_jwt.py__init__   s   zPyJWT.__init__dict[str, bool | list[str]]c                   C  s   ddddddg dS )NT)verify_signature
verify_exp
verify_nbf
verify_iat
verify_aud
verify_issrequirer   r   r   r   r   r       s   zPyJWT._get_default_optionsHS256Tpayloaddict[str, Any]key AllowedPrivateKeys | str | bytes	algorithm
str | Noneheadersjson_encodertype[json.JSONEncoder] | Nonesort_headersboolstrc           	      C  sn   t |ts	td| }dD ]}t ||tr#t||  ||< q| j|||d}t	j
||||||dS )NzGExpecting a dict object, as JWT only supports JSON objects as payloads.)expiatnbf)r0   r1   )r3   )
isinstancedict	TypeErrorcopygetr   r   utctimetuple_encode_payloadr   encode)	r   r*   r,   r.   r0   r1   r3   
time_claimjson_payloadr   r   r   r@   ,   s,   

zPyJWT.encodebytesc                 C  s   t j|d|ddS )z
        Encode a given payload to the bytes to be signed.

        This method is intended to be overridden by subclasses that need to
        encode the payload in a different way, e.g. compress the payload.
        ),:)
separatorsclszutf-8)jsondumpsr@   )r   r*   r0   r1   r   r   r   r?   R   s   zPyJWT._encode_payload r   jwtstr | bytesAllowedPublicKeys | str | bytes
algorithmslist[str] | Noneverifybool | Nonedetached_payloadbytes | Noneaudiencestr | Iterable[str] | Noneissuerleewayfloat | timedeltakwargsr	   c
                 K  s   |
rt dt|
  t t|pi }|dd |d ur,||d kr,t jdtd |d sN|dd |dd |d	d |d
d |dd |d rX|sXtdt	j
|||||d}| |}i | j|}| j|||||	d ||d< |S )Nzypassing additional kwargs to decode_complete() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: r"   TzThe `verify` argument to `decode` does nothing in PyJWT 2.0 and newer. The equivalent is setting `verify_signature` to False in the `options` dictionary. This invocation has a mismatch between the kwarg and the option entry.)categoryr#   Fr$   r%   r&   r'   z\It is required that you pass in a value for the "algorithms" argument when calling decode().)r,   rN   r   rR   )rT   rV   rW   r*   )warningswarntuplekeysr   r:   
setdefaultDeprecationWarningr   r   decode_complete_decode_payloadr   _validate_claims)r   rK   r,   rN   r   rP   rR   rT   rV   rW   rY   decodedr*   merged_optionsr   r   r   ra   d   sL   


zPyJWT.decode_completerd   c              
   C  sP   z	t |d }W n ty } ztd| d}~ww t|ts&td|S )a  
        Decode the payload from a JWS dictionary (payload, signature, header).

        This method is intended to be overridden by subclasses that need to
        decode the payload in a different way, e.g. decompress compressed
        payloads.
        r*   zInvalid payload string: Nz-Invalid payload string: must be a json object)rH   loads
ValueErrorr   r9   r:   )r   rd   r*   er   r   r   rb      s   
zPyJWT._decode_payloadc
                 K  sB   |
rt dt|
  t | j|||||||||	d	}|d S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: )rP   rR   rT   rV   rW   r*   )r[   r\   r]   r^   r   ra   )r   rK   r,   rN   r   rP   rR   rT   rV   rW   rY   rd   r   r   r   decode   s&   
zPyJWT.decodec                 C  s   t |tr	| }|d urt |ttfstd| || tjt	j
d }d|v r6|d r6| ||| d|v rE|d rE| ||| d|v rT|d rT| ||| |d	 r^| || |d
 rp| j|||ddd d S d S )Nz+audience must be a string, iterable or None)tzr7   r%   r8   r$   r6   r#   r'   r&   
strict_audFstrict)r9   r   total_secondsr5   r   r;   _validate_required_claimsr   nowr   utc	timestamp_validate_iat_validate_nbf_validate_exp_validate_iss_validate_audr=   )r   r*   r   rT   rV   rW   rp   r   r   r   rc      s&   

zPyJWT._validate_claimsc                 C  s(   |d D ]}| |d u rt|qd S )Nr(   )r=   r   )r   r*   r   claimr   r   r   ro     s
   zPyJWT._validate_required_claimsrp   floatc                 C  @   zt |d }W n ty   tdw ||| krtdd S )Nr7   z)Issued At claim (iat) must be an integer.z The token is not yet valid (iat))intrg   r   r   )r   r*   rp   rW   r7   r   r   r   rs     s   zPyJWT._validate_iatc                 C  rz   )Nr8   z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))r{   rg   r   r   )r   r*   rp   rW   r8   r   r   r   rt        zPyJWT._validate_nbfc                 C  s@   zt |d }W n ty   tdw ||| krtdd S )Nr6   z/Expiration Time claim (exp) must be an integer.zSignature has expired)r{   rg   r   r   )r   r*   rp   rW   r6   r   r   r   ru   &  r|   zPyJWT._validate_expFrl   rm   c                  s   |d u rd|vs|d sd S t dd|vs|d std|d  |r@t|ts-t dt ts6t d| kr>t dd S t trH g t tsQt dtdd  D r^t dt|trf|g}t fd	d|D rut d
d S )NaudzInvalid audiencezInvalid audience (strict)z&Invalid claim format in token (strict)zAudience doesn't match (strict)zInvalid claim format in tokenc                 s  s    | ]	}t |t V  qd S r   )r9   r5   ).0cr   r   r   	<genexpr>]  s    z&PyJWT._validate_aud.<locals>.<genexpr>c                 3  s    | ]}| vV  qd S r   r   )r~   r}   audience_claimsr   r   r   c  s    zAudience doesn't match)r   r   r9   r5   listanyall)r   r*   rT   rm   r   r   r   rw   4  s4   




zPyJWT._validate_audc                 C  s4   |d u rd S d|vrt d|d |krtdd S )NisszInvalid issuer)r   r   )r   r*   rV   r   r   r   rv   f  s   zPyJWT._validate_issr   )r   r   r   r   )r   r!   )r)   NNT)r*   r+   r,   r-   r.   r/   r0   r   r1   r2   r3   r4   r   r5   )NN)r*   r+   r0   r   r1   r2   r   rC   )rJ   NNNNNNr   )rK   rL   r,   rM   rN   rO   r   r   rP   rQ   rR   rS   rT   rU   rV   r/   rW   rX   rY   r	   r   r+   )rd   r+   r   r	   )rK   rL   r,   rM   rN   rO   r   r   rP   rQ   rR   rS   rT   rU   rV   r/   rW   rX   rY   r	   r   r	   )NNr   )r*   r+   r   r+   rW   rX   r   r   )r*   r+   r   r+   r   r   )r*   r+   rp   ry   rW   ry   r   r   )r*   r+   rT   rU   rm   r4   r   r   )r*   r+   rV   r	   r   r   )__name__
__module____qualname__r    staticmethodr   r@   r?   ra   rb   ri   rc   ro   rs   rt   ru   rw   rv   r   r   r   r   r      sT    )
E*
#
	

2r   )!
__future__r   rH   r[   calendarr   collections.abcr   r   r   r   typingr   r	   rJ   r   
exceptionsr   r   r   r   r   r   r   r   rN   r   r   r   _jwt_global_objr@   ra   ri   r   r   r   r   <module>   s&    $	  Y
