
    3+j                     d    S SK r S SKrS SKrS SKrS SKrS SKJr  S rS rS r	S r
 " S S5      rg)	    N)defaultdictc                 J    [         R                  " SS[        U 5      5      S S $ )Nz[\r\n\t]    resubstr)texts    &/tmp/OverburstC2/src/utils/security.pysanitize_logr      s     66+r3t9-ds33    c                 ^    U (       d  g[         R                  " SS[        U 5      5      n U S S $ )Nr   z	[^\w\s.-]d   r   )cmds    r   sanitize_commandr      s*    
&&r3s8
,Ct9r   c                  .    [         R                  " S5      $ )N    )secretstoken_urlsafe r   r   generate_session_tokenr      s      $$r   c                     [         R                  " X!R                  S5      [        R                  5      R                  5       n[         R                  " X5      $ )Nzutf-8)hmacnewencodehashlibsha256	hexdigestcompare_digest)passwordarch
bot_secretexpecteds       r   verify_bot_authr%      s9    xx
KK$8'..ISSUHx22r   c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
RateLimiter   c                 R    Xl         X l        [        [        5      U l        S U l        g N)max_attemptswindow_secondsr   listlogin_attemptslock)selfr+   r,   s      r   __init__RateLimiter.__init__   s"    (,)$/	r   c                     Xl         g r*   )r/   )r0   r/   s     r   set_lockRateLimiter.set_lock   s    	r   c                     US   n[         R                   " 5       nU R                  (       a'  U R                     U R                  X#5      sS S S 5        $ U R                  X#5      $ ! , (       d  f       g = f)Nr   )timer/   _check)r0   addressipnows       r   check_rate_limitRateLimiter.check_rate_limit"   sP    QZiik99{{2+  ;;r'' s   A$$
A2c                    U R                   U    Vs/ s H  o2U-
  U R                  :  d  M  UPM     snU R                   U'   [        U R                   U   5      U R                  :  a  gU R                   U   R	                  U5        gs  snf )NFT)r.   r,   lenr+   append)r0   r:   r;   ts       r   r8   RateLimiter._check,   s    .2.A.A".E"g.EqSWSfSfIf1.E"gBt""2&'4+<+<<B&&s+	 #hs
   BBc                    [         R                   " 5       nU R                  (       a  U R                     [        U R                  R	                  5       5       Hg  nU R                  U    Vs/ s H  o1U-
  U R
                  :  d  M  UPM     snU R                  U'   U R                  U   (       a  MZ  U R                  U	 Mi     S S S 5        g g s  snf ! , (       d  f       g = fr*   )r7   r/   r-   r.   keysr,   )r0   r;   r:   rA   s       r   cleanupRateLimiter.cleanup3   s    iik99t22779:B:>:M:Mb:Q.s:QQ[\U\_c_r_rUrq:Q.sD''+..r22 //3 ;   /t s)   8C+CC"C1CC
C)r/   r.   r+   r,   N)   i,  )
__name__
__module____qualname____firstlineno__r1   r4   r<   r8   rE   __static_attributes__r   r   r   r'   r'      s    (4r   r'   )r   r   r   r   r7   collectionsr   r   r   r   r%   r'   r   r   r   <module>rN      s5    	     #4%3"4 "4r   