o
    4˜Žj×d  ã                   @   s`  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlmZ d dlmZmZmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZ dd	lmZ dd
lm Z m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z' dZ(ee)df Z*dj+Z,dj+Z-dZ.eƒ Z/e0dƒZ1G dd„ de	j2ƒZ3G dd„ de ƒZ4G dd„ de ƒZ5dS )é    N)Údefaultdict)ÚIterableÚIteratorÚMapping)Ú
BaseCookieÚMorselÚSimpleCookie©ÚMappingProxyType)ÚUnion)ÚURLé   )Ú preserve_morsel_with_coded_value)ÚAbstractCookieJarÚClearCookiePredicate)Úis_ip_address)ÚLooseCookiesÚPathLikeÚStrOrURL)Ú	CookieJarÚDummyCookieJarzMorsel[str]z{}/{}z{1}.{0}éd   )úmax-ageÚexpiresc                       sP   e Zd ZU dZeh d£ƒZeeeef  ed< dedede	f‡ fdd„Z
‡  ZS )	Ú_RestrictedCookieUnpicklera@  A restricted unpickler that only allows cookie-related types.

    This prevents arbitrary code execution when loading pickled cookie data
    from untrusted sources. Only types that are expected in a serialized
    CookieJar are permitted.

    Subclasses :class:`pickle._Unpickler` (the pure-Python implementation)
    rather than :class:`pickle.Unpickler` because the accelerated unpickler
    on some implementations (notably PyPy) does not dispatch through
    :meth:`find_class` overrides.

    See: https://docs.python.org/3/library/pickle.html#restricting-globals
    >   ©ÚbuiltinsÚset©r   Údict©r   Útuple©r   Ú	frozenset©Úcollectionsr   ©úhttp.cookiesr   ©r'   r   Ú_ALLOWED_CLASSESÚmoduleÚnameÚreturnc                    s4   ||f| j vrt d|› d|› d�¡‚tƒ  ||¡S )NzForbidden class: Ú.z‡. CookieJar.load() only allows cookie-related types for security. See https://docs.python.org/3/library/pickle.html#restricting-globals)r)   ÚpickleÚUnpicklingErrorÚsuperÚ
find_class)Úselfr*   r+   ©Ú	__class__© úN/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/aiohttp/cookiejar.pyr1   L   s
   ÿz%_RestrictedCookieUnpickler.find_class)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   r)   r!   ÚstrÚ__annotations__Útyper1   Ú__classcell__r5   r5   r3   r6   r   .   s   
 ÿ"r   c                       s¾  e Zd ZdZe d¡Ze d¡Ze d¡Ze dej	¡Z
e d¡Zeejjjejjd� ¡ ƒd Zz
e e e¡¡ W n eyI   e d	¡ZY n eyS   d
ZY nw ed Zdddddœdededeee B dB dejdB ddf
‡ fdd„Z e!defdd„ƒZ"e!defdd„ƒZ#e!de$e%e&e&f e'f fdd„ƒZ(e!de)e%e&e&f  fdd„ƒZ*de+ddfdd „Z,de+ddfd!d"„Z-d#e.e&e.e&e.e&e&eB e/B f f f ddfd$d%„Z0dLd&e1dB ddfd'd(„Z2d)e&ddfd*d+„Z3dMd-d.„Z4defd/d0„Z5dNd1d2„Z6d3ee%e&e&e&f  ddfd4d5„Z7d6e/d)e&d7e&d8e&ddf
d9d:„Z8e9ƒ fd;e:d<e9ddfd=d>„Z;e9ƒ fd?e9dd@fdAdB„Z<dCe=e& de=e& fdDdE„Z>e?d)e&dFe&defdGdH„ƒZ@eAdIe&dedB fdJdK„ƒZB‡  ZCS )Or   z/Implements cookie storage adhering to RFC 6265.z][\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]*(?P<token>[\x00-\x08\x0A-\x1F\d:a-zA-Z\x7F-\xFF]+)z(\d{1,2}):(\d{1,2}):(\d{1,2})z	(\d{1,2})zG(jan)|(feb)|(mar)|(apr)|(may)|(jun)|(jul)|(aug)|(sep)|(oct)|(nov)|(dec)z	(\d{2,4}))Útzinfor   )	i¸  é   é   é   é;   rC   éÿÿÿÿrD   rD   iÿÿÿFTN)ÚunsafeÚquote_cookieÚtreat_as_secure_originÚlooprE   rF   rG   rH   r,   c                   s˜   t ƒ j|d� ttƒ| _ttƒ| _tƒ | _|| _	|| _
|d u r"g }nt|tƒr-| ¡ g}nt|tƒr:t|ƒ ¡ g}ndd„ |D ƒ}|| _g | _i | _d S )N©rH   c                 S   s*   g | ]}t |tƒrt|ƒ ¡ n| ¡ ‘qS r5   )Ú
isinstancer;   r   Úorigin)Ú.0Úurlr5   r5   r6   Ú
<listcomp>“   s    ÿÿz&CookieJar.__init__.<locals>.<listcomp>)r0   Ú__init__r   r   Ú_cookiesr   Ú_morsel_cacher   Ú_host_only_cookiesÚ_unsafeÚ_quote_cookierJ   r   rK   r;   Ú_treat_as_secure_originÚ_expire_heapÚ_expirations)r2   rE   rF   rG   rH   r3   r5   r6   rO   z   s*   ÿÿ

þ
zCookieJar.__init__c                 C   ó   | j S ©N)rS   ©r2   r5   r5   r6   rE   ›   ó   zCookieJar.unsafec                 C   rX   rY   )rT   rZ   r5   r5   r6   rF   Ÿ   r[   zCookieJar.quote_cookiec                 C   ó
   t | jƒS )z&Return the cookies stored in this jar.)r
   rP   rZ   r5   r5   r6   Úcookies£   ó   
zCookieJar.cookiesc                 C   r\   )z0Return the host-only cookies stored in this jar.)r#   rR   rZ   r5   r5   r6   Úhost_only_cookies¨   r^   zCookieJar.host_only_cookiesÚ	file_pathc                 C   s  t  |¡}i }| j ¡ D ]Z\\}}}|› d|› �}i ||< | ¡ D ]D\}}|j|j|jdœ}	|jD ]}
|
tv r8q1||
 }|rB||	|
< q1||f| j	v rNd|	d< | j
 |||f¡ }dur_||	d< |	|| |< q!qt|ddd	d
„ d��}tj||dd� W d  ƒ dS 1 s…w   Y  dS )z¸Save cookies to a file using JSON format.

        :param file_path: Path to file where cookies will be serialized,
            :class:`str` or :class:`pathlib.Path` instance.
        ú|©ÚkeyÚvalueÚcoded_valueTÚ	host_onlyNÚexpires_timestampÚwúutf-8c                 S   s   t  | |d¡S )Ni€  )ÚosÚopen)ÚpathÚflagsr5   r5   r6   Ú<lambda>Ó   s    z CookieJar.save.<locals>.<lambda>)ÚmodeÚencodingÚopeneré   )Úindent)ÚpathlibÚPathrP   Úitemsrc   rd   re   Ú	_reservedÚ_RELATIVE_EXPIRY_ATTRSrR   rW   Úgetrk   ÚjsonÚdump)r2   r`   ÚdataÚdomainrl   Úcookierc   r+   ÚmorselÚmorsel_dataÚattrÚattr_valÚexpÚfr5   r5   r6   Úsave­   s@   
