o
    Ϊ-gK2                     @  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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r\ddlmZmZ ddl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List   )api_jws)DecodeErrorExpiredSignatureErrorImmatureSignatureErrorInvalidAudienceErrorInvalidIssuedAtErrorInvalidIssuerErrorMissingRequiredClaimError)RemovedInPyjwt3Warning)AllowedPrivateKeysAllowedPublicKeys)PyJWKc                   @  s   e Zd ZdKdLddZedMd	d
Z				dNdOddZ		dPdQddZ								dRdSd1d2ZdTd4d5Z									dRdUd6d7Z
			dVdWd8d9ZdXd:d;ZdYd>d?ZdYd@dAZdYdBdCZdDdEdZdGdHZd[dIdJ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    L/var/www/html/django-vendor/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)r2   r3   )r5   )
isinstancedict	TypeErrorcopygetr   r   utctimetuple_encode_payloadr   encode)	r   r,   r.   r0   r2   r3   r5   
time_claimjson_payloadr    r    r!   rB   -   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dumpsrB   )r   r,   r2   r3   r    r    r!   rA   S   s   zPyJWT._encode_payload r   jwtstr | bytes'AllowedPublicKeys | PyJWK | str | bytes
algorithmslist[str] | Noneverifybool | Nonedetached_payloadbytes | Noneaudiencestr | Iterable[str] | Noneissuerstr | List[str] | None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.   rP   r   rT   )rV   rX   rZ   r,   )warningswarntuplekeysr   r<   
setdefaultDeprecationWarningr   r   decode_complete_decode_payloadr   _validate_claims)r   rM   r.   rP   r   rR   rT   rV   rX   rZ   r\   decodedr,   merged_optionsr    r    r!   rd   e   sL   


zPyJWT.decode_completerg   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)rJ   loads
ValueErrorr   r;   r<   )r   rg   r,   er    r    r!   re      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: )rR   rT   rV   rX   rZ   r,   )r^   r_   r`   ra   r   rd   )r   rM   r.   rP   r   rR   rT   rV   rX   rZ   r\   rg   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)tzr9   r'   r:   r&   r8   r%   r)   r(   
strict_audFstrict)r;   r   total_secondsr7   r   r=   _validate_required_claimsr   nowr   utc	timestamp_validate_iat_validate_nbf_validate_exp_validate_iss_validate_audr?   )r   r,   r   rV   rX   rZ   rs   r    r    r!   rf      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!   rr     s
   zPyJWT._validate_required_claimsrs   floatc                 C  @   zt |d }W n ty   tdw ||| krtdd S )Nr9   z)Issued At claim (iat) must be an integer.z The token is not yet valid (iat))intrj   r   r   )r   r,   rs   rZ   r9   r    r    r!   rv     s   zPyJWT._validate_iatc                 C  r}   )Nr:   z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))r~   rj   r   r   )r   r,   rs   rZ   r:   r    r    r!   rw        zPyJWT._validate_nbfc                 C  s@   zt |d }W n ty   tdw ||| krtdd S )Nr8   z/Expiration Time claim (exp) must be an integer.zSignature has expired)r~   rj   r   r   )r   r,   rs   rZ   r8   r    r    r!   rx   '  r   zPyJWT._validate_expFro   rp   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   )r;   r7   ).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   d  s    zAudience doesn't match)r   r   r;   r7   listanyall)r   r,   rV   rp   r    r   r!   rz   5  s4   




zPyJWT._validate_audc                 C  sV   |d u rd S d|vrt dt|tr|d |vrtdd S |d |kr)tdd S )NisszInvalid issuer)r   r;   r   r   )r   r,   rX   r    r    r!   ry   g  s   
zPyJWT._validate_issr   )r   r   r   r   )r   r#   )r+   NNT)r,   r-   r.   r/   r0   r1   r2   r   r3   r4   r5   r6   r   r7   )NN)r,   r-   r2   r   r3   r4   r   rE   )rL   NNNNNNr   )rM   rN   r.   rO   rP   rQ   r   r   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r	   r   r-   )rg   r-   r   r	   )rM   rN   r.   rO   rP   rQ   r   r   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r	   r   r	   )NNr   )r,   r-   r   r-   rZ   r[   r   r   )r,   r-   r   r-   r   r   )r,   r-   rs   r|   rZ   r|   r   r   )r,   r-   rV   rW   rp   r6   r   r   )r,   r-   rX   r	   r   r   )__name__
__module____qualname__r"   staticmethodr   rB   rA   rd   re   rl   rf   rr   rv   rw   rx   rz   ry   r    r    r    r!   r      sT    )
E*
#
	

2r   )$
__future__r   rJ   r^   calendarr   collections.abcr   r   r   r   typingr   r	   r
   rL   r   
exceptionsr   r   r   r   r   r   r   r   rP   r   r   api_jwkr   r   _jwt_global_objrB   rd   rl   r    r    r    r!   <module>   s(    $	  ]
