dbfdg 3 kZ@sddlZddlZddlmZddlmZmZddlmZmZddl m Z ddl m Z m Z ddlmZdd lmZmZmZmZmZmZmZdd lmZGd d d e ZeZejZejZejZejZej Z dS) N)timegm)IterableMapping)datetime timedelta)PyJWS) Algorithmget_default_algorithms) string_types) DecodeErrorExpiredSignatureErrorImmatureSignatureErrorInvalidAudienceErrorInvalidIssuedAtErrorInvalidIssuerErrorMissingRequiredClaimError) merge_dictcsveZdZdZeddZdfdd Zdfd d Zdd dZddZ ddZ ddZ ddZ ddZ ddZZS)PyJWTZJWTc Csdddddddddd S)NTF) verify_signature verify_exp verify_nbf verify_iat verify_aud verify_iss require_exp require_iat require_nbfrrr/usr/lib/python3.6/api_jwt.py_get_default_optionsszPyJWT._get_default_optionsHS256Ncsrt|tstdx0d D](}t|j|trt||j||<qWtj|d |dj d}t t |j |||||S) NzJExpecting a mapping object, as JWT only supports JSON objects as payloads.expiatnbf,:)Z separatorsclszutf-8)r"r#r$)r%r&) isinstancer TypeErrorgetrr utctimetuplejsondumpsencodesuperr)selfpayloadkey algorithmZheadersZ json_encoderZ time_claimZ json_payload) __class__rrr.#s   z PyJWT.encodeTc s|r| rtjd t|j|\}}} } |dkr:d|i}n |jd|tt|j|f|||d|} ytj | jd}Wn.t k r} zt d| WYdd} ~ XnXt |t st d|rt|j|} |j|| f||S) Nz.It is strongly recommended that you pass in a z;value for the "algorithms" argument when calling decode(). z4This argument will be mandatory in a future version.r)r2 algorithmsoptionszutf-8zInvalid payload string: %sz-Invalid payload string: must be a json objectziIt is strongly recommended that you pass in a value for the "algorithms" argument when calling decode(). zIt is strongly recommended that you pass in a value for the "algorithms" argument when calling decode(). This argument will be mandatory in a future version.)warningswarnDeprecationWarning_load setdefaultr/rdecoder,loads ValueErrorr r(rrr7_validate_claims)r0Zjwtr2Zverifyr6r7kwargsr1Z signing_inputheaderZ signatureZdecodedeZmerged_options)r4rrr=:s*      z PyJWT.decodercKsd|kr$|jdd|d<tjdtt|tr6|j}t|ttdt fsRt d|j ||t t jj}d|kr|jdr|j|||d|kr|jd r|j|||d |kr|jdr|j||||jd r|j|||jd r|j||dS) NZverify_expirationTrzXThe verify_expiration parameter is deprecated. Please use verify_exp in options instead.z,audience must be a string, iterable, or Noner#rr$rr"rr)r*r8r9r:r(rZ total_secondsr typerr)_validate_required_claimsrrZutcnowr+ _validate_iat _validate_nbf _validate_exp _validate_iss _validate_aud)r0r1r7audienceissuerleewayrAnowrrrr@]s(     zPyJWT._validate_claimscCsd|jdr |jddkr td|jdr@|jddkr@td|jdr`|jddkr`tddS)Nrr"rr#rr$)r*r)r0r1r7rrrrEs zPyJWT._validate_required_claimsc Cs2yt|dWntk r,tdYnXdS)Nr#z)Issued At claim (iat) must be an integer.)intr?r)r0r1rNrMrrrrFszPyJWT._validate_iatc CsFyt|d}Wntk r,tdYnX|||krBtddS)Nr$z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))rOr?r r)r0r1rNrMr$rrrrGs  zPyJWT._validate_nbfc CsFyt|d}Wntk r,tdYnX|||krBtddS)Nr"z/Expiration Time claim (exp) must be an integer.zSignature has expired)rOr?r r )r0r1rNrMr"rrrrHs  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)r(r ).0crrr sz&PyJWT._validate_aud..c3s|]}|kVqdS)Nr)rQrP)audience_claimsrrrSs)rrr(r listany)r0r1rKr)rTrrJs"   zPyJWT._validate_audcCs4|dkr dSd|krtd|d|kr0tddS)NZisszInvalid issuer)rr)r0r1rLrrrrIs  zPyJWT._validate_iss)r!NN)r5TNN)NNr)__name__ __module__ __qualname__Z header_type staticmethodr r.r=r@rErFrGrHrJrI __classcell__rr)r4rrs # !   r)!r,r8Zcalendarr collectionsrrrrZapi_jwsrr6r r compatr exceptionsr r rrrrrZutilsrrZ_jwt_global_objr.r=Zregister_algorithmZunregister_algorithmZget_unverified_headerrrrrs"   $ 9