U E`@sddlZddlmZddlmZmZddlmZmZddlm Z m Z m Z m Z m Z mZddlmZddlmZmZmZmZmZmZmZGd d d ZeZejZejZejZdS) N)timegm)IterableMapping)datetime timedelta)AnyDictListOptionalTypeUnion)api_jws) DecodeErrorExpiredSignatureErrorImmatureSignatureErrorInvalidAudienceErrorInvalidIssuedAtErrorInvalidIssuerErrorMissingRequiredClaimErrorc@seZdZd ddZeeeeee effdddZ d!eee feee ee e ejedd d Zd"eee eeeee fd d dZd#eee eeeee fd ddZd$ddZddZddZddZddZddZddZdS)%PyJWTNcCs|dkr i}|||_dSN)_get_default_optionsoptions)selfrrAs@          zPyJWT.decode_completecKs|j||||f|}|dS)Nr')r>)rr;r(r<rrCrDrrrdecodeosz PyJWT.decodercKst|tr|}t|tttdtfs0td|||t t }d|krj|drj| |||d|kr|dr||||d|kr|dr|||||dr||||d r|||dS) Nz,audience must be a string, iterable, or Noner-r"r.r!r,r r$r#)r2rZ total_secondsbytesstrtyperr3_validate_required_claimsrrZutcnowr6 _validate_iat _validate_nbf _validate_exp _validate_iss _validate_aud)rr'raudienceissuerleewayrCnowrrrrBzs    zPyJWT._validate_claimscCs(|dD]}||dkrt|qdS)Nr%)r5r)rr'rZclaimrrrrJs zPyJWT._validate_required_claimscCs2zt|dWntk r,tdYnXdS)Nr-z)Issued At claim (iat) must be an integer.)intr@r)rr'rSrRrrrrKszPyJWT._validate_iatcCsFzt|d}Wntk r,tdYnX|||krBtddS)Nr.z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))rTr@rr)rr'rSrRr.rrrrLs  zPyJWT._validate_nbfcCsFzt|d}Wntk r,tdYnX|||krBtddS)Nr,z/Expiration Time claim (exp) must be an integer.zSignature has expired)rTr@rr)rr'rSrRr,rrrrMs  zPyJWT._validate_expcs|dkrd|krdS|dk r,d|kr,td|dkrDd|krDtd|dttr\gttsntdtddDrtdt|tr|g}tfdd|DstddS)NaudzInvalid audiencezInvalid claim format in tokencss|]}t|t VqdSr)r2rH).0crrr sz&PyJWT._validate_aud..c3s|]}|kVqdSrr)rVrUZaudience_claimsrrrXs)rrr2rHlistany)rr'rPrrYrrOs"   zPyJWT._validate_audcCs4|dkr dSd|krtd|d|kr0tddS)NZisszInvalid issuer)rr)rr'rQrrrrNs  zPyJWT._validate_iss)N)r&NN)r:NN)r:NN)NNr)__name__ __module__ __qualname__r staticmethodrrHr boolr rrr r r7Z JSONEncoderr9r>rFrBrJrKrLrMrOrNrrrrrsX $    1   r)r7ZcalendarrZcollections.abcrrrrtypingrrr r r r r:r exceptionsrrrrrrrrZ_jwt_global_objr9r>rFrrrrs   $ I