Ë
    0]j  ã                   ó˜   — 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mZmZ d dlmZmZmZmZmZ  ee«      Z G d„ d	ee«      Zy
)é    )Ú	getLogger)ÚOptional)Úimport_string)Únow)Úsettings)ÚAxesBaseHandlerÚAbstractAxesHandlerÚAxesHandler)Úget_client_ip_addressÚget_client_user_agentÚget_client_path_infoÚget_client_http_acceptÚ
toggleablec            
       óÞ  — e Zd ZdZdZeddedefd„«       Zeddddœde	e
   d	e	e
   d
edefd„«       Zeddœde	e   defd„«       Zeddœde	e   defd„«       Zeddœd	e
de	e   defd„«       Zed„ «       Zedde	e   defd„«       Zedde	e   defd„«       Zedde	e   defd„«       Zeeddefd„«       «       Zeed„ «       «       Zeed„ «       «       Zeed„ «       «       Zeed„ «       «       Zy)ÚAxesProxyHandlera«  
    Proxy interface for configurable Axes signal handler class.

    If you wish to implement a custom version of this handler,
    you can override the settings.AXES_HANDLER configuration string
    with a class that implements a compatible interface and methods.

    Defaults to using axes.handlers.proxy.AxesProxyHandler if not overridden.
    Refer to axes.handlers.proxy.AxesProxyHandler for default implementation.
    NFÚforceÚreturnc                 ó|   — |s| j                   s# t        t        j                  «      «       | _         | j                   S )zÛ
        Fetch and initialize configured handler implementation and memoize it to avoid reinitialization.

        This method is re-entrant and can be called multiple times from e.g. Django application loader.
        )Úimplementationr   r   ÚAXES_HANDLER)Úclsr   s     úJ/var/www/zogu/zoguvenv/lib/python3.12/site-packages/axes/handlers/proxy.pyÚget_implementationz#AxesProxyHandler.get_implementation%   s3   € ñ ˜×*Ò*Ø!E¤¬x×/DÑ/DÓ!EÓ!GˆCÔØ×!Ñ!Ð!ó    ©Ú
