Ë
    ¬â°j1.  ã                  ó  — 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rddlmZmZ  G d„ d«      Z e«       Zej<                  Zej>                  Zej@                  Z y)é    )ÚannotationsN)Útimegm)ÚIterable)ÚdatetimeÚ	timedeltaÚtimezone)ÚTYPE_CHECKINGÚAnyé   )Úapi_jws)ÚDecodeErrorÚExpiredSignatureErrorÚImmatureSignatureErrorÚInvalidAudienceErrorÚInvalidIssuedAtErrorÚInvalidIssuerErrorÚMissingRequiredClaimError)ÚRemovedInPyjwt3Warning)ÚAllowedPrivateKeysÚAllowedPublicKeysc                  ó–  — e Zd Zddd„Zedd„«       Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Z		 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z
	 	 	 d	 	 	 	 	 	 	 dd	„Z	 	 	 	 	 	 dd
„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zd d„Zy)!ÚPyJWTNc                ó>   — |€i }i | j                  «       ¥|¥| _        y ©N)Ú_get_default_optionsÚoptions)Úselfr   s     ú-/usr/lib/python3/dist-packages/jwt/api_jwt.pyÚ__init__zPyJWT.__init__   s&   € Øˆ?ØˆGØ'Q¨$×*CÑ*CÓ*EÐ'QÈÐ'Qˆ�ó    c                 ó   — ddddddg dœS )NT)Úverify_signatureÚ
verify_expÚ
verify_nbfÚ
verify_iatÚ
verify_audÚ
verify_issÚrequire© r)   r    r   r   zPyJWT._get_default_options    s#   € ð !%ØØØØØØñ
ð 	
r    c                óB  — t        |t        «      st        d«      ‚|j                  «       }dD ]A  }t        |j	                  |«      t
        «      sŒ#t        ||   j                  «       «      ||<   ŒC | j                  |||¬«      }t        j                  ||||||¬«      S )NzGExpecting a dict object, as JWT only supports JSON objects as payloads.)ÚexpÚiatÚnbf)ÚheadersÚjson_encoder)Úsort_headers)Ú
isinstanceÚdictÚ	TypeErrorÚcopyÚgetr   r   ÚutctimetupleÚ_encode_payloadr   Úencode)	r   ÚpayloadÚkeyÚ	algorithmr.   r/   r0   Ú
time_claimÚjson_payloads	            r   r8   zPyJWT.encode,   s³   € ô ˜'¤4Ô(Üð,óð ð —,‘,“.ˆØ/ò 	QˆJä˜'Ÿ+™+ jÓ1´8Õ<Ü&,¨W°ZÑ-@×-MÑ-MÓ-OÓ&P�˜
Ò#ð	Qð
 ×+Ñ+ØØØ%ð ,ó 
ˆô �~‰~ØØØØØØ%ô
ð 	
r    c                óP   — t        j                  |d|¬«      j                  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Údumpsr8   )r   r9   r.   r/   s       r   r7   zPyJWT._encode_payloadR   s)   € ô �z‰zØØ!Øô
÷ ‰&�‹/ð		r    c
                óŒ  — |
r4t        j                  dt        |
j                  «       «      › �t        «       t        |xs i «      }|j                  dd«       |�#||d   k7  rt        j                  dt        ¬«       |d   sZ|j                  dd«       |j                  dd«       |j                  d	d«       |j                  d
d«       |j                  dd«       |d   r|st        d«      ‚t        j                  |||||¬«      }| j                  |«      }i | j                  ¥|¥}| j                  |||||	¬«       ||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:   Ú
algorithmsr   Údetached_payload)ÚaudienceÚissuerÚleewayr9   )ÚwarningsÚwarnÚtupleÚkeysr   r2   Ú
setdefaultÚDeprecationWarningr   r   Údecode_completeÚ_decode_payloadr   Ú_validate_claims)r   Újwtr:   rG   r   ÚverifyrH   rI   rJ   rK   ÚkwargsÚdecodedr9   Úmerged_optionss                 r   rR   zPyJWT.decode_completed   sk  € ñ$ Ü�M‰Mð'ä',¨V¯[©[«]Ó';Ð&<ð>ô 'ô	ô �w’} "Ó%ˆØ×ÑÐ-¨tÔ4ð
 Ð &¨GÐ4FÑ,GÒ"GÜ�M‰MðYô ,õ	ð Ð)Ò*Ø×Ñ˜|¨UÔ3Ø×Ñ˜|¨UÔ3Ø×Ñ˜|¨UÔ3Ø×Ñ˜|¨UÔ3Ø×Ñ˜|¨UÔ3àÐ%Ò&©zÜØnóð ô ×)Ñ)ØØØ!ØØ-ô
ˆð ×&Ñ& wÓ/ˆà4˜DŸL™LÐ4¨GÐ4ˆØ×ÑØ�^¨h¸vÈfð 	ô 	
ð %ˆ�	ÑØˆr    c                ó¬   — 	 t        j                  |d   «      }t	        |t
        «      st        d«      ‚|S # t        $ r}t        d|› �«      ‚d}~ww xY w)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.
        r9   zInvalid payload string: Nz-Invalid payload string: must be a json object)rC   ÚloadsÚ