ý
€îü"úzCookieJar.savec                 C   s®   t  |¡}z$|jddd��}t |¡}W d  ƒ n1 sw   Y  |  |¡ W dS  tjttfyV   |jdd��}t	|ƒ ¡ | _
W d  ƒ Y dS 1 sNw   Y  Y dS w )aë  Load cookies from a file.

        Tries to load JSON format first. Falls back to loading legacy
        pickle format (using a restricted unpickler) for backward
        compatibility with existing cookie files.

        Replaces the current jar contents; loaded cookies pass through the
        same acceptance rules as :meth:`update_cookies`.

        :param file_path: Path to file from where cookies will be
            imported, :class:`str` or :class:`pathlib.Path` instance.
        Úrri   )ro   rp   NÚrb)ro   )rt   ru   rk   rz   ÚloadÚ_load_json_dataÚJSONDecodeErrorÚUnicodeDecodeErrorÚ
ValueErrorr   rP   )r2   r`   r„   r|   r5   r5   r6   rˆ   ×   s   
ÿ&ÿþzCookieJar.loadr|   c                 C   sô   |   ¡  | ¡ D ]k\}}| dd¡\}}| ¡ D ]Z\}}tƒ }| |d |d |d dœ¡ |jD ]}	|	|v rA|	dvrA||	 ||	< q1| d¡rKd|d	< |rTtjd
|d�ntƒ }
|  	||i|
¡ | d¡ }durr|  
t|ƒ|||¡ qq|  ¡  dS )z;Replace contents, routing cookies through update_cookies().ra   r   rc   rd   re   rb   rf   Ú r}   Úhttps)ÚschemeÚhostrg   N)Úclearrv   Úsplitr   Ú__setstate__rw   ry   r   ÚbuildÚupdate_cookiesÚ_expire_cookieÚfloatÚ_do_expiration)r2   r|   Úcompound_keyÚcookie_datar}   rl   r+   r€   r   r�   Úresponse_urlrƒ   r5   r5   r6   r‰   ï   s2   ýÿ
€
ÿ€äzCookieJar._load_json_dataÚ	predicatec                    sz   ˆd u rˆj  ¡  ˆj ¡  ˆj ¡  ˆj ¡  ˆj ¡  d S t ¡ ‰‡ ‡‡‡fdd„ˆj ¡ D ƒ}|r;ˆ |¡ d S d S )Nc                    sT   g | ]&\\}}}|  ¡ D ]\}}|||f ‰ ˆjv r!ˆjˆ  ˆks%ˆ|ƒrˆ ‘qqS r5   )rv   rW   )rL   r}   rl   r~   r+   r   ©rc   Únowrœ   r2   r5   r6   rN     s    
ýþûz#CookieJar.clear.<locals>.<listcomp>)	rV   r‘   rP   rQ   rR   rW   Útimerv   Ú_delete_cookies)r2   rœ   Úto_delr5   r�   r6   r‘     s   




þ
ÿzCookieJar.clearr}   c                    s   ˆ  ‡ ‡fdd„¡ d S )Nc                    s   ˆ  ˆ | d ¡S )Nr}   )Ú_is_domain_match)Úx©r}   r2   r5   r6   rn   -  s    z(CookieJar.clear_domain.<locals>.<lambda>)r‘   ©r2   r}   r5   r¤   r6   Úclear_domain,  s   zCookieJar.clear_domainúIterator[Morsel[str]]c                 c   s,   � |   ¡  | j ¡ D ]	}| ¡ E d H  q
d S rY   )r˜   rP   Úvalues)r2   Úvalr5   r5   r6   Ú__iter__/  s
   €ÿzCookieJar.__iter__c                 C   s   t dd„ | j ¡ D ƒƒS )zReturn number of cookies.

        This function does not iterate self to avoid unnecessary expiration
        checks.
        c                 s   s   � | ]	}t | ¡ ƒV  qd S rY   )Úlenr¨   )rL   r~   r5   r5   r6   Ú	<genexpr>:  s   € z$CookieJar.__len__.<locals>.<genexpr>)ÚsumrP   r¨   rZ   r5   r5   r6   Ú__len__4  s   zCookieJar.__len__c                    sº   t ˆ jƒ }s	dS |tkr'|t ˆ jƒd kr'‡ fdd„ˆ jD ƒˆ _t ˆ j¡ t ¡ }g }ˆ jrRˆ jd \}}||kr<nt ˆ j¡ ˆ j |¡|krO| 	|¡ ˆ js0|r[ˆ  
|¡ dS dS )zRemove expired cookies.Nrr   c                    s(   g | ]}ˆ j  |d  ¡|d kr|‘qS )r   r   )rW   ry   )rL   ÚentryrZ   r5   r6   rN   N  s
    þz,CookieJar._do_expiration.<locals>.<listcomp>r   )r«   rV   Ú _MIN_SCHEDULED_COOKIE_EXPIRATIONrW   ÚheapqÚheapifyrŸ   Úheappopry   Úappendr    )r2   Úexpire_heap_lenrž   r¡   ÚwhenÚ
cookie_keyr5   rZ   r6   r˜   <  s*   
þ
öÿzCookieJar._do_expirationr¡   c                 C   sd   |D ]-\}}}| j  ||f¡ | j||f  |d ¡ | j||f  |d ¡ | j |||fd ¡ qd S rY   )rR   ÚdiscardrP   ÚpoprQ   rW   )r2   r¡   r}   rl   r+   r5   r5   r6   r    g  s   üzCookieJar._delete_cookiesr¶   rl   r+   c                 C   s>   |||f}| j  |¡|krd S t | j||f¡ || j |< d S rY   )rW   ry   r±   ÚheappushrV   )r2   r¶   r}   rl   r+   r·   r5   r5   r6   r–   n  s
   
zCookieJar._expire_cookier]   r›   c              	   C   s  |j }| jst|ƒrdS t|tƒr| ¡ }|D ]ã\}}t|tƒs+tƒ }|||< || }|d }|r<|d dkr<d}|d= |sP|durP| j 	||f¡ | }|d< |rb|d dkrb|dd… }||d< |rk|  
||¡skq|d }|rw|d d	kr‘|j}| d	¡s‚d	}nd	|d| d	¡…  }||d< | d	¡}|d
  }	rÂzt|	ƒ}
tt ¡ |
 | jƒ}|  ||||¡ W n' tyÁ   d|d
< Y nw |d  }rÜ|  |¡ }rØ|  ||||¡ nd|d< ||f}| j|  |¡|krú|| j| |< | j|  |d¡ q|  ¡  dS )zUpdate cookies.Nr}   rD   r-   r�   r   r   rl   ú/r   r   )Úraw_hostrS   r   rJ   r   rv   r   r   rR   Úaddr¢   rl   Ú
startswithÚrfindÚrstripÚintÚminrŸ   ÚMAX_TIMEr–   rŒ   Ú_parse_daterP   ry   rQ   r¹   r˜   )r2   r]   r›   Úhostnamer+   r~   Útmpr}   rl   Úmax_ageÚdelta_secondsÚmax_age_expirationr   Úexpire_timerc   r5   r5   r6   r•   v  s`   



