
    f<                         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  ed	d
      Zd Zd Zd ZddddZddddZddddZddddZd Zd Zy)    N)
namedtuple)settings)cache)ImproperlyConfigured)renderapp_settings)import_callableRatezamount duration perc                     t        |       dk(  rt        |       | d   }| dd }ddddd}||vrt        d|z        t        |      dk(  rd}nt        |      }|||   z  S )	Nr      <   i  iQ )smhdzInvalid duration unit: %s)len
ValueErrorfloat)durationunitvalueunit_maps       Q/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/core/ratelimit.py_parse_durationr      s|    
8}""B<DQrNERd7H84t;<<
5zQe8D>!!    c                     | j                  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   pers        r   _parse_rater)       sm    JJsOE
5zQ 	Uq %#[Fx(H#&&r   c                     g }| rR| j                         } | r@| j                  d      }|D ]*  }|j                  t        |j                                      , |S )N,)stripr#   appendr)   )ratesretr&   parts       r   _parse_ratesr1   .   sQ    
CKK$E 6

;tzz|456Jr   )keyuserc                   ddl m} |j                  dk(  rd |       j                  |       f}n|j                  dk(  rG|-| j                  j
                  st        d      | j                  }dt        |j                        f}ng|j                  dk(  rC|t        d      t        j                  |j                  d            j                         }|f}nt        |j                        d	d
|g|}dj                  |      S )Nr   )get_adapterr!   r3   z2ratelimit configured per user but used anonymouslyr2   z1ratelimit configured per key but no key specifiedutf8allauthrl:)allauth.account.adapterr5   r(   get_client_ipr3   is_authenticatedr   strpkhashlibsha256encode	hexdigestr   join)	requestactionr%   r2   r3   r5   sourcekey_hashkeyss	            r   
_cache_keyrI   9   s    3xx433G<=	V	<<<00*H  <<D#dgg,'	U	;&C  >>#**V"45??A""tV-f-D88D>r   c                    ddl m} t        |j                  j	                  |            }|D ]'  }t        | ||||      }t        j                  |       ) y )Nr   r   rE   r%   r2   r3   )allauth.accountr	   r1   RATE_LIMITSgetrI   r   delete)rD   rE   r2   r3   r	   r.   r%   	cache_keys           r   clearrQ   S   sN    ,1155f=>E  wvDcPTU	Y r   c                    ddl m} | r| j                  dk(  ryt        |j                  j                  |            }|syd}|D ]  }t        | ||||      rd} |S )Nr   r   GETTrK   F)rL   r	   methodr1   rM   rN   _consume_rate)rD   rE   r2   r3   r	   r.   allowedr%   s           r   consumerW   \   sg    ,gnn-1155f=>EG WV$CdSG Nr   c                   t        | ||||      }t        j                  |g       }t        j                         }|r=|d   ||j                  z
  k  r(|j                          |r|d   ||j                  z
  k  r(t        |      |j                  k  }|r3|j                  d|       t        j                  |||j                         |S )NrK   r   r   )
rI   r   rN   timer   popr   r'   insertset)	rD   rE   r%   r2   r3   rP   historynowrV   s	            r   rU   rU   m   s    76#DQIii	2&G
))+C
gbkS4==%88 gbkS4==%88'lT[[(Gq#		)Wdmm4Nr   c                 D    ddl m} t        | d|j                  z   d      S )Nr   r   z429.i  )status)rL   r	   r   TEMPLATE_EXTENSION)rD   r	   s     r   _handler429rb   z   s    ,'6L$C$CCCPPr   c                     t        | g|i |sdt        j                  r$t        | j                  d      rddlm}  ||       S 	 t        t        j                  dz         }t        |      } ||       S y # t        t        f$ r	 t        }Y  w xY w)Nheadlessr   )RateLimitResponsez.handler429)rW   r	   HEADLESS_ENABLEDhasattrr7   allauth.headless.base.responsere   r
   r   ROOT_URLCONFImportErrorAttributeErrorrb   )rD   argskwargsre   
handler429s        r   consume_or_429ro      s    7,T,V,((WW__j-QH$W--	%()>)>)NOJ(4J '"" - ^, 	%$J	%s   'A5 5BB)r?   rY   collectionsr   django.confr   django.core.cacher   django.core.exceptionsr   django.shortcutsr   r7   r	   allauth.utilsr
   r   r   r)   r1   rI   rQ   rW   rU   rb   ro    r   r   <module>rw      sy      "   # 7 #   ) &/0"' .2 4 #'T   %)t " 154 
Q#r   