ValueErrorr   r1   r2   )r   rX   r9   Úes       r   rS   zPyJWT._decode_payload©   s\   € ð	>Ü—j‘j ¨Ñ!3Ó4ˆGô ˜'¤4Ô(ÜÐMÓNÐNØˆøô	 ò 	>ÜÐ 8¸¸Ð<Ó=Ð=ûð	>ús   ‚7 ·	AÁ AÁAc
                ó¬   — |
r4t        j                  dt        |
j                  «       «      › �t        «       | j                  |||||||||	¬«	      }|d   S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: )rV   rH   rI   rJ   rK   r9   )rL   rM   rN   rO   r   rR   )r   rU   r:   rG   r   rV   rH   rI   rJ   rK   rW   rX   s               r   ÚdecodezPyJWT.decode¹   sr   € ñ$ Ü�M‰Mð'ä',¨V¯[©[«]Ó';Ð&<ð>ô 'ô	ð ×&Ñ&ØØØØØØ-ØØØð 'ó 

ˆð �yÑ!Ð!r    c                ó  — t        |t        «      r|j                  «       }|�!t        |t        t        f«      st        d«      ‚| j                  ||«       t        j                  t        j                  ¬«      j                  «       }d|v r|d   r| j                  |||«       d|v r|d   r| j                  |||«       d|v r|d   r| j                  |||«       |d	   r| j                  ||«       |d
   r| j!                  ||«       y y )Nz+audience must be a string, iterable or None)Útzr,   r%   r-   r$   r+   r#   r'   r&   )r1   r   Útotal_secondsÚstrr   r3   Ú_validate_required_claimsr   Únowr   ÚutcÚ	timestampÚ_validate_iatÚ_validate_nbfÚ_validate_expÚ_validate_issÚ_validate_aud)r   r9   r   rI   rJ   rK   re   s          r   rT   zPyJWT._validate_claimsß   sþ   € ô �fœiÔ(Ø×)Ñ)Ó+ˆFàÐ¬
°8¼cÄ8¸_Ô(MÜÐIÓJÐJà×&Ñ& w°Ô8ä�l‰lœhŸl™lÔ+×5Ñ5Ó7ˆà�GÑ ¨Ò 5Ø×Ñ˜w¨¨VÔ4à�GÑ ¨Ò 5Ø×Ñ˜w¨¨VÔ4à�GÑ ¨Ò 5Ø×Ñ˜w¨¨VÔ4à�<Ò Ø×Ñ˜w¨Ô/à�<Ò Ø×Ñ˜w¨Õ1ð !r    c                óP   — |d   D ]  }|j                  |«      �Œt        |«      ‚ y )Nr(   )r5   r   )r   r9   r   Úclaims       r   rd   zPyJWT._validate_required_claims   s2   € ð
 ˜YÑ'ò 	7ˆEØ�{‰{˜5Ó!Ñ)Ü/°Ó6Ð6ñ	7r    c                óx   — 	 t        |d   «      }|||z   kD  rt        d«      ‚y # t        $ r t        d«      ‚w xY w)Nr,   z)Issued At claim (iat) must be an integer.z The token is not yet valid (iat))Úintr\   r   r   )r   r9   re   rK   r,   s        r   rh   zPyJWT._validate_iat	  sT   € ð	TÜ�g˜e‘nÓ%ˆCð �#˜‘,ÒÜ(Ð)KÓLÐLð  øô ò 	TÜ&Ð'RÓSÐSð	Túó   ‚$ ¤9c                óx   — 	 t        |d   «      }|||z   kD  rt        d«      ‚y # t        $ r t        d«      ‚w xY w)Nr-   z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))rp   r\   r   r   )r   r9   re   rK   r-   s        r   ri   zPyJWT._validate_nbf  sT   € ð	LÜ�g˜e‘nÓ%ˆCð �#˜‘,ÒÜ(Ð)KÓLÐLð  øô ò 	LÜÐJÓKÐKð	Lúrq   c                óx   — 	 t        |d   «      }|||z
  k  rt        d«      ‚y # t        $ r t        d«      ‚w xY w)Nr+   z/Expiration Time claim (exp) must be an integer.zSignature has expired)rp   r\   r   r   )r   r9   re   rK   r+   s        r   rj   zPyJWT._validate_exp$  sT   € ð	TÜ�g˜e‘nÓ%ˆCð �3˜‘<Ò Ü'Ð(?Ó@Ð@ð !øô ò 	TÜÐRÓSÐSð	Túrq   c                ó`  ‡— |€d|vs|d   sy t        d«      ‚d|vs|d   st        d«      ‚|d   Št        ‰t        «      r‰gŠt        ‰t        «      st        d«      ‚t        d„ ‰D «       «      rt        d«      ‚t        |t        «      r|g}t        ˆfd„|D «       «      rt        d«      ‚y )NÚaudzInvalid audiencezInvalid claim format in tokenc              3  ó>   K  — | ]  }t        |t        «       –— Œ y ­wr   )r1   rc   )Ú.0Úcs     r   ú	<genexpr>z&PyJWT._validate_aud.<locals>.<genexpr>I  s   è ø€ Ò?¨!”:˜a¤Ó%Ô%Ñ?ùs   ‚c              3  ó&   •K  — | ]  }|‰v–— Œ
 y ­wr   r)   )rw   ru   Úaudience_claimss     €r   ry   z&PyJWT._validate_aud.<locals>.<genexpr>O  s   øè ø€ Ò>¨cˆs˜/Ô)Ñ>ùs   ƒzAudience doesn't match)r   r   r1   rc   ÚlistÚanyÚall)r   r9   rI   r{   s      @r   rl   zPyJWT._validate_aud2  sÀ   ø€ ð
 ÐØ˜GÑ#¨7°5ª>Øô 'Ð'9Ó:Ð:à˜Ñ w¨u¢~ô ,¨EÓ2Ð2à! %™.ˆä�o¤sÔ+Ø.Ð/ˆOÜ˜/¬4Ô0Ü&Ð'FÓGÐGÜÑ?¨Ô?Ô?Ü&Ð'FÓGÐGä�h¤Ô$Ø �zˆHäÓ>°XÔ>Ô>Ü&Ð'?Ó@Ð@ð ?r    c                óN   — |€y d|vrt        d«      ‚|d   |k7  rt        d«      ‚y )NÚisszInvalid issuer)r   r   )r   r9   rJ   s      r   rk   zPyJWT._validate_issR  s:   € Øˆ>Øà˜ÑÜ+¨EÓ2Ð2à�5‰>˜VÒ#Ü$Ð%5Ó6Ð6ð $r    r   )r   údict[str, Any] | NoneÚreturnÚNone)r‚   zdict[str, bool | list[str]])ÚHS256NNT)r9   údict[str, Any]r:   z AllowedPrivateKeys | str | bytesr;   ú
