B 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}|||_dS)N)_get_default_optionsoptions)selfrrAs8          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+rr#r")r2r total_secondsbytesstrtyperr3_validate_required_claimsrrutcnowr6 _validate_iat _validate_nbf _validate_exp _validate_iss _validate_aud)rr&raudienceissuerleewayrCnowrrrrBzs    zPyJWT._validate_claimscCs,x&|dD]}||dkr t|q WdS)Nr$)r5r)rr&rZclaimrrrrKszPyJWT._validate_required_claimscCs2yt|dWntk r,tdYnXdS)Nr,z)Issued At claim (iat) must be an integer.)intr@r)rr&rUrTrrrrMszPyJWT._validate_iatcCsFyt|d}Wntk r,tdYnX|||krBtddS)Nr-z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))rVr@rr)rr&rUrTr-rrrrNs  zPyJWT._validate_nbfcCsFyt|d}Wntk r,tdYnX|||krBtddS)Nr+z/Expiration Time claim (exp) must be an integer.zSignature has expired)rVr@rr)rr&rUrTr+rrrrOs  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 VqdS)N)r2rI).0crrr sz&PyJWT._validate_aud..c3s|]}|kVqdS)Nr)rXrW)audience_claimsrrrZs)rrr2rIlistany)rr&rRr)r[rrQs"   zPyJWT._validate_audcCs4|dkr dSd|krtd|d|kr0tddS)NZisszInvalid issuer)rr)rr&rSrrrrPs  zPyJWT._validate_iss)N)r%NN)r:NN)r:NN)NNr)__name__ __module__ __qualname__r staticmethodrrIr boolr rrr r r7 JSONEncoderr9r>rFrBrKrMrNrOrQrPrrrrrs, $"*   r)r7calendarrcollections.abcrrrrtypingrrr r r r r:r exceptionsrrrrrrrrZ_jwt_global_objr9r>rFrrrrs   $ I