
    ZeIiD              
         d dl mZ d dlZd dlZd dlm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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mZmZmZmZmZm Z  dZ!n# e"$ r dZ!Y nw xY w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- ddl.m/Z/m0Z0  ej        d          d=d            Z1e12                    d          ed=d                        Z3e12                    d           ej4        ddd !           ej4        d"dd#!           ej4        d$dd%!           ej4        d&dd'!           ej4        d(dd)!          e	 	 	 	 	 d>d?d3                                                                                    Z5e12                    d4           ej4        ddd !           ej4        d"dd#!           ej4        d$dd%!           ej4        d&ddd56           ej4        d7dd89          e	 	 	 	 d@dAd;                                                                                    Z6e7d<k    r e1             dS dS )B    )annotationsN)partial)ClickException)current_app)with_appcontext)Consolegroup)Live)Pretty)Confirm)Table)Tree   )get_filtered_endpointlimiter_themerender_funcrender_limitrender_limitsrender_storagerender_strategyTF)	TypedDict)Rule)Limiter)RuntimeLimit)Callable	Generator)
ConfigVarsHeaderNamesz,Flask-Limiter maintenance & utility commands)helpreturnNonec                 2    t           st          d          d S )NziMissing dependencies for flask-limiter cli. Please install the cli extra (pip install flask-limiter[cli]))CLI_DEPS_AVAILABLEr        [/var/www/html/MCyber-Diagnostic/venv/lib/python3.11/site-packages/flask_limiter/commands.pyclir'   *   s)     
w
 
 	

 
r%   z View the extension configurationc                 |   t          j                    5  t          t                    } t	          t           j                            dt                                          }|ot	          |          d         }|rt          d          }|	                    d           |	                    d           |	                    d           |
                    d	t          j        t          |j                             |
                    d
t          j        t!          |j                             |
                    dt          j        t          |j                             t)          t          j                  }t)          t-          |j                            }|                    t          j                  }|                    d           |                    d           |                    t          j                   |                    d           |                    t7          |                     |
                    d||           |j        j        r|
                    dt          j        t          d |j        j        D                                  |
                    d t          j        t          |j                              |
                    d t          j!        t!          |j"                             |
                    d t          j#        t!          |j$                             |
                    d t          j%        t          |j&                             n.|
                    dt          j        t          g                      |j        j'        r|
                    dt          j(        t          d |j        j'        D                                  |
                    d t          j)        t          |j*                             |
                    d t          j+        t!          |j,                             |
                    d t          j-        t!          |j.                             |
                    d t          j/        t!          |j0                             n.|
                    dt          j(        t          g                      |j1        rI|
                    dt          j2        t          d tg          j4        |j1         D                                  |j5        rt)          t          j6                  }|                    t          j7                   |                    t          j8                   |                    t          j9                   |                    t          j:                   t)          t          |j5                            }|                    t          |j;        tx          j=                                      |                    t          |j;        tx          j>                                      |                    t          |j;        tx          j?                                      |                    t          |j@                             |
                    d||           n.|
                    dt          j6        t          d                     |
                    dt          jA        t          |jB                             |
                    dt          jC        t!          |jD                             | E                    |           n| E                    dt            d           d d d            d S # 1 swxY w Y   d S )Nthemelimiterr   zFlask-Limiter Config)titleNotesConfigurationValueEnabledzKey Functionz
