o
    Ti^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   K/var/www/html/evchargy.com/venv/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   Z
time_claimZ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,   rL   r   rP   )rR   rT   rU   r*   )warningswarntuplekeysr   r:   
setdefaultDeprecationWarningr   r   decode_complete_decode_payloadr   _validate_claims)r   rI   r,   rL   r   rN   rP   rR   rT   rU   rW   decodedr*   Zmerged_optionsr   r   r   r_   d   sL   


zPyJWT.decode_completerb   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)rF   loads
ValueErrorr   r9   r:   )r   rb   r*   er   r   r   r`      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: )rN   rP   rR   rT   rU   r*   )rY   rZ   r[   r\   r   r_   )r   rI   r,   rL   r   rN   rP   rR   rT   rU   rW   rb   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&   Z
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   rR   rT   rU   rl   r   r   r   ra      s&   

zPyJWT._validate_claimsc                 C  s(   |d D ]}| |d u rt|qd S )Nr(   )r=   r   )r   r*   r   Zclaimr   r   r   rk     s
   zPyJWT._validate_required_claimsrl   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))intrd   r   r   )r   r*   rl   rU   r7   r   r   r   ro     s   zPyJWT._validate_iatc                 C  ru   )Nr8   z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))rv   rd   r   r   )r   r*   rl   rU   r8   r   r   r   rp        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)rv   rd   r   r   )r   r*   rl   rU   r6   r   r   r   rq   &  rw   zPyJWT._validate_expFrh   ri   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   )ry   rx   Zaudience_claimsr   r   r{   c  s    zAudience doesn't match)r   r   r9   r5   listanyall)r   r*   rR   ri   r   r|   r   rs   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 )NZisszInvalid issuer)r   r   )r   r*   rT   r   r   r   rr   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   rA   )rH   NNNNNNr   )rI   rJ   r,   rK   rL   rM   r   r   rN   rO   rP   rQ   rR   rS   rT   r/   rU   rV   rW   r	   r   r+   )rb   r+   r   r	   )rI   rJ   r,   rK   rL   rM   r   r   rN   rO   rP   rQ   rR   rS   rT   r/   rU   rV   rW   r	   r   r	   )NNr   )r*   r+   r   r+   rU   rV   r   r   )r*   r+   r   r+   r   r   )r*   r+   rl   rt   rU   rt   r   r   )r*   r+   rR   rS   ri   r4   r   r   )r*   r+   rT   r	   r   r   )__name__
__module____qualname__r    staticmethodr   r@   r?   r_   r`   rf   ra   rk   ro   rp   rq   rs   rr   r   r   r   r   r      sT    )
E*
#
	

2r   )!
__future__r   rF   rY   calendarr   collections.abcr   r   r   r   typingr   r	   rH   r   
exceptionsr   r   r   r   r   r   r   r   rL   r   r   r   Z_jwt_global_objr@   r_   rf   r   r   r   r   <module>   s&    $	  Y
