o
    ÒèFhK2  ã                   @  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    úD/var/www/html/loop/nvenv/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$   TzàThe `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(    $	  ]
