ddddlZddlZddlmZddlmZmZmZm Z ddl m Z ddl m Z mZddlmZddlmZmZdd lmZGd d Zy) N) lru_cache)AnyDictListOptional)URLError)PyJWKPyJWKSet)decode_complete)PyJWKClientConnectionErrorPyJWKClientError) JWKSetCacheceZdZ ddedededededeeeefdefd Z d efd Z dd ed e fd Z dd ed e efdZded efdZded efdZede eded eefdZy) PyJWKClientNuri cache_keysmax_cached_keys cache_jwk_setlifespanheaderstimeoutc|i}||_d|_||_||_|r%|dkrt d|dt ||_nd|_|r"t ||j|_yy)Nrz/Lifespan must be greater than 0, the input is "")maxsize)r jwk_set_cacherrrrrget_signing_key)selfrrrrrrrs 1/usr/lib/python3/dist-packages/jwt/jwks_client.py__init__zPyJWKClient.__init__s ?G48  1}&EhZqQ"-X!6D !%D  $F9_#EdFZFZ#[D  returncd} tjj|j|j}tjj ||j 5}tj|}ddd||j|jj|SS#1swY3xYw#ttf$r}td|dd}~wwxYw#|j|jj|wwxYw)N)urlr)rz'Fail to fetch data from the url, err: "r)urllibrequestRequestrrurlopenrjsonloadrputr TimeoutErrorr )rjwk_setrresponsees r fetch_datazPyJWKClient.fetch_data/s 0&&488T\\&JA''4<<'@ .H))H- .!!-""&&w/. . .,' ,9!A>  !!-""&&w/.sBA B8$B,:B8C,B51B88CCCC*Drefreshcd}|j|s|jj}||j}t|ts t dt j|S)Nz.The JWKS endpoint did not return a JSON object)rgetr1 isinstancedictrr from_dict)rr2datas r get_jwk_setzPyJWKClient.get_jwk_set?sa    )'%%))+D <??$D$%"#ST T!!$''r!c|j|}|jDcgc]}|jdvr|jr| }}|s t d|Scc}w)N)sigNz2The JWKS endpoint did not contain any signing keys)r9keyspublic_key_usekey_idr)rr2r- jwk_set_key signing_keyss rget_signing_keyszPyJWKClient.get_signing_keysLsg""7+ '|| ))]:{?Q?Q   "#WX X s#Akidc|j}|j||}|s5|jd}|j||}|std|d|S)NT)r2z,Unable to find a signing key that matches: "r)rA match_kidr)rrBr@ signing_keys rrzPyJWKClient.get_signing_keyYsj,,. nn\37 000>L..s;K&B3%qIr!tokencjt|ddi}|d}|j|jdS)Nverify_signatureF)optionsheaderrB) decode_tokenrr4)rrF unverifiedrJs rget_signing_key_from_jwtz$PyJWKClient.get_signing_key_from_jwtis8!%2De1LM H%##FJJu$566r!r@c@d}|D]}|j|k(s|}|S|S)N)r>)r@rBrEkeys rrDzPyJWKClient.match_kidns8  CzzS !    r!)FTi,N)F)__name__ __module__ __qualname__strboolintrrrr r1r r9rr rArrM staticmethodrDr!rrr s!!",0\ \\ \  \  \$sCx.)\\B0C0 (4 (H (  e 35 7c7e7 U #(5/r!r)r)urllib.requestr% functoolsrtypingrrrr urllib.errorrapi_jwkr r api_jwtr rK exceptionsr rrrrrYr!rras/ ,,!$4D&jjr!