Key PrefixInstanceBackendStatuszRate Limiting ConfigApplication Limitsc                ,    g | ]}t          |          S r$   r   .0limits     r&   
<listcomp>zconfig.<locals>.<listcomp>S   s     ccce,,cccr%   zApplicationLimits LimitszDefault Limitsc                ,    g | ]}t          |          S r$   r6   r7   s     r&   r:   zconfig.<locals>.<listcomp>t   s     bbbEL//bbbr%   zMeta Limitsc                ,    g | ]}t          |          S r$   r6   r7   s     r&   r:   zconfig.<locals>.<listcomp>   s     aaae,,aaar%   zHeader configurationFzFail on first breachzOn breach callback(No Flask-Limiter extension installed on bold redstyle)Fr   test_request_contextr   r   list
extensionsgetsetr   
add_columnadd_rowr   ENABLEDr   enabledKEY_FUNCr   	_key_func
KEY_PREFIX_key_prefixr   STRATEGYr   r+   addSTORAGE_URISTORAGE_OPTIONSr   limit_managerapplication_limitsAPPLICATION_LIMITSAPPLICATION_LIMITS_PER_METHOD_application_limits_per_methodAPPLICATION_LIMITS_EXEMPT_WHEN_application_limits_exempt_whenAPPLICATION_LIMITS_DEDUCT_WHEN_application_limits_deduct_whenAPPLICATION_LIMITS_COST_application_limits_costdefault_limitsDEFAULT_LIMITSDEFAULT_LIMITS_PER_METHOD_default_limits_per_methodDEFAULT_LIMITS_EXEMPT_WHEN_default_limits_exempt_whenDEFAULT_LIMITS_DEDUCT_WHEN_default_limits_deduct_whenDEFAULT_LIMITS_COST_default_limits_cost_meta_limitsMETA_LIMITS	itertoolschain_headers_enabledHEADERS_ENABLEDHEADER_RESETHEADER_REMAININGHEADER_RETRY_AFTERHEADER_RETRY_AFTER_VALUE_header_mappingr   RESET	REMAININGRETRY_AFTER_retry_afterFAIL_ON_FIRST_BREACH_fail_on_first_breach	ON_BREACH
_on_breachprint)	consolelimitersr+   extension_detailslimiter_configlimiter_config_valuesnodeheader_configsheader_valuess	            r&   configr   2   si    
	)	+	+ F F....229ceeDDEE0tH~~a0 B	 %,B C C C((111((999((111%%i1CVGOE\E\]]]%%
 3[AR5S5S   %%j3VG<O5P5P   "*"566N$()I)I$J$J!!%%j&<==DHHZ   HHYz9:::x(((!%%nW&=&=>>>%%&<nNcddd$7 !!))(1cc':O:bccc    "))<7ABB  
 "))= GHH  
 "))= GHH  
 "))67;<<    ")).12JJ  
 $3 c!))$-bbW=R=abbbcc  
 "))87=>>  
 "))9 CDD  
 "))9 CDD  
 "))2 <==    "))*:J<UW]^`WaWabbb# !))!*aa)/7K_:`aaa    ' !%j&@!A!A"":#:;;;"":#>???"":#@AAA"":#FGGG $VG,D%E%E F F!!&)@AR)S"T"TUUU!!&)@AV)W"X"XYYY!!&)@AX)Y"Z"Z[[[!!&)=">">???!))*"!    "))*J,Fu   %%&/w455  
 %%$$G.//   MM+,,,,MMH;HH     GF F F F F F F F F F F F F F F F F Fs   ^^11^58^5z3Enumerate details about all routes with rate limitsz
--endpointzEndpoint to filter by)defaultr   z--pathzPath to filter byz--methodzHTTP Method to filter byz--keyzTest the limitz--watch/--no-watchzCreate a live dashboardGETendpoint
str | Nonepathmethodstrkeywatchboolc                @    t          j                    5  t           j                            dt	                                }|rt          |          d         nd t          t                    }roj        }i t          t           |           }t          t           j                            |          d           D ]d}	|	j        }
|
dk    rt          |
                    d                    dk    rd                    |
                    d          d d	                   }                    |g                               t'          t(          t           |                    t           |
|          |
||	|                    t           |
|          

  
                                       dg                               t'          t(          t           |                    t           |
d          |
d |	|                    t           |
d           

  
                   ft/                      d fd            }|s|                     |                       nt3           |            |dd          5 }	 	 |                     |                       t7          j        d           n# t:          $ r Y nw xY wD	 d d d            n# 1 swxY w Y   n|                    dt            d           d d d            d S # 1 swxY w Y   d S )Nr+   r   r)   c                     t          |           S Nr   rs    r&   <lambda>zlimits.<locals>.<lambda>       sSTvv r%   r   static.r   )exemption_scoper   testroot r    r   c            	   3    K   rtj         j        rhsfsdt          t          t	          t          j        j                   g fd          V  t          t          j         j        g fd          V  D ]Q} | dk    rt          dt          j	         d          nt          d|  d          fd	|          D              V  Rd S )
Nz[gold3]Meta Limits[/gold3])r   r   labelz![gold3]Application Limits[/gold3]r   z[gold3]z[/gold3]z[blue]z[/blue]c                J    g | ]}                      |                       S r$   )rO   )r8   
renderable
group_trees     r&   r:   z6limits.<locals>.console_renderable.<locals>.<listcomp>  s+    QQQjZ^^JJLL11QQQr%   )
rR   rS   r   r   rB   ri   rj   rg   r   name)r   r   r   groupsr   r+   r   r   s    @r&   console_renderablez"limits.<locals>.console_renderable   s?      w4G QY ]a '#iow/CDEErJ %:      (# .A2F %A      # % %Dv~~%)*NK4D*N*N*N%O%O