ÿ€zCookieJar.update_cookiesÚrequest_urlúBaseCookie[str]c                 C   s"  t ƒ }| js|S |  ¡  | js|S t|ƒtur(tjdt|ƒ› �tdd� t|ƒ}|jp,d}|j	dv}|rX| j
rXtƒ }t t¡� | ¡ }W d  ƒ n1 sNw   Y  || j
v}d}| j|  ¡ D ](}|j| j| v rw| j| |j ||j< qa|  |¡}|| j| |j< |||j< qat|ƒr—| js“|S |f}	nt t| d¡ƒt¡}	t |j d	¡t¡}
t |	|
¡}t|jƒ}|D ]U}|| jvrÁq¹| j|  ¡ D ]E\}}|d
 }||f| jv rÜ||krÜqÈt|d ƒ|kråqÈ|rì|d rìqÈ|| j| v rý| j| | ||< qÈ|  |¡}|| j| |< |||< qÈq¹|S )z8Returns this jar's cookies filtered by their attributes.zQfilter_cookies expects yarl.URL instances only,and will stop working in 4.x, got rr   )Ú
stacklevelr�   )rŽ   ÚwssN)r�   r�   r-   r»   r}   rl   Úsecure) r   rP   r˜   r=   r   ÚwarningsÚwarnÚDeprecationWarningr¼   r�   rU   Ú
contextlibÚsuppressrŒ   rK   r¨   rc   rQ   Ú_build_morselr   rS   Ú	itertoolsÚ
accumulateÚreversedr’   Ú_FORMAT_DOMAIN_REVERSEDrl   Ú_FORMAT_PATHÚproductr«   rv   rR   )r2   rË   ÚfilteredrÅ   Úis_not_secureÚrequest_originrc   ÚcÚmrsl_valÚdomainsÚpathsÚpairsÚpath_lenÚpr+   r~   r}   r5   r5   r6   Úfilter_cookiesÀ  sx   ÿü



