o
    Lf                     @   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	 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ZdddddZdd ZdS )    N)
namedtuple)cache)ImproperlyConfigured)render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  iQ )smhdzInvalid duration unit: %s)len
ValueErrorfloat)durationunitvalueunit_map r   W/var/www/html/humari/django-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_rates*   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   r+   z2ratelimit configured per user but used anonymouslyr*   z1ratelimit configured per key but no key specifiedutf8allauthrl:)allauth.account.adapterr,   r!   get_client_ipr+   is_authenticatedr   strpkhashlibsha256encode	hexdigestr   join)	requestactionr   r*   r+   r,   sourcekey_hashkeysr   r   r   
_cache_key5   s*   




r@   c                C   sF   ddl m} t|j|}|D ]}t| ||||d}t| qd S )Nr   app_settingsr<   r   r*   r+   )allauth.accountrB   r)   RATE_LIMITSgetr@   r   delete)r;   r<   r*   r+   rB   r&   r   	cache_keyr   r   r   clearO   s   rI   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   rA   GETTrC   F)rD   rB   methodr)   rE   rF   _consume_rate)r;   r<   r*   r+   rB   r&   allowedr   r   r   r   consumeX   s   rN   c          	      C   s   t | ||||d}t|g }t }|r-|d ||j kr-|  |r-|d ||j kst||jk }|rD|d| t	|||j |S )NrC   r   r   )
r@   r   rF   timer   popr   r    insertset)	r;   r<   r   r*   r+   rH   historynowrM   r   r   r   rL   i   s   rL   c                 O   s:   ddl m} t| g|R i |st| d|j ddS d S )Nr   rA   z429.i  )status)rD   rB   rN   r   TEMPLATE_EXTENSION)r;   argskwargsrB   r   r   r   consume_or_429v   s   rY   )r6   rO   collectionsr   django.core.cacher   django.core.exceptionsr   django.shortcutsr   r   r   r"   r)   r@   rI   rN   rL   rY   r   r   r   r   <module>   s    
	