o
    "“i°8  ã                   @  sê   d dl mZ d dlZd dlZd dlmZ d dlmZ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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ÚSequence)ÚdatetimeÚ	timedeltaÚtimezone)ÚTYPE_CHECKINGÚAnyé   )Úapi_jws)	ÚDecodeErrorÚExpiredSignatureErrorÚImmatureSignatureErrorÚInvalidAudienceErrorÚInvalidIssuedAtErrorÚInvalidIssuerErrorÚInvalidJTIErrorÚInvalidSubjectErrorÚMissingRequiredClaimError)ÚRemovedInPyjwt3Warning)ÚAllowedPrivateKeysÚAllowedPublicKeys)ÚPyJWKc                   @  sü   e Zd ZdOdPdd„ZedQd	d
„ƒZ				dRdSdd„Z		dTdUdd„Z									dVdWd1d2„ZdXd4d5„Z										dVdYd6d7„Z
				dZd[d8d9„Zd\d:d;„ZdOd]d<d=„Zd]d>d?„Zd^dBdC„Zd^dDdE„Zd^dFdG„ZdHdIœd_dKdL„Zd`dMdN„ZdS )aÚ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/premium_crap/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ddg dœ	S )NT)	Úverify_signatureÚ
verify_expÚ
verify_nbfÚ
verify_iatÚ
verify_audÚ
verify_issÚ
verify_subÚ
verify_jtiÚrequirer"   r"   r"   r"   r#   r    #   s   ÷zPyJWT._get_default_optionsTÚpayloadúdict[str, Any]Úkeyú(AllowedPrivateKeys | PyJWK | 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)r5   r6   )r8   )Ú
isinstanceÚdictÚ	TypeErrorÚcopyÚgetr   r   ÚutctimetupleÚ_encode_payloadr   Úencode)	r!   r/   r1   r3   r5   r6   r8   Ú
time_claimÚjson_payloadr"   r"   r#   rE   1   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ÚdumpsrE   )r!   r/   r5   r6   r"   r"   r#   rD   W   s   ýüzPyJWT._encode_payloadÚ r   Újwtústr | bytesú'AllowedPublicKeys | PyJWK | str | bytesÚ
algorithmsúSequence[str] | NoneÚverifyúbool | NoneÚdetached_payloadúbytes | NoneÚaudienceústr | Iterable[str] | NoneÚissuerústr | Sequence[str] | NoneÚsubjectÚleewayúfloat | timedeltaÚkwargsr
   c                 K  s  |rt jdt| ¡ ƒ› �tdd� t|pi ƒ}| dd¡ |d ur/||d kr/t jdtdd� |d s]| dd	¡ | d
d	¡ | dd	¡ | dd	¡ | dd	¡ | dd	¡ | d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: é   ©Ú
stacklevelr&   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.)Úcategoryrc   r'   Fr(   r)   r*   r+   r,   r-   )r1   rS   r   rW   )rY   r[   r^   r]   r/   )ÚwarningsÚwarnÚtupleÚkeysr   r?   Ú
setdefaultÚDeprecationWarningr   Údecode_completeÚ_decode_payloadr   Ú_validate_claims)r!   rP   r1   rS   r   rU   rW   rY   r[   r]   r^   r`   Údecodedr/   Úmerged_optionsr"   r"   r#   rk   i   sV   
þûûû
ú	zPyJWT.decode_completern   c              
   C  sR   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)rM   ÚloadsÚ
