o
    tBh                     @   s   d dl Z d dlmZ d dlmZmZ d dlmZmZ d dlm	Z	m
Z
mZ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 G d	d
 d
Ze ZejZejZejZdS )    N)timegm)IterableMapping)datetime	timedelta)AnyDictListOptionalTypeUnion   )api_jws)DecodeErrorExpiredSignatureErrorImmatureSignatureErrorInvalidAudienceErrorInvalidIssuedAtErrorInvalidIssuerErrorMissingRequiredClaimErrorc                   @   s  e Zd Zd&ddZedeeeee	e f f fddZ
			d'deeef d	ed
edee deeej  defddZ			d(ded	ede	e dedeeef f
ddZ			d(ded	ede	e dedeeef f
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dS )*PyJWTNc                 C   s"   |d u ri }i |   || _d S N)_get_default_optionsoptions)selfr    r   b/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/jwt/api_jwt.py__init__   s   zPyJWT.__init__returnc                   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HS256payloadkey	algorithmheadersjson_encoderc                 C   sp   t |ts	td| }dD ]}t ||tr#t||  ||< qtj	|d|d
d}t
|||||S )NzJExpecting a mapping object, as JWT only supports JSON objects as payloads.)expiatnbf),:)
separatorsclszutf-8)
isinstancer   	TypeErrorcopygetr   r   utctimetuplejsondumpsencoder   )r   r'   r(   r)   r*   r+   
time_claimjson_payloadr   r   r   r:   %   s   
	zPyJWT.encode jwt
algorithmsr   c           
   
   K   s  |d u r	ddi}n| dd |d s1| dd | dd | dd | dd | dd |d r;|s;td	tj|f|||d
|}z	t|d }W n tyc } ztd| d }~ww t|tsmtdi | j	|}	| j
||	fi | ||d< |S )Nr   Tr    Fr!   r"   r#   r$   z\It is required that you pass in a value for the "algorithms" argument when calling decode().)r(   r?   r   r'   zInvalid payload string: %sz-Invalid payload string: must be a json object)
setdefaultr   r   decode_completer8   loads
ValueErrorr3   dictr   _validate_claims)
r   r>   r(   r?   r   kwargsdecodedr'   emerged_optionsr   r   r   rA   A   sD   

zPyJWT.decode_completec                 K   s    | j ||||fi |}|d S )Nr'   )rA   )r   r>   r(   r?   r   rF   rG   r   r   r   decodeo   s   zPyJWT.decoder   c                 K   s   t |tr	| }t |tttd tfstd| || t	t
  }d|v r5|d r5| ||| d|v rD|d rD| ||| d|v rS|d rS| ||| |d r]| || |d	 ri| || d S d S )
Nz,audience must be a string, iterable, or Noner-   r"   r.   r!   r,   r    r$   r#   )r3   r   total_secondsbytesstrtyper   r4   _validate_required_claimsr   r   utcnowr7   _validate_iat_validate_nbf_validate_exp_validate_iss_validate_aud)r   r'   r   audienceissuerleewayrF   nowr   r   r   rE   z   s"   
zPyJWT._validate_claimsc                 C   s(   |d D ]}| |d u rt|qd S )Nr%   )r6   r   )r   r'   r   claimr   r   r   rO      s
   zPyJWT._validate_required_claimsc                 C   s*   z	t |d  W d S  ty   tdw )Nr-   z)Issued At claim (iat) must be an integer.)intrC   r   )r   r'   rY   rX   r   r   r   rQ      s
   zPyJWT._validate_iatc                 C   s@   zt |d }W n ty   tdw ||| krtdd S )Nr.   z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))r[   rC   r   r   )r   r'   rY   rX   r.   r   r   r   rR         zPyJWT._validate_nbfc                 C   s@   zt |d }W n ty   tdw ||| k rtdd S )Nr,   z/Expiration Time claim (exp) must be an integer.zSignature has expired)r[   rC   r   r   )r   r'   rY   rX   r,   r   r   r   rS      r\   zPyJWT._validate_expc                    s   |d u r
d|vr
d S |d urd|vrt d|d u r"d|v r"td|d  t tr. g t ts7tdtdd  D rDtdt|trL|g}t fdd|D s[tdd S )NaudzInvalid audiencezInvalid claim format in tokenc                 s   s    | ]	}t |t V  qd S r   )r3   rM   ).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    )r   r   r3   rM   listany)r   r'   rV   r   ra   r   rU      s$   


zPyJWT._validate_audc                 C   s4   |d u rd S d|vrt d|d |krtdd S )NisszInvalid issuer)r   r   )r   r'   rW   r   r   r   rT      s   zPyJWT._validate_issr   )r&   NN)r=   NN)NNr   )__name__
__module____qualname__r   staticmethodr   rM   r   boolr	   r   r   r
   r   r8   JSONEncoderr:   rA   rJ   rE   rO   rQ   rR   rS   rU   rT   r   r   r   r   r      sp    
$



1


		r   )r8   calendarr   collections.abcr   r   r   r   typingr   r   r	   r
   r   r   r=   r   
exceptionsr   r   r   r   r   r   r   r   _jwt_global_objr:   rA   rJ   r   r   r   r   <module>   s     $ I
