
    si                     |    d 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Zed        Zed	        Zed
        Zy)z,
Rate limiting monitoring views for admins.
    )render)staff_member_required)JsonResponse)cache)settingsNc           	          t        t        dd      t        t        dd      t        t        dd      t        t        dd      t        t        d	g       d
}t        | d|      S )z_
    Display rate limiting status and configuration.
    Only accessible by staff members.
    RATE_LIMIT_ENABLEDTRATE_LIMIT_REQUESTSd   RATE_LIMIT_WINDOW  RATE_LIMIT_BLOCK_DURATIONi  RATE_LIMIT_EXEMPT_PATHS)enabledrequests_limittime_windowblock_durationexempt_pathszadmin/rate_limit_status.html)getattrr   r   )requestcontexts     </var/www/python-projects/worksol/horilla/rate_limit_views.pyrate_limit_statusr      s^     8%94@!(,A3Gx)<dC!(,GN*CRHG '97CC    c                 6   | j                   dk(  r| j                  j                  dd      j                         }|st	        ddid      S d| }t        j                  |d	      }d
| }t        j                  |d      }||dd}|rxt        j                         }|d   }|d   }	t        t        dd      }
||z
  }t        d|
|z
        }|	t        j                  |      t        |      t        t        dd      d|d<   t	        |      S t	        ddid      S )zD
    API endpoint to check the status of a specific IP address.
    POST
ip_address errorIP address is required  statusrate_limit_block_Frate_limit_count_N)r   
is_blockedrequest_datawindow_startcountr   r   r   r
   r   )r)   r(   remaining_time_secondslimitr'   POST method required  )methodr   getstripr   r   timer   r   maxctimeint)r   r   	block_keyr&   	count_keyr'   response_datacurrent_timer(   r)   r   time_in_windowremaining_times                r   check_ip_statusr;      s3   
 ~~\\%%lB7==?
*B CCPP (
|4	YYy%0
 (
|4	yyD1 %$ 
 99;L'7L )E!(,?FK)L8N K.$@AN  $

< 8*-n*= +@#F	-M.) M**"89#FFr   c                 >   | j                   dk(  r| j                  j                  dd      j                         }|st	        ddid      S d| }d	| }t        j                  |       t        j                  |       t	        d
d| d      S t	        ddid      S )z8
    API endpoint to unblock a specific IP address.
    r   r   r   r   r    r!   r"   r$   r%   TzSuccessfully unblocked IP: )successmessager,   r-   )r.   r   r/   r0   r   r   delete)r   r   r5   r6   s       r   
unblock_ipr@   K   s    
 ~~\\%%lB7==?
*B CCPP (
|4	'
|4	YY4ZLA
  	
 "89#FFr   )__doc__django.shortcutsr   %django.contrib.admin.views.decoratorsr   django.httpr   django.core.cacher   django.confr   r1   r   r;   r@    r   r   <module>rH      sa    $ G $ #    D D  *G *GZ G Gr   