str | Noner.   r�   r/   útype[json.JSONEncoder] | Noner0   Úboolr‚   rc   )NN)r9   r…   r.   r�   r/   r‡   r‚   Úbytes)Ú NNNNNNr   )rU   ústr | bytesr:   úAllowedPublicKeys | str | bytesrG   úlist[str] | Noner   r�   rV   úbool | NonerH   úbytes | NonerI   ústr | Iterable[str] | NonerJ   r†   rK   úfloat | timedeltarW   r
   r‚   r…   )rX   r…   r‚   r
   )rU   r‹   r:   rŒ   rG   r�   r   r�   rV   rŽ   rH   r�   rI   r�   rJ   r†   rK   r‘   rW   r
   r‚   r
   )NNr   )r9   r…   r   r…   rK   r‘   r‚   rƒ   )r9   r…   r   r…   r‚   rƒ   )r9   r…   re   ÚfloatrK   r’   r‚   rƒ   )r9   r…   rI   r�   r‚   rƒ   )r9   r…   rJ   r
   r‚   rƒ   )Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr   r8   r7   rR   rS   r_   rT   rd   rh   ri   rj   rl   rk   r)   r    r   r   r      sç  „ ôRð
 ò	
ó ð	
ð !(Ø)-Ø6:Ø!ð$
àð$
ð .ð$
ð ð	$
ð
 'ð$
ð 4ð$
ð ð$
ð 
ó$
ðR *.Ø6:ð	àðð 'ðð 4ð	ð
 
óð* 02Ø'+Ø)-à"à)-ð 04Ø!Ø$%ðCàðCð -ðCð %ð	Cð
 'ðCð ðCð 'ðCð -ðCð ðCð "ðCð  ð!Cð" 
ó#CóJð& 02Ø'+Ø)-à"à)-ð 04Ø!Ø$%ð$"àð$"ð -ð$"ð %ð	$"ð
 'ð$"ð ð$"ð 'ð$"ð -ð$"ð ð$"ð "ð$"ð  ð!$"ð" 
ó#$"ðT ØØ$%ð2àð2ð  ð2ð "ð2ð 
ó2ðB7àð7ð  ð7ð 
ó	7ðMàðMð ðMð ð	Mð
 
óMðMàðMð ðMð ð	Mð
 
óMðAàðAð ðAð ð	Að
 
óAðAàðAð -ðAð 
ó	Aô@7r    r   )!Ú
__future__r   rC   rL   Úcalendarr   Úcollections.abcr   r   r   r   Útypingr	   r
   rŠ   r   Ú
exceptionsr   r   r   r   r   r   r   r   rG   r   r   r   Ú_jwt_global_objr8   rR   r_   r)   r    r   ú<module>r�      sq   ðÝ "ã Û Ý Ý $ß 2Ñ 2ß %å ÷÷ ñ õ -áßA÷@7ñ @7ñF
 “'€Ø	×	Ñ	€Ø!×1Ñ1€Ø	×	Ñ	�r    