ÿ

ÿ



ëzCookieJar.filter_cookiesr~   c                 C   sb   | j r|jr|jd dkrt|ƒS tƒ }| j r t |j¡\}}n|j }}| |j||dœ¡ |S )z<Build a morsel for sending, respecting quote_cookie setting.r   ú"rb   )	rT   re   r   r   Ú_SIMPLE_COOKIEÚvalue_encoderd   r“   rc   )r2   r~   r   rd   re   r5   r5   r6   rÕ     s   
zCookieJar._build_morselrÅ   c                 C   sD   || krdS |  | ¡sdS |dt| ƒ … }|  d¡sdS t|ƒ S )z0Implements domain matching adhering to RFC 6265.TFNr-   )Úendswithr«   r   )r}   rÅ   Únon_matchingr5   r5   r6   r¢   (  s   


zCookieJar._is_domain_matchÚdate_strc                 C   s¨  |sdS d}d}d}d}d } }}d}	d}
d}| j  |¡D ]\}| d¡}|s>| j |¡}|r>d}dd„ | ¡ D ƒ\}}}q|sQ| j |¡}|rQd}t| ¡ ƒ}	q|sh| j |¡}|rhd}|j	dusdJ ‚|j	}
q|sz| j
 |¡}|rzd}t| ¡ ƒ}qd|  kr…d	krŒn n|d
