a  ze#,@sgdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl mZdZdaddZee jjZdZdd Zd Zd d Zgd ZgdZgZeD]ZeeqddddZ deddZ!dddddZ"e#dej$Z%ddZ&ddZ'e#dej$Z(e#dej)ej$BZ*e#dej+ej$BZ,ddZ-e#dej+ej$BZ.dd Z/d!d"Z0e#d#Z1e#d$Z2e#d%Z3e#d&Z4d'd(Z5e#d)Z6d*d+Z7d,d-Z8d.d/Z9e#d0ej$Z:d1d2Z;d3d4Ze#d9ej$Z?d:d;Z@dd?ZBd@dAZCdBZDe#dCZEdDdEZFdFdGZGdHdIZHdJdKZIGdLdMdMZJGdNdOdOZKGdPdQdQeKZLdRdSZMdTdUZNGdVdWdWZOGdXdYdYZPGdZd[d[eQZRGd\d]d]ePZSd^d_ZTGd`dadaeSZUGdbdcdceSZVdS)f)Cookie CookieJar CookiePolicyDefaultCookiePolicy FileCookieJar LWPCookieJar LoadErrorMozillaCookieJarN)timegmFcGs(tsdStsddl}|datj|S)Nr zhttp.cookiejar)debugloggerlogging getLogger)argsr rB/opt/bitninja-python-dojo/embedded/lib/python3.9/http/cookiejar.py_debug,s  rzQa filename was not supplied (nor was the CookieJar instance initialised with one)cCsJddl}ddl}ddl}|}|d||}|jd|dddS)Nr zhttp.cookiejar bug! %s) stacklevel)iowarnings tracebackStringIO print_excgetvaluewarn)rrrfmsgrrr_warn_unhandled_exception:s  ricCs|dd\}}}}}}|tkrd|kr4dkrnnhd|krLdkrnnPd|krddkrnn8d|kr|dkrnn d|krdkrnnt|SdSdS) N r ;=) EPOCH_YEARr )ttyearmonthZmdayhourminsecrrr_timegmIs 8   r-)ZMonZTueZWedZThuZFriZSatZSun) ZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs@|durtj}n tj|}d|j|j|j|j|j|jfS)Nz%04d-%02d-%02d %02d:%02d:%02dZ) datetimeutcnowutcfromtimestampr(r)dayr*minutesecondtZdtrrr time2isozWs   r6cCsR|durtj}n tj|}dt||jt|jd|j|j |j |j fS)Nz#%s, %02d-%s-%04d %02d:%02d:%02d GMTr ) r.r/r0DAYSZweekdayr1MONTHSr)r(r*r2r3r4rrr time2netscapejs   r9)ZGMTUTCZUTZz^([-+])?(\d\d?):?(\d\d)?$cCsjd}|tvrd}nTt|}|rfdt|d}|drR|dt|d}|ddkrf| }|S)Nr ir<r -) UTC_ZONES TIMEZONE_REsearchintgroup)tzoffsetmrrroffset_from_tz_strings  rGc Cst|}|tjkrdSzt|d}WnZtyz t|}Wnty\YYdS0d|krrdkr|nn|}nYdSYn0|durd}|durd}|durd}t|}t|}t|}t|}|dkr2ttd}|d} |} ||| }| | } t | dkr2| dkr*|d}n|d}t |||||||f} | dur|dur`d}| }t |} | dur~dS| | } | S)Nr r!r id2r:) rBr.ZMAXYEAR MONTHS_LOWERindexlower ValueErrortime localtimeabsr-upperrG) r1monyrhrr+r,rDZimonZcur_yrrFtmpr5rErrr _str2timesN              rVzV^[SMTWF][a-z][a-z], (\d\d) ([JFMASOND][a-z][a-z]) (\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$z+^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*a^ (\d\d?) # day (?:\s+|[-\/]) (\w+) # month (?:\s+|[-\/]) (\d+) # year (?: (?:\s+|:) # separator before clock (\d\d?):(\d\d) # hour:min (?::(\d\d))? # optional seconds )? # optional clock \s* (?: ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+) # timezone \s* )? (?: \(\w+\) # ASCII representation of timezone in parens. \s* )?$c Cst|}|rl|}t|dd}t|d|t|dt|dt|dt|df}t|S| }t d|d}dgd\}}}}}} } t |}|dur|\}}}}}} } ndSt |||||| | S) Nr rr r<)STRICT_DATE_RErAgroupsrJrKrLrBfloatr-lstrip WEEKDAY_REsubLOOSE_HTTP_DATE_RErV) textrFgrRr'r1rSrTr+r,rDrrr http2times   rda^ (\d{4}) # year [-\/]? (\d\d?) # numerical month [-\/]? (\d\d?) # day (?: (?:\s+|[-:Tt]) # separator before clock (\d\d?):?(\d\d) # hour:min (?::?(\d\d(?:\.\d*)?))? # optional seconds (and fractional) )? # optional clock \s* (?: ([-+]?\d\d?:?(:?\d\d)? |Z|z) # timezone (Z is "zero meridian", i.e. GMT) \s* )?$c Csd|}dgd\}}}}}}}t|}|durL|\}}}}}}}} ndSt|||||||S)NrZ)r^ ISO_DATE_RErAr\rV) rbr1rRrSrTr+r,rDrF_rrriso2time+s  rgcCs*|d\}}|jd||j|dS)Nr )spanstring)matchstartendrrr unmatchedLsrmz^\s*([^=\s;,]+)z&^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"z^\s*=\s*([^\s;,]*)z\\(.)c Csg}|D]}|}g}|rt|}|rt|}|d}t|}|rft|}|d}td|}n.t|}|rt|}|d}|}nd}| ||fq| dr| dd}|r| |g}qt dd|\}} |}q|r| |q|S)Nr z\1,z^[=\s;]*rY)HEADER_TOKEN_RErArmrCHEADER_QUOTED_VALUE_REHEADER_ESCAPE_REr`HEADER_VALUE_RErstripappendr^ startswithresubn) Z header_valuesresultrbZ orig_textpairsrFnamevalueZnon_junkZ nr_junk_charsrrrsplit_header_wordsUs:.       r|([\"\\])cCs|g}|D]h}g}|D]F\}}|durPtd|sDtd|}d|}d||f}||q|r|d|qd|S)Nz^\w+$\\\1z"%s"%s=%s; , )rvrAHEADER_JOIN_ESCAPE_REr`rtjoin)Zlistsheadersryattrkvrrrjoin_header_wordss      rcCs0|dr|dd}|dr,|dd}|S)N"r )ruendswithrbrrr strip_quotess     rc Csd}g}|D]}g}d}t|dD]\}}|}|d\}} } |}|sb|dkr&qnq&| rn| nd} |dkr|} | |vr| }|dkr| durt| } d}n|dkr| durtt| } ||| fq&|r |s|d ||q |S) N)expiresdomainpathsecureversionportmax-ageF;=r rTr)r0) enumeratesplitstrip partitionrLrrdrt) Z ns_headersZ known_attrsrxZ ns_headerry version_setiiZparamkeysepvallcrrrparse_ns_headerss>   rz\.\d+$cCs:t|rdS|dkrdS|ddks2|ddkr6dSdS)NFrYr .rTIPV4_RErArrrris_HDNs rcCsl|}|}||krdSt|s(dS||}|dksB|dkrFdS|dsTdSt|ddshdSdS)NTFrr rr )rLrrfindru)ABirrr domain_matchs  rcCst|rdSdSNFTrrrrrliberal_is_HDNFs rcCs`|}|}t|r t|s0||kr,dSdS|d}|rL||rLdS|s\||kr\dSdS)NTFr)rLrrur)rr initial_dotrrruser_domain_matchPs  rz:\d+$cCsB|}tj|d}|dkr,|dd}td|d}|S)Nr rYZHost) get_full_urlurllibparseurlparseZ get_header cut_port_rer`rL)requesturlhostrrr request_hostes  rcCs4t|}}|ddkr,t|s,|d}||fS)Nrr.local)rfindrrA)rerhnreq_hostrrreff_request_hostus rcCs4|}tj|}t|j}|ds0d|}|S)N/)rrrurlsplit escape_pathrru)rrpartsrrrr request_paths    rcCs^|j}|d}|dkrV||dd}z t|WqZtyRtd|YdS0nt}|S)N:r r znonnumeric port: '%s')rrrBrMrDEFAULT_HTTP_PORT)rrrrrrr request_ports     rz%/;:@&=+$,!~*'()z%([0-9a-fA-F][0-9a-fA-F])cCsd|dS)Nz%%%sr )rCrQ)rjrrruppercase_escaped_charsrcCstj|t}tt|}|SN)rrquoteHTTP_PATH_SAFEESCAPED_CHAR_REr`r)rrrrrs  rcCsP|d}|dkrL||dd}|d}t|rL|dksD|dkrLd|S|S)Nrr r local)rr)hrbrrrreachs  rcCs$t|}t|t|jsdSdSdSNTF)rrrZorigin_req_host)rrrrris_third_partys rc@sJeZdZdddZddZdddZd d Zdd d Zd dZddZ dS)rFcCs|durt|}| dur$tt| } |dur<|dur)rrrr{rz)rplimitZ namevaluerrr__str__)s  zCookie.__str__cCslg}dD]$}t||}|d|t|fq|dt|j|dt|jd|jjd|fS)N)rrzr{rrrrrrrrrrrrrzrest=%sz rfc2109=%sz%s(%s)r)getattrrtreprrr __class____name__r)rrrzrrrr__repr__3s zCookie.__repr__)F)N)N) r __module__ __qualname__rrrrrrrrrrrrs *   rc@s,eZdZddZddZddZddZd S) rcCs tdSrNotImplementedErrorrcookierrrrset_okKszCookiePolicy.set_okcCs tdSrrrrrr return_okTszCookiePolicy.return_okcCsdSNTr)rrrrrrdomain_return_okXszCookiePolicy.domain_return_okcCsdSrr)rrrrrrpath_return_ok]szCookiePolicy.path_return_okN)rrrrrrrrrrrrBs  rc @seZdZdZdZdZdZeeBZdddddddddedddf d d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6ZdS)7rr rrWr NTF)httpswsscCsv||_||_||_||_||_||_| |_| |_| |_| |_ | |_ |durVt ||_ nd|_ |durlt |}||_ dS)Nr)netscaperfc2965rfc2109_as_netscape hide_cookie2 strict_domainstrict_rfc2965_unverifiablestrict_ns_unverifiablestrict_ns_domainstrict_ns_set_initial_dollarstrict_ns_set_pathsecure_protocolstuple_blocked_domains_allowed_domains)rblocked_domainsallowed_domainsrrrrrrrrrrrrrrrms" zDefaultCookiePolicy.__init__cCs|jSr)rrrrrr sz#DefaultCookiePolicy.blocked_domainscCst||_dSr)rr)rr rrrset_blocked_domainssz'DefaultCookiePolicy.set_blocked_domainscCs |jD]}t||rdSqdSr)rr)rrZblocked_domainrrr is_blockeds  zDefaultCookiePolicy.is_blockedcCs|jSr)rr rrrr sz#DefaultCookiePolicy.allowed_domainscCs|durt|}||_dSr)rr)rr rrrset_allowed_domainssz'DefaultCookiePolicy.set_allowed_domainscCs.|jdurdS|jD]}t||rdSqdSr)rr)rrZallowed_domainrrris_not_alloweds    z"DefaultCookiePolicy.is_not_allowedcCs@td|j|jdD]&}d|}t||}|||sdSqdS)N - checking cookie %s=%s)r verifiabilityrzrrrZset_ok_FTrrzr{rrrrnZfn_namefnrrrrs  zDefaultCookiePolicy.set_okcCsZ|jdurtd|j|jdS|jdkr:|js:tddS|jdkrV|jsVtddSdS)Nz0 Set-Cookie2 without version attribute (%s=%s)Fr $ RFC 2965 cookies are switched off$ Netscape cookies are switched offT)rrrzr{rrrrrrset_ok_versions z"DefaultCookiePolicy.set_ok_versioncCsJ|jrFt|rF|jdkr*|jr*tddS|jdkrF|jrFtddSdSNr z> third-party RFC 2965 cookie during unverifiable transactionFz> third-party Netscape cookie during unverifiable transactionTZ unverifiablerrrrrrrrrset_ok_verifiabilitysz(DefaultCookiePolicy.set_ok_verifiabilitycCs0|jdkr,|jr,|jdr,td|jdSdS)Nr $z' illegal name (starts with '$'): '%s'FT)rrrzrurrrrr set_ok_names   zDefaultCookiePolicy.set_ok_namecCsL|jrHt|}|jdks(|jdkrH|jrH||j|sHtd|j|dSdS)Nr z7 path attribute %s is not a prefix of request path %sFT)rrrrrrr)rrrreq_pathrrr set_ok_paths  zDefaultCookiePolicy.set_ok_pathc Cs||jrtd|jdS||jr8td|jdS|jrt|\}}|j}|jr|ddkr|d}|dd|}|dkr||dd}||d|} | dvrt |dkrtd |dS| dr|dd} n|} | ddk} | s|d krtd |dS|j dkrX||sX| dsXd||sXtd ||dS|j dksr|j|j@rt||std ||dS|j dks|j|j@r|dt | } | ddkrt|std| |dSdS)N" domain %s is in user block-listF& domain %s is not in user allow-listrrr r )coZacZcomZeduZorgZnetZgovZmilrBZaeroZbizcatZcoopinfoZjobsZmobiZmuseumrzZproZtraveleuz& country-code second level domain %srz/ non-local domain %s contains no embedded dotzO effective request-host %s (even with added initial dot) does not end with %sz5 effective request-host %s does not domain-match %sz. host prefix %s for domain %s contains a dotT)r rrrrrrcountrrLlenrurrrrDomainRFC2965MatchrDomainStrictNoDotsrrA) rrrrrrrjZtldZsldZundotted_domainZ embedded_dotsZ host_prefixrrr set_ok_domainsv                  z!DefaultCookiePolicy.set_ok_domainc Cs|jrt|}|durd}nt|}|jdD]>}z t|Wn ty`td|YdS0||kr0qq0td||jdSdS)N80rnz bad port %s (not numeric)Fz$ request port (%s) not found in %sT)rrstrrrrBrMrrrrZreq_portrrrr set_ok_port+s$    zDefaultCookiePolicy.set_ok_portcCs@td|j|jdD]&}d|}t||}|||sdSqdS)Nr)rrrrrrZ return_ok_FTrrrrrr@s   zDefaultCookiePolicy.return_okcCs<|jdkr|jstddS|jdkr8|js8tddSdS)Nr rFrT)rrrrrrrrreturn_ok_versionRsz%DefaultCookiePolicy.return_ok_versioncCsJ|jrFt|rF|jdkr*|jr*tddS|jdkrF|jrFtddSdSrrrrrrreturn_ok_verifiability[sz+DefaultCookiePolicy.return_ok_verifiabilitycCs"|jr|j|jvrtddSdS)Nz( secure cookie with non-secure requestFT)rtyperrrrrrreturn_ok_securegsz$DefaultCookiePolicy.return_ok_securecCs||jrtddSdS)Nz cookie expiredFT)r_nowrrrrrreturn_ok_expiresms z%DefaultCookiePolicy.return_ok_expirescCsN|jrJt|}|durd}|jdD]}||kr&qJq&td||jdSdS)Nr,rnz0 request port %s does not match cookie port %sFT)rrrrr.rrrreturn_ok_portssz"DefaultCookiePolicy.return_ok_portcCst|\}}|j}|r*|ds*d|}n|}|jdkr^|j|j@r^|js^||kr^tddS|jdkrt||std||dS|jdkrd| |std||dSdS)Nrr zQ cookie with unspecified domain does not string-compare equal to request domainFzQ effective request-host name %s does not domain-match RFC 2965 cookie domain %sz; request-host %s does not match Netscape cookie domain %sT) rrrurrDomainStrictNonDomainrrrr)rrrrrr dotdomainrrrreturn_ok_domains2    z$DefaultCookiePolicy.return_ok_domaincCst|\}}|dsd|}|ds0d|}|rH|dsHd|}n|}||sd||sddS||r|td|dS||rtd|dSdS)NrFr r!T)rrurr rr)rrrrrr8rrrrs"        z$DefaultCookiePolicy.domain_return_okcCsbtd|t|}t|}||kr&dS||rR|dsN|||ddkrRdStd||dS)Nz- checking cookie path=%sTrr z %s does not path-match %sF)rrr'rur)rrrrpathlenrrrrs   z"DefaultCookiePolicy.path_return_ok)rrrr)r7r(Z DomainLiberalZ DomainStrictrr r r r rrrrrrrr+r/rr0r1r3r5r6r9rrrrrrrcsN #   ;  rcCst|}t|j|Sr)sortedkeysmapr)Zadictr<rrrvals_sorted_by_keys r>c csTt|}|D]B}d}z |jWnty0Yn0d}t|EdH|s |Vq dSr)r>itemsAttributeError deepvalues)mappingvaluesobjrrrrAs  rAc@s eZdZdS)AbsentNrrrrrrrrErEc@seZdZedZedZedZedZedZ edej Z d2dd Z d d Z d d ZddZddZddZddZddZddZddZddZddZd d!Zd"d#Zd3d$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Z dS)4rz\Wr}z\.?[^.]*z[^.]*z^\.+z^\#LWP-Cookies-(\d+\.\d+)NcCs(|durt}||_t|_i|_dSr)r_policy _threadingRLock _cookies_lock_cookiesrpolicyrrrrs  zCookieJar.__init__cCs ||_dSr)rHrMrrr set_policyszCookieJar.set_policycCsg}|j||sgStd||j|}|D]T}|j||sFq2||}|D].}|j||srtdqVtd||qVq2|S)Nz!Checking %s for cookies to returnz not returning cookiez it's a match) rHrrrLr<rrCrrt)rrrcookiesZcookies_by_pathrZcookies_by_namerrrr_cookies_for_domains     zCookieJar._cookies_for_domaincCs*g}|jD]}||||q|Sr)rLr<extendrQ)rrrPrrrr_cookies_for_requestszCookieJar._cookies_for_requestc Cs<|jddddd}g}|D]}|j}|sHd}|dkrH|d||jdurz|j|jrz|dkrz|jd|j}n|j}|jdur||jn|d |j|f|dkr|j r|d |j |j d r|j }|j s| d r|d d}|d ||jdurd}|jr,|d|j}||q|S)NcSs t|jSr)r'r)arrrrGz)CookieJar._cookie_attrs..T)rreverseFr z $Version=%sr~rz $Path="%s"rr z $Domain="%s"z$Portz="%s")sortrrtr{ non_word_rerAquote_rer`rzrrrrurrr) rrPrattrsrrr{rrrrr _cookie_attrssF        zCookieJar._cookie_attrscCstd|jztt|j_|_||}||}|r^| ds^| dd ||jj r|jj s| ds|D]}|jdkr|| ddqq|W|jn |j0|dS)Nadd_cookie_headerrrZCookie2r z $Version="1")rrKacquirerBrNrHr4rSr[Z has_headerZadd_unredirected_headerrrrrreleaseclear_expired_cookies)rrrPrZrrrrr\Is(       zCookieJar.add_cookie_headerc Csg}d}d}|D]x}|d\}}d}d} i} i} |ddD].\} } | }||vs`||vrd|} | |vrx| durxd} | | vrq>| dkr| durtdd} qp| } | d kr|rq>| durtd q>| d krd}z t| } Wn(tytd d} YqpYn0d } |j| } | |vs2| |vrf| dur\| d vr\td| d} qp| | | <q>| | | <q>| rxq|||| | fq|S)N)rr)rrrrrrr commenturlr Fr Trz% missing value for domain attributerzM missing or invalid value for expires attribute: treating as session cookierz? missing or invalid (non-numeric) value for max-age attribute)rrr`z! missing value for %s attribute)rLrrBrMr4rt)r attrs_set cookie_tuples boolean_attrs value_attrsZ cookie_attrsrzr{Z max_age_setZ bad_cookiestandardrrrrrrr_normalized_cookie_tuplesjsh          z#CookieJar._normalized_cookie_tuplescCs"|\}}}}|dt}|dt}|dt} |dt} |dd} | durrz t| } WntypYdS0|dd} |dd} |d d}|d d}|tur|d krd }t|}nXd}t|}|d }|dkr| dkr|d|}n|d|d}t|dkrd }|tu}d}|r8t| d}|turTt |\}}|}n| dshd|}d}| tur| durt |} nd }t dd | } nd} | turd} d } nF| |jkrz||||WntyYn0td|||dSt| ||| ||||||| | | |||S)NrrrrrrFrrr`rYTrrr r rz\s+z2Expiring cookie, domain='%s', path='%s', name='%s')rrErBrMrrrr'boolrurrrvr`r4clearKeyErrorrr)rtuprrzr{rerrrrrrrrrrrrrrrrrrrr_cookie_from_cookie_tuples                       z#CookieJar._cookie_from_cookie_tuplecCs6||}g}|D]}|||}|r||q|Sr)rfrkrt)rrarrbrPrjrrrr_cookies_from_attrs_set's   z!CookieJar._cookies_from_attrs_setcCsHt|jdd}|dur |jj }|D]}|jdkr$d|_|r$d|_q$dS)Nrr Tr )rrHrrr)rrPZ rfc2109_as_nsrrrr_process_rfc2109_cookies0s  z"CookieJar._process_rfc2109_cookiesc Cs6|}|dg}|dg}tt|j_|_|jj}|jj}|sN|rf|sV|rf|s^|rf|sj|sjgSz|t ||}Wnt yt g}Yn0|r2|r2z|t ||} Wnt yt g} Yn0| | |r"i} |D]} d| | j| j| jf<q| fdd} t| | } | r2|| |S)Nz Set-Cookie2z Set-CookiecSs|j|j|jf}||vSr)rrrz)Z ns_cookielookuprrrrno_matching_rfc2965isz3CookieJar.make_cookies..no_matching_rfc2965)r$Zget_allrBrNrHr4rrrlr| ExceptionrrrmrrrzfilterrR) rresponserrZ rfc2965_hdrsZns_hdrsrrrPZ ns_cookiesrnrrorrr make_cookies<sZ           zCookieJar.make_cookiescCsX|jz|durX|durJtd|j||=n|durj|j|=ni|_dS)Nz8domain and path must be given to remove a cookie by namez.domain must be given to remove cookies by path)rMrL)rrrrzrrrrhs  zCookieJar.clearcCsN|jz2|D]}|jr||j|j|jqW|jn |j0dSr)rKr]rrhrrrzr^)rrrrrclear_session_cookiess  zCookieJar.clear_session_cookiescCsZ|jz>t}|D]"}||r||j|j|jqW|jn |j0dSr) rKr]rNrrhrrrzr^)rrrrrrr_s  zCookieJar.clear_expired_cookiescCs t|jSr)rArLr rrr__iter__szCookieJar.__iter__cCsd}|D] }|d}q|S)Nr r r)rrrrrr__len__szCookieJar.__len__cCs2g}|D]}|t|qd|jjd|fSNz<%s[%s]>r)rtrrrrrrrrrrrszCookieJar.__repr__cCs2g}|D]}|t|qd|jjd|fSr|)rtr-rrrr}rrrrszCookieJar.__str__)N)NNN)!rrrrvcompilerXrYZstrict_domain_reZ domain_reZdots_reASCIImagic_rerrOrQrSr[r\rfrkrlrmrsrurtrxrhryr_rzr{rrrrrrrs6      ;!a\  7   rc@s eZdZdS)rNrFrrrrrrGrc@s4eZdZd ddZd ddZd ddZdd d ZdS)rNFcCs2t|||durt|}||_t||_dSr)rrosfspathfilenamerg delayload)rrrrNrrrrs   zFileCookieJar.__init__cCs tdSrr)rrignore_discardignore_expiresrrrsaveszFileCookieJar.savecCs^|dur"|jdur|j}nttt| }|||||Wdn1sP0YdSr)rrMMISSING_FILENAME_TEXTopen _really_loadrrrrrrrrloads  zFileCookieJar.loadcCs|dur"|jdur|j}ntt|jzNt|j}i|_z||||Wnt yl||_Yn0W|j n |j 0dSr) rrMrrKr]rdeepcopyrLrOSErrorr^)rrrrZ old_staterrrrevert s    zFileCookieJar.revert)NFN)NFF)NFF)NFF)rrrrrrrrrrrrs   rcCs |j|jfd|jfd|jfg}|jdur8|d|jf|jrH|d|jrX|d|jrh|d|j rx|d|j r|dt t |j f|j r|d |jr|d |jf|jr|d |jft|j}|D]}||t|j|fq|d t|jft|gS) Nrrr) path_specN) port_specN) domain_dotN)rNr)rNrr`r)rzr{rrrrtrrrrrr6r]rrrr;rr<r-rr)rrr<rrrrlwp_cookie_str$s(   rc@s(eZdZd ddZd ddZdd ZdS) rTcCsTt}g}|D]2}|s |jr q|s0||r0q|dt|qd|dgS)NzSet-Cookie3: %s rY)rNrrrtrr)rrrrr~rrrr as_lwp_strMs zLWPCookieJar.as_lwp_strNFcCsl|dur"|jdur|j}nttt|d,}|d||||Wdn1s^0YdS)Nwz#LWP-Cookies-2.0 )rrMrrwriterrrrrr]s   zLWPCookieJar.savecCs,|}|j|s$d|}t|t}d}d} d} z|} | dkrPq| |s\q<| t|d} t| gD]f} | d\} }i}i}| D] }d||<q| ddD]n\}}|dur| }nd}|| vs|| vr|}|| vr|durd }|||<q|| vr|||<q|||<q|j }|d }|d }|durJt |}|durXd }|d }|d }t |d| ||d|d|||d|d|d|d|||d|d|}|s|j rqz|s||rqz||qzqtyYn*ty&ttd|| fYn0dS)Nz5%r does not look like a Set-Cookie3 (LWP) format filez Set-Cookie3:)rrrrr)rrrrrrr`rYr Fr Trrrrrrrrrrrrr`z&invalid Set-Cookie3 format file %r: %r)readlinerrArrNrur'rr|rLrrgrrrrtrrpr)rrrrrmagicrrheaderrcrdlinedatarzr{rerrrrrrrrrrvrrrris                    zLWPCookieJar._really_load)TT)NFF)rrrrrrrrrrr@s  rc@s,eZdZedZdZddZd ddZdS) rz#( Netscape)? HTTP Cookie Filezr# Netscape HTTP Cookie File # http://curl.haxx.se/rfc/cookie_spec.html # This is a generated file! Do not edit. cCs^t}|}|j|s(td|z|}|dkr>q|drT|dd}|ds*|dkrpq*|d\}} } } } } }| dk} | dk} | dkr|} d}|d}d }| dkrd} d }t d | |dd || || d | | |ddi}|s|j rq*|s | |r q*| |q*Wn>t y0Yn*tyXttd ||fYn0dS) Nz4%r does not look like a Netscape format cookies filerYrr)#r TRUErFTr z+invalid Netscape format cookies file %r: %r)rNrrrArrrrurrrrrtrrpr)rrrrrrrrrrrrrrzr{rrrvrrrrsf     zMozillaCookieJar._really_loadNFc Cs|dur"|jdur|j}nttt|d}||jt}|D]}|sV|jrVqF|sf||rfqF|j rrd}nd}|j drd}nd}|j durt |j } nd} |jdurd} |j} n |j} |j} |d|j ||j|| | | gdqFWdn1s0YdS)NrrFALSErrYrr)rrMrrrrrNrrrrrurr-r{rzrr) rrrrrrrrrrrzr{rrrr s<       zMozillaCookieJar.save)NFF) rrrrvrrrrrrrrrrs Ar)N)N)W__all__rrr.rvrN urllib.parserZurllib.request threadingrIZ http.clienthttpZcalendarr r r rr-clientZ HTTP_PORTrrrr&r-r7r8rJr)rtrLr6r9r?rrr@rGrVr[Ir_Xrardrergrmrorprrrqr|rrrrrrrrrrrrrrrrrrrrrrrr>rArErrrrrrrrrrrs    8  8 !    U D'    #b!b7x