ValueErrorr   r>   r?   )r!   rn   r/   Úer"   r"   r#   rl   ³   s   €ÿ
zPyJWT._decode_payloadc                 K  sH   |rt jdt| ¡ ƒ› �tdd� | j|||||||||	|
d�
}|d S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: ra   rb   )rU   rW   rY   r]   r[   r^   r/   )re   rf   rg   rh   r   rk   )r!   rP   r1   rS   r   rU   rW   rY   r]   r[   r^   r`   rn   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
 rn| j||| dd¡d� |d rx|  ||¡ |d rƒ|  |¡ d S d S )Nz+audience must be a string, iterable or None)Útzr<   r)   r=   r(   r;   r'   r+   r*   Ú
strict_audF©Ústrictr,   r-   )r>   r   Útotal_secondsr:   r   r@   Ú_validate_required_claimsr   Únowr   ÚutcÚ	timestampÚ_validate_iatÚ_validate_nbfÚ_validate_expÚ_validate_issÚ_validate_audrB   Ú_validate_subÚ_validate_jti)r!   r/   r   rY   r[   r]   r^   rz   r"   r"   r#   rm   ì   s.   
	ÿÿzPyJWT._validate_claimsc                 C  s(   |d D ]}|  |¡d u rt|ƒ‚qd S )Nr.   )rB   r   )r!   r/   r   Úclaimr"   r"   r#   ry     s
   ÿÿzPyJWT._validate_required_claimsc                 C  sH   d|vrdS t |d tƒstdƒ‚|dur | d¡|kr"tdƒ‚dS dS )zè
        Checks whether "sub" if in the payload is valid ot not.
        This is an Optional claim

        :param payload(dict): The payload which needs to be validated
        :param subject(str): The subject of the token
        ÚsubNzSubject must be a stringzInvalid subject)r>   r:   r   rB   )r!   r/   r]   r"   r"   r#   r‚     s   	þzPyJWT._validate_subc                 C  s(   d|vrdS t | d¡tƒstdƒ‚dS )z±
        Checks whether "jti" if in the payload is valid ot not
        This is an Optional claim

        :param payload(dict): The payload which needs to be validated
        ÚjtiNzJWT ID must be a string)r>   rB   r:   r   )r!   r/   r"   r"   r#   rƒ   2  s
   ÿzPyJWT._validate_jtirz   Úfloatc                 C  óB   zt |d ƒ}W n ty   tdƒd ‚w ||| krtdƒ‚d S )Nr<   z)Issued At claim (iat) must be an integer.z The token is not yet valid (iat))Úintrq   r   r   )r!   r/   rz   r^   r<   r"   r"   r#   r}   @  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‰   rq   r   r   )r!   r/   rz   r^   r=   r"   r"   r#   r~   O  s   
ÿÿzPyJWT._validate_nbfc                 C  sB   zt |d ƒ}W n ty   tdƒd ‚w ||| krtdƒ‚d S )Nr;   z/Expiration Time claim (exp) must be an integer.zSignature has expired)r‰   rq   r   r   )r!   r/   rz   r^   r;   r"   r"   r#   r   ]  s   ÿþÿÿzPyJWT._validate_expFrv   rw   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>   r:   )Ú.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�   œ  s   € zAudience doesn't match)r   r   r>   r:   ÚlistÚanyÚall)r!   r/   rY   rw   r"   rŽ   r#   r�   m  s4   




ÿzPyJWT._validate_audc                 C  sV   |d u rd S d|vrt dƒ‚t|tƒr|d |krtdƒ‚d S |d |vr)tdƒ‚d S )NÚisszInvalid issuer)r   r>   r:   r   )r!   r/   r[   r"   r"   r#   r€   Ÿ  s   
ÿÿzPyJWT._validate_issr   )r   r   r   r   )r   r%   )NNNT)r/   r0   r1   r2   r3   r4   r5   r   r6   r7   r8   r9   r   r:   )NN)r/   r0   r5   r   r6   r7   r   rH   )	rO   NNNNNNNr   )rP   rQ   r1   rR   rS   rT   r   r   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r4   r^   r_   r`   r
   r   r0   )rn   r0   r   r
   )rP   rQ   r1   rR   rS   rT   r   r   rU   rV   rW   rX   rY   rZ   r]   r4   r[   r\   r^   r_   r`   r
   r   r
   )NNNr   )
r/   r0   r   r0   r]   r4   r^   r_   r   r   )r/   r0   r   r0   r   r   )r/   r0   r   r   )r/   r0   rz   r‡   r^   r‡   r   r   )r/   r0   rY   rZ   rw   r9   r   r   )r/   r0   r[   r
   r   r   )Ú__name__Ú
__module__Ú__qualname__r$   Ústaticmethodr    rE   rD   rk   rl   rs   rm   ry   r‚   rƒ   r}   r~   r   r�   r€   r"   r"   r"   r#   r      s^    ù)üñ
Jñ-ù
*	



û2r   )&Ú
__future__r   rM   re   Úcalendarr   Úcollections.abcr   r   r   r   r   Útypingr	   r
   rO   r   Ú
exceptionsr   r   r   r   r   r   r   r   r   r   rS   r   r   Úapi_jwkr   r   Ú_jwt_global_objrE   rk   rs   r"   r"   r"   r#   Ú<module>   s*    ,   