7 }nd|  kr–dkrœn n|d7 }d||||fv r¦dS d|	  kr±dks´dS  dS |dk sÄ|dksÄ|dksÄ|dkrÆdS t ||
|	|||dddf	¡S )z4Implements date string parsing adhering to RFC 6265.NFr   ÚtokenTc                 s   s   � | ]}t |ƒV  qd S rY   )rÁ   )rL   Úsr5   r5   r6   r¬   P  s   € z(CookieJar._parse_date.<locals>.<genexpr>éF   éc   il  éE   iÐ  r   rA   iA  rB   rC   rD   )ÚDATE_TOKENS_REÚfinditerÚgroupÚDATE_HMS_TIME_REÚmatchÚgroupsÚDATE_DAY_OF_MONTH_RErÁ   ÚDATE_MONTH_REÚ	lastindexÚDATE_YEAR_REÚcalendarÚtimegm)Úclsrì   Ú
found_timeÚ	found_dayÚfound_monthÚ
found_yearÚhourÚminuteÚsecondÚdayÚmonthÚyearÚtoken_matchrí   Ú
time_matchÚ	day_matchÚmonth_matchÚ
year_matchr5   r5   r6   rÄ   8  sd   
€
ÿ zCookieJar._parse_daterY   ©r,   r§   )r,   N)Dr7   r8   r9   r:   ÚreÚcompilerò   rõ   rø   ÚIrù   rû   rÁ   ÚdatetimeÚmaxÚreplaceÚtimezoneÚutcÚ	timestamprÃ   rü   rý   rŸ   ÚgmtimeÚOSErrorÚOverflowErrorÚSUB_MAX_TIMEÚboolr   ÚlistÚasyncioÚAbstractEventLooprO   ÚpropertyrE   rF   r
   r!   r;   r   r]   r#   r_   r   r…   rˆ   r   r—   r‰   r   r‘   r¦   rª   r®   r˜   r    r–   r   r   r•   ræ   r   rÕ   Ústaticmethodr¢   ÚclassmethodrÄ   r>   r5   r5   r3   r6   r   V   s„    ÿ

