o
    š"4g8  ã                   @   s  d dl Z d dl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 d dlmZ d dlmZ d d	lmZ d d
lmZ eddƒZdd„ Zdd„ Zdd„ Zdddœdd„Zdddœdd„Zddddœdefdd„Zddddœdefdd„Zdd „ Zd!efd"d#„Zd!ee fd$d%„ZdS )&é    N)Ú
namedtuple)ÚOptional)Úsettings)Úcache)ÚImproperlyConfigured)ÚHttpResponse)Úrender©Úapp_settings)Úimport_callableÚRatezamount duration perc                 C   sp   t | ƒdkr
t| ƒ‚| d }| dd… }dddddœ}||vr%td| ƒ‚t |ƒdkr.d}nt|ƒ}|||  S )	Nr   éÿÿÿÿé   é<   i  i€Q )ÚsÚmÚhÚdzInvalid duration unit: %s)ÚlenÚ
ValueErrorÚfloat)ÚdurationÚunitÚvalueÚunit_map© r   ú_/var/www/html/authentication-server/venv/lib/python3.10/site-packages/allauth/core/ratelimit.pyÚ_parse_duration   s   r   c                 C   s`   |   d¡}t|ƒdkr|\}}d}nt|ƒdkr|\}}}nt| ƒ‚t|ƒ}t|ƒ}t|||ƒS )Nú/é   Úipé   )Úsplitr   r   Úintr   r   )ÚrateÚpartsÚamountr   Úperr   r   r   Ú_parse_rate"   s   
r(   c                 C   s>   g }| r|   ¡ } | r|  d¡}|D ]}| t|  ¡ ƒ¡ q|S )Nú,)Ústripr"   Úappendr(   )ÚratesÚretr%   Úpartr   r   r   Ú_parse_rates0   s   
r/   )ÚkeyÚuserc          	      C   s¸   ddl m} |jdkrd|ƒ  | ¡f}n<|jdkr0|d u r(| jjs%tdƒ‚| j}dt|jƒf}n |jdkrK|d u r=tdƒ‚t	 
| d¡¡ ¡ }|f}nt|jƒ‚d	d
|g|¢}d |¡S )Nr   )Úget_adapterr    r1   z2ratelimit configured per user but used anonymouslyr0   z1ratelimit configured per key but no key specifiedÚutf8ÚallauthÚrlú:)Úallauth.account.adapterr2   r'   Úget_client_ipr1   Úis_authenticatedr   ÚstrÚpkÚhashlibÚsha256ÚencodeÚ	hexdigestr   Újoin)	ÚrequestÚactionr$   r0   r1   r2   ÚsourceÚkey_hashÚkeysr   r   r   Ú
_cache_key;   s*   

ÿ
ÿ

rF   c                C   sF   ddl m} t|j |¡ƒ}|D ]}t| ||||d}t |¡ qd S )Nr   r	   ©rB   r$   r0   r1   )Úallauth.accountr
   r/   ÚRATE_LIMITSÚgetrF   r   Údelete)rA   rB   r0   r1   r
   r,   r$   Ú	cache_keyr   r   r   ÚclearU   s   þrM   F)r0   r1   Údry_runrN   c          	   	   C   s`   ddl m} | r| jdkrdS t|j |¡ƒ}|sdS d}|D ]}t| |||||ds-d}q|S )Nr   r	   ÚGETT)rB   r$   r0   r1   rN   F)rH   r
   Úmethodr/   rI   rJ   Ú_consume_rate)	rA   rB   r0   r1   rN   r
   r,   Úallowedr$   r   r   r   Úconsume^   s   ÿ€rS   c          
      C   s   t | ||||d}t |g ¡}t ¡ }|r-|d ||j kr-| ¡  |r-|d ||j kst|ƒ|jk }	|	rF|sF| d|¡ t 	|||j¡ |	S )NrG   r   r   )
rF   r   rJ   Útimer   Úpopr   r&   ÚinsertÚset)
rA   rB   r$   r0   r1   rN   rL   ÚhistoryÚnowrR   r   r   r   rQ   q   s   ÿrQ   c                 C   s    ddl m} t| d|j ddS )Nr   r	   z429.i­  )Ústatus)rH   r
   r   ÚTEMPLATE_EXTENSION)rA   r
   r   r   r   Ú_handler429~   s   r\   Úreturnc              	   C   sh   t jrt| jdƒrddlm} || ƒS zttjd ƒ}t|ƒ}W || ƒS  t	t
fy3   t}Y || ƒS w )NÚheadlessr   )ÚRateLimitResponsez.handler429)r
   ÚHEADLESS_ENABLEDÚhasattrr4   Úallauth.headless.base.responser_   r   r   ÚROOT_URLCONFÚImportErrorÚAttributeErrorr\   )rA   r_   Ú
handler429r   r   r   Úrespond_429„   s   
þþrg   c                 O   s"   t | g|¢R i |¤Žst| ƒS d S )N)rS   rg   )rA   ÚargsÚkwargsr   r   r   Úconsume_or_429’   s   rj   ) r<   rT   Úcollectionsr   Útypingr   Údjango.confr   Údjango.core.cacher   Údjango.core.exceptionsr   Údjango.httpr   Údjango.shortcutsr   r4   r
   Úallauth.utilsr   r   r   r(   r/   rF   rM   ÚboolrS   rQ   r\   rg   rj   r   r   r   r   Ú<module>   s,    
	