U âQab-!ã @s¼ddlZddlZddlZddlZddlZddlmZmZmZm Z ddl m Z m Z z ddl Z Wnek rtdZ YnXdddddgZd  ¡ ¡ZzejjZejZWnek r¾eZZYnXe dk oÒeeefkZzdd l mZmZWnRek �r:zdd lmZdd lmZWnek �r4dZdZYnXYnXe�sRGd d„deƒZe�sjddd„Zdd„ZGdd„deƒZGdd„deƒZd dd„Z dd„Z!e!dd„ƒZ"dd„Z#dd„Z$dS)!éN)ÚurllibÚ http_clientÚmapÚfilter)ÚResolutionErrorÚExtractionErrorÚVerifyingHTTPSHandlerÚfind_ca_bundleÚ is_availableÚ cert_pathsÚ opener_fora /etc/pki/tls/certs/ca-bundle.crt /etc/ssl/certs/ca-certificates.crt /usr/share/ssl/certs/ca-bundle.crt /usr/local/share/certs/ca-root.crt /etc/ssl/cert.pem /System/Library/OpenSSL/certs/cert.pem /usr/local/share/certs/ca-root-nss.crt /etc/ssl/ca-bundle.pem )ÚCertificateErrorÚmatch_hostname)r )rc@s eZdZdS)r N)Ú__name__Ú __module__Ú __qualname__©rrú:/usr/lib/python3.8/site-packages/setuptools/ssl_support.pyr 5sr éc Csòg}|s dS| d¡}|d}|dd…}| d¡}||krLtdt|ƒƒ‚|s`| ¡| ¡kS|dkrt| d¡n>| d ¡sˆ| d ¡rš| t |¡¡n| t |¡  d d ¡¡|D]}| t |¡¡q¶t  d d   |¡dtj ¡} |   |¡S)zqMatching according to RFC 6125, section 6.4.3 https://tools.ietf.org/html/rfc6125#section-6.4.3 FÚ.rrNÚ*z,too many wildcards in certificate DNS name: z[^.]+zxn--z\*z[^.]*z\Az\.z\Z)ÚsplitÚcountr ÚreprÚlowerÚappendÚ startswithÚreÚescapeÚreplaceÚcompileÚjoinÚ IGNORECASEÚmatch) ZdnÚhostnameZ max_wildcardsZpatsÚpartsZleftmostZ remainderZ wildcardsZfragZpatrrrÚ_dnsname_match;s,    ÿ r&cCsì|s tdƒ‚g}| dd¡}|D]*\}}|dkr t||ƒr@dS| |¡q |s”| dd¡D]6}|D],\}}|dkrdt||ƒr†dS| |¡qdq\t|ƒdkr¾td |d  tt|ƒ¡fƒ‚n*t|ƒdkràtd ||d fƒ‚ntd ƒ‚dS)a=Verify that *cert* (in decoded format as returned by SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 rules are followed, but IP addresses are not accepted for *hostname*. CertificateError is raised on failure. On success, the function returns nothing. zempty or no certificateZsubjectAltNamerZDNSNZsubjectZ commonNamerz&hostname %r doesn't match either of %sz, zhostname %r doesn't match %rrz=no appropriate commonName or subjectAltName fields were found) Ú ValueErrorÚgetr&rÚlenr r!rr)Zcertr$ZdnsnamesZsanÚkeyÚvalueÚsubrrrros2       þ  þrc@s eZdZdZdd„Zdd„ZdS)rz=Simple verifying handler: no auth, subclasses, timeouts, etc.cCs||_t |¡dS©N)Ú ca_bundleÚ HTTPSHandlerÚ__init__)Úselfr.rrrr0›szVerifyingHTTPSHandler.__init__csˆ ‡fdd„|¡S)Ncst|ˆjf|ŽSr-)ÚVerifyingHTTPSConnr.)ÚhostÚkw©r1rrÚ¡óz2VerifyingHTTPSHandler.https_open..)Zdo_open)r1Zreqrr5rÚ https_openŸs ÿz VerifyingHTTPSHandler.https_openN)rrrÚ__doc__r0r8rrrrr˜sc@s eZdZdZdd„Zdd„ZdS)r2z@Simple verifying connection: no auth, subclasses, timeouts, etc.cKstj||f|Ž||_dSr-)ÚHTTPSConnectionr0r.)r1r3r.r4rrrr0¨szVerifyingHTTPSConn.__init__cCsÖt |j|jft|ddƒ¡}t|dƒrHt|ddƒrH||_| ¡|j}n|j}tt dƒrxt j |j d�}|j ||d�|_nt j |t j |j d�|_zt|j ¡|ƒWn.tk rÐ|j tj¡|j ¡‚YnXdS)NZsource_addressÚ_tunnelÚ _tunnel_hostÚcreate_default_context)Zcafile)Zserver_hostname)Z cert_reqsZca_certs)ÚsocketZcreate_connectionr3ZportÚgetattrÚhasattrÚsockr;r<Ússlr=r.Z wrap_socketZ CERT_REQUIREDrZ getpeercertr ZshutdownZ SHUT_RDWRÚclose)r1rAZ actual_hostZctxrrrÚconnect¬s. ÿ ÿ zVerifyingHTTPSConn.connectN)rrrr9r0rDrrrrr2¥sr2cCstj t|ptƒƒ¡jS)z@Get a urlopen() replacement that uses ca_bundle for verification)rÚrequestZ build_openerrr Úopen)r.rrrr Ís ÿcst ˆ¡‡fdd„ƒ}|S)Ncstˆdƒsˆ||Žˆ_ˆjS)NÚalways_returns)r@rG)ÚargsÚkwargs©ÚfuncrrÚwrapperÖs  zonce..wrapper)Ú functoolsÚwraps)rKrLrrJrÚonceÕsrOcsZz ddl}Wntk r"YdSXG‡fdd„d|jƒ‰ˆƒ}| d¡| d¡|jS)Nrcs,eZdZ‡‡fdd„Z‡‡fdd„Z‡ZS)z"get_win_certfile..CertFilecstˆ|ƒ ¡t |j¡dSr-)Úsuperr0ÚatexitÚregisterrCr5©ÚCertFileÚ __class__rrr0æsz+get_win_certfile..CertFile.__init__cs,ztˆ|ƒ ¡Wntk r&YnXdSr-)rPrCÚOSErrorr5rSrrrCêsz(get_win_certfile..CertFile.close)rrrr0rCÚ __classcell__r©rT)rUrrTåsrTZCAZROOT)Ú wincertstoreÚ ImportErrorrTZaddstoreÚname)rYZ _wincertsrrXrÚget_win_certfileÞs    r\cCs$ttjjtƒ}tƒp"t|dƒp"tƒS)z*Return an existing CA bundle path, or NoneN)rÚosÚpathÚisfiler r\ÚnextÚ_certifi_where)Zextant_cert_pathsrrrr ös ÿýc Cs.ztdƒ ¡WStttfk r(YnXdS)NZcertifi)Ú __import__ÚwhererZrrrrrrrasra)r)N)%r]r>rQrrMZsetuptools.extern.six.movesrrrrZ pkg_resourcesrrrBrZÚ__all__Ústriprr rEr/r:ÚAttributeErrorÚobjectr r rZbackports.ssl_match_hostnamer'r&rr2r rOr\r rarrrrÚsZ  þ    4) (