þ
ÿþúýüûúù! *"ÿ
þ&

 +JX r   c                       s
  e Zd ZdZddœdejdB ddf‡ fdd„Zd#d	d
„Zdefdd„Z	e
defdd„ƒZe
defdd„ƒZe
deeeef ef fdd„ƒZe
deeeef  fdd„ƒZd$dedB ddfdd„Zdeddfdd„Zeƒ fdededdfdd„Zdedd fd!d"„Z‡  ZS )%r   zxImplements a dummy cookie storage.

    It can be used with the ClientSession when no cookie processing is needed.

    NrI   rH   r,   c                   s   t ƒ j|d� d S )NrI   )r0   rO   )r2   rH   r3   r5   r6   rO   €  s   zDummyCookieJar.__init__r§   c                 c   s   � d S rY   r5   rZ   r5   r5   r6   rª   ƒ  s   €zDummyCookieJar.__iter__c                 C   ó   dS )Nr   r5   rZ   r5   r5   r6   r®   ‡  ó   zDummyCookieJar.__len__c                 C   r#  )NFr5   rZ   r5   r5   r6   rE   Š  ó   zDummyCookieJar.unsafec                 C   r#  )NTr5   rZ   r5   r5   r6   rF   Ž  r%  zDummyCookieJar.quote_cookiec                 C   s   t i ƒS )zReturn an empty mapping.r	   rZ   r5   r5   r6   r]   ’  s   zDummyCookieJar.cookiesc                 C   ó   t ƒ S )zReturn an empty frozenset.)r#   rZ   r5   r5   r6   r_   —  s   z DummyCookieJar.host_only_cookiesrœ   c                 C   ó   d S rY   r5   )r2   rœ   r5   r5   r6   r‘   œ  r$  zDummyCookieJar.clearr}   c                 C   r'  rY   r5   r¥   r5   r5   r6   r¦   Ÿ  r$  zDummyCookieJar.clear_domainr]   r›   c                 C   r'  rY   r5   )r2   r]   r›   r5   r5   r6   r•   ¢  r$  zDummyCookieJar.update_cookiesrË   rÌ   c                 C   r&  rY   )r   )r2   rË   r5   r5   r6   ræ   ¥  s   zDummyCookieJar.filter_cookiesr  rY   )r7   r8   r9   r:   r  r  rO   rª   rÁ   r®   r   r  rE   rF   r
   r!   r;   r   r]   r#   r_   r   r‘   r¦   r   r   r•   ræ   r>   r5   r5   r3   r6   r   y  s"    "
 r   )6r  rü   rÓ   r  r±   rÖ   rz   rj   rt   r.   r  rŸ   rÐ   r%   r   Úcollections.abcr   r   r   Úhttp.cookiesr   r   r   Útypesr
   Útypingr   Úyarlr   Ú_cookie_helpersr   Úabcr   r   Úhelpersr   Útypedefsr   r   r   Ú__all__r;   Ú
CookieItemÚformatrÚ   rÙ   r°   rè   r#   rx   Ú
_Unpicklerr   r   r   r5   r5   r5   r6   Ú<module>   sJ    (    '