%)*@4*@*@*@%A%A
QQQQF4LQQQQ$$$$$% %r%   g?T)r{   refresh_per_secondscreenr=   r>   r?   )r    r   )r   rA   rC   rD   rE   rB   r   r   rR   r   sortedurl_map
iter_rulesr   lensplitjoin
setdefaultappendr   r   resolve_limitsr   r	   rz   r
   updatetimesleepKeyboardInterrupt)r   r   r   r   r   r|   r{   managerfilter_endpointrulerule_endpointbp_fullnamer   liver   r+   s   ````          @@r&   limitsr      s)    
	)	+	+ a a!,!7!;!;Isuu!M!M7?"I$x.."3"3T... ]	+G;=F3K(TXZ`aaO#..??EUEU   ( ( !% H,,}**3//00144"%((=+>+>s+C+CCRC+H"I"IK%%k266==)'##22;{[[)' ,3,C,C +]K- - $*!$     " %%fb1188)'##22;rRR)  ,3,C,C +]D- - $*!$     " WW% % % % % % % % % % W%4  "00223333&&((#'*	   "
 "" KK(:(:(<(<=== JsOOOO0 " " "!E"	"
 "" " " " " " " " " " " " " " " MMH;HH     }a a a a a a a a a a a a a a a a a asZ   I.LK1J=<K=
K
K	K

KLK	L"K	##LLLzClear limits for a specific keyzKey to reset the limits for)r   requiredr   z-yzSkip prompt for confirmation)is_flagr   yc                B   t          j                    5  t          t           j                            dt                                          }|r|d         nd }t          t                    }|rv|j        }t          t           ||||          }	 G d dt                    }
i }t          t           j                            |	          d           D ]}|j        }|dk    rt          |                    d	                    d
k    r[d	                    |                    d	          d d                   } |
||                    t           ||                    ||<    |
||                    t           |d                    ||<   d }|	s|j        j        }|s|r.|                    t+          t           ||g fd|                      |                                D ]F\  }}|d         r9|                    t+          t           ||d         ||d         |                      G|st/          j        d|  d          r|rt3          d          }|D ]\}|j                            |j        | |                    d|                     |                    t?          |           d           ]|                    |           |                                D ]\  }}|d         rt3          |          }|d         \  }}||z   D ]}|j         r]|d         rU|d         j!        rH|sF|d         j!        D ]7}|j                            |j        | |                    ||                     8n5|j                            |j        | |                    ||                     |                    t?          |           d           |                    |           n|                    dt            d           d d d            d S # 1 swxY w Y   d S )Nr+   r   r)   c                  $    e Zd ZU ded<   ded<   dS )clear.<locals>.Detailsr   r   ztuple[list[RuntimeLimit], ...]r   N)__name__
__module____qualname____annotations__r$   r%   r&   Detailsr   F  s'         


666666r%   r   c                     t          |           S r   r   r   s    r&   r   zclear.<locals>.<lambda>L  r   r%   r   r   r   r   r   )r   r   r   r4   )r   r   r   r   )r   r   z/Proceed with resetting limits for key: [danger]z
[/danger]?z: [success]Cleared[/success]r=   r>   r?   )"r   rA   rB   rC   rD   rE   r   r   rR   r   r   r   r   r   r   r   r   r   r   rS   rz   r   itemsr   askr   r+   clearr9   	scope_forrO   r   
per_methodmethods)r   r   r   r   r   r|   r+   r{   r   r   r   rule_limitsr   r   r   rS   detailsr   r9   r   	decoratedrule_methods                         r&   r   r   0  sI    
	)	+	+ a a.229ceeDDEE19"C(1++t... ]	+G3K(TXZ`aaO7 7 7 7 7) 7 7 7 /1K#..??EUEU     !% H,,}**3//00144"%((=+>+>s+C+CCRC+H"I"IK18!&55k=R]^^2 2 2K..
 29!&55k=RTUU2 2 2K.. "&" N%,%:%M" % 	MM%'#/4"6!$     *5):):)<)<  %Hgx( 
) + ' ' 1 (%,V_%(  	 	 	  #,GK aRU a a abb #,% 	( 455D!3 W W--!K!OOB77  
 L$7$7!U!U!UVVVVMM$''')4):):)<)< , ,%Hgx( ,#H~~-4X->*%,y%8 [ [E % 0"$+FO" %,FO$;" )/	" 4;6?3J !& !&K$+O$9$9(-(+(-+(N(N%& %& %& %&!& !( 5 5$)K$'$)OOHf$E$E!" !" !"
 !HHU(;(;%Y%Y%YZZZZd+++MMH;HH     }a a a a a a a a a a a a a a a a a as   O3PPP__main__)r    r!   )NNr   NF)r   r   r   r   r   r   r   r   r   r   r    r!   )NNr   F)r   r   r   r   r   r   r   r   r   r   r    r!   )8
__future__r   ri   r   	functoolsr   clickr   flaskr   	flask.clir   rich.consoler   r	   	rich.liver
   rich.prettyr   rich.promptr   
rich.tabler   	rich.treer   _clir   r   r   r   r   r   r   r#   ImportErrortyping_extensionsr   werkzeug.routingr   
_extensionr   _limitsr   _typingr   r   	constantsr   r   r'   commandr   optionr   r   r   r$   r%   r&   <module>r      sw   " " " " " "                               % % % % % %++++++++""""""######                            ' ' ' ' ' ' ! ! ! ! ! !       ! ! ! ! ! ! ( ( ( ( ( ( ( ( . . . . . . . . @AAA
 
 
 BA
 455G G G  65GT GHHlD/FGGGh+>???j$-GHHHgt*:;;;"E8QRRRh h h h  SR <; IH @? HG IHhV 344lD/FGGGh+>???j$-GHHHgtd9VWWWdD'EFFF  h h h h  GF XW IH @? HG 54hV zCEEEEE s   :A' 'A10A1