ip_addressÚusernameÚip_or_usernamer   r   r   c                óF   — | j                  «       j                  |||¬«      S )Nr   )r   Úreset_attempts)r   r   r   r   s       r   r    zAxesProxyHandler.reset_attempts1   s,   € ð ×%Ñ%Ó'×6Ñ6Ø!¨HÀ^ð 7ó 
ð 	
r   ©Úage_daysr"   c                óB   — | j                  «       j                  |¬«      S ©Nr!   )r   Ú
reset_logs©r   r"   s     r   r%   zAxesProxyHandler.reset_logs=   s   € à×%Ñ%Ó'×2Ñ2¸HÐ2ÓEÐEr   c                óB   — | j                  «       j                  |¬«      S r$   )r   Úreset_failure_logsr&   s     r   r(   z#AxesProxyHandler.reset_failure_logsA   s   € à×%Ñ%Ó'×:Ñ:ÀHÐ:ÓMÐMr   )Úlimitr)   c                óB   — | j                  «       j                  |¬«      S )N)r   )r   Ú remove_out_of_limit_failure_logs)r   r   r)   s      r   r+   z1AxesProxyHandler.remove_out_of_limit_failure_logsE   s)   € ð ×%Ñ%Ó'×HÑHØð Ió 
ð 	
r   c                 ó<  — | €t         j                  d«       yt        | d«      sxt        | d«      sd| _        t	        «       | _        t        | «      | _        t        | «      | _	        t        | «      | _        t        | «      | _        d| _        d| _        d| _        yy)z`
        Update request attributes before passing them into the selected handler class.
        NzVAXES: AxesProxyHandler.update_request can not set request attributes to a None requestÚaxes_updatedÚaxes_locked_outFT)ÚlogÚerrorÚhasattrr.   r   Úaxes_attempt_timer   Úaxes_ip_addressr   Úaxes_user_agentr   Úaxes_path_infor   Úaxes_http_acceptÚaxes_failures_since_startr-   Úaxes_credentials)Úrequests    r   Úupdate_requestzAxesProxyHandler.update_requestM   s•   € ð ˆ?Ü�I‰IØhôð Ü�w Ô/Ü˜7Ð$5Ô6Ø*/�Ô'Ü(+«ˆGÔ%Ü&;¸GÓ&DˆGÔ#Ü&;¸GÓ&DˆGÔ#Ü%9¸'Ó%BˆGÔ"Ü'=¸gÓ'FˆGÔ$Ø04ˆGÔ-Ø#'ˆGÔ Ø'+ˆGÕ$ð 0r   Úcredentialsc                 ód   — | j                  |«       | j                  «       j                  ||«      S ©N)r:   r   Ú	is_locked©r   r9   r;   s      r   r>   zAxesProxyHandler.is_lockedd   s,   € à×Ñ˜7Ô#Ø×%Ñ%Ó'×1Ñ1°'¸;ÓGÐGr   c                 ód   — | j                  |«       | j                  «       j                  ||«      S r=   )r:   r   Ú
is_allowedr?   s      r   rA   zAxesProxyHandler.is_allowedi   s,   € à×Ñ˜7Ô#Ø×%Ñ%Ó'×2Ñ2°7¸KÓHÐHr   c                 ód   — | j                  |«       | j                  «       j                  ||«      S r=   )r:   r   Úget_failuresr?   s      r   rC   zAxesProxyHandler.get_failuresn   s,   € à×Ñ˜7Ô#Ø×%Ñ%Ó'×4Ñ4°W¸kÓJÐJr   c                 ój   — | j                  |«        | j                  «       j                  |||fi |¤ŽS r=   )r:   r   Úuser_login_failed)r   Úsenderr;   r9   Úkwargss        r   rE   z"AxesProxyHandler.user_login_faileds   s?   € ð 	×Ñ˜7Ô#Ø9ˆs×%Ñ%Ó'×9Ñ9Ø�K ñ
Ø,2ñ
ð 	
r   c                 ój   — | j                  |«        | j                  «       j                  |||fi |¤ŽS r=   )r:   r   Úuser_logged_in©r   rF   r9   ÚuserrG   s        r   rI   zAxesProxyHandler.user_logged_in{   s8   € ð 	×Ñ˜7Ô#Ø6ˆs×%Ñ%Ó'×6Ñ6°v¸wÈÑWÐPVÑWÐWr   c                 ój   — | j                  |«        | j                  «       j                  |||fi |¤ŽS r=   )r:   r   Úuser_logged_outrJ   s        r   rM   z AxesProxyHandler.user_logged_out�   s8   € ð 	×Ñ˜7Ô#Ø7ˆs×%Ñ%Ó'×7Ñ7¸ÀÈÑXÐQWÑXÐXr   c                 óD   —  | j                  «       j                  |fi |¤ŽS r=   )r   Úpost_save_access_attempt©r   ÚinstancerG   s      r   rO   z)AxesProxyHandler.post_save_access_attempt‡   s&   € ð Aˆs×%Ñ%Ó'×@Ñ@ÀÑTÈVÑTÐTr   c                 óD   —  | j                  «       j                  |fi |¤ŽS r=   )r   Úpost_delete_access_attemptrP   s      r   rS   z+AxesProxyHandler.post_delete_access_attemptŒ   s&   € ð Cˆs×%Ñ%Ó'×BÑBÀ8ÑVÈvÑVÐVr   )Fr=   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚclassmethodÚboolr
   r   r   ÚstrÚintr    r%   r(   r+   Ústaticmethodr:   Údictr>   rA   rC   r   rE   rI   rM   rO   rS   © r   r   r   r      s7  „ ñ	ð €Nàñ	" tð 	"¸ò 	"ó ð	"ð ð %)Ø"&Ø$ò	
ð ˜S‘Mð	
ð ˜3‘-ð		
ð
 ð	
ð 
ò	
ó ð	
ð Ø59ò F X¨c¡]ð F¸cò Fó ðFð Ø=Aò N¨X°c©]ð NÀcò Nó ðNð à6:ò
Øð
Ø&.¨s¡mð
à	ò
ó ð
ð ñ,ó ð,ð, ñH¨X°d©^ð HÀtò Hó ðHð ñI¨h°t©nð IÈò Ió ðIð ñK°¸±ð KÈ#ò Kó ðKð Øñ
°Dò 
ó ó ð
ð ØñXó ó ðXð ØñYó ó ðYð ØñUó ó ðUð ØñWó ó ñWr   r   N)Úloggingr   Útypingr   Údjango.utils.module_loadingr   Údjango.utils.timezoner   Ú	axes.confr   Úaxes.handlers.baser   r	   r
   Úaxes.helpersr   r   r   r   r   rT   r/   r   r^   r   r   ú<module>rf      sE   ðõ Ý å 5Ý %å ß PÑ P÷õ ñ �Ó€ôxWÐ*¨Oõ xWr   