
    f+                        d dl Z d dlZd dlZd dlZ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mZ dZdded	efd
Zdded	efdZd	efdZdeded	efdZded	efdZded	efdZdeded	efdZ G d d      Zy)    N)cache)context)app_settings)Authenticator)decryptencryptzmfa.totp.secretlengthreturnc                 t    t        j                  |       }t        j                  |      j	                  d      S )Nzutf-8)secretstoken_bytesbase64	b32encodedecode)r	   random_bytess     Y/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/mfa/totp/internal/auth.pygenerate_totp_secretr      s.    &&v.LL)0099    
regeneratec                     d }| s-t         j                  j                  j                  t              }|s+t               x}t         j                  j                  t        <   |S N)r   requestsessiongetSECRET_SESSION_KEYr   )r   secrets     r   get_totp_secretr      sJ    F((,,-?@?S?UU(();<Mr   c                  b    t        t        j                               } | t        j                  z  S r   )inttimer   TOTP_PERIOD)current_times    r   hotp_counter_from_timer#   !   s#    tyy{#L<3333r   r   counterc                    t        j                  d|      }t        j                  | j	                  d      d      }t        j                  ||t        j                        j                         }|d   dz  }t        |||dz          }|d   d	z  |d<   t        j                  d
|      d   }|dt        j                  z  z  }|S )Nz>QasciiT)casefold      r      z>I
   )structpackr   	b32decodeencodehmacnewhashlibsha1digest	bytearrayunpackr   TOTP_DIGITS)r   r$   counter_bytes
secret_enchmac_resultoffsettruncated_hashvalues           r   
hotp_valuer?   &   s    KKg.M!!&--"84HJ((:}gllCJJLK_t#F{6FQJ?@N&q)D0N1MM$/2E	R))))ELr   r>   c                 .    | dt         j                   dS )N0 )r   r8   )r>   s    r   format_hotp_valuerC   8   s    Al../p/01r   codec                 B    t        | xr t        j                  | k(        S r   )boolr   TOTP_INSECURE_BYPASS_CODE)rD   s    r   _is_insecure_bypassrH   <   s    G??4GHHr   c                 ^    t        |      ryt        | t                     }|t        |      k(  S )NT)rH   r?   r#   rC   )r   rD   r>   s      r   validate_totp_coderJ   @   s.    4 v578E$U+++r   c                   v    e Zd ZdeddfdZededd fd       ZdedefdZ	dedefd	Z
dedefd
ZdeddfdZy)TOTPinstancer
   Nc                     || _         y r   )rM   )selfrM   s     r   __init__zTOTP.__init__H   s	     r   r   c                     t        |t         j                  j                  dt        |      i      }|j	                           | |      S )Nr   )usertypedata)r   TyperL   r   save)clsrR   r   rM   s       r   activatezTOTP.activateK   s=     M..338WV_:U
 	8}r   rD   c                     t        |      ry| j                  |      ryt        | j                  j                  d         }t        ||      }|r| j                  |       |S )NTFr   )rH   _is_code_usedr   rM   rT   rJ   _mark_code_used)rO   rD   r   valids       r   validate_codezTOTP.validate_codeS   sY    t$d#++H56"640  &r   c                 :    d| j                   j                   d| S )Nzallauth.mfa.totp.used?user=z&code=)rM   user_idrO   rD   s     r   _get_used_cache_keyzTOTP._get_used_cache_key_   s     ,T]]-B-B,C6$PPr   c                 P    t        j                  | j                  |            dk(  S )Ny)r   r   ra   r`   s     r   rZ   zTOTP._is_code_usedb   s!    yy11$78C??r   c                 n    t        j                  | j                  |      dt        j                         y )Nrc   )timeout)r   setra   r   r!   r`   s     r   r[   zTOTP._mark_code_usede   s#    		$**40#|?W?WXr   )__name__
__module____qualname__r   rP   classmethodstrrX   rF   r]   ra   rZ   r[    r   r   rL   rL   G   s    ! !4 ! C F  
# 
$ 
Q Q Q@# @$ @YC YD Yr   rL   )   )F)r   r3   r1   r   r-   r    django.core.cacher   allauth.corer   allauth.mfar   allauth.mfa.modelsr   allauth.mfa.utilsr   r   r   r   rk   r   rF   r   r#   r?   rC   rH   rJ   rL   rl   r   r   <module>rs      s          #   $ , . ' : :c :
  4 4
s S S $2S 2S 2Ic Id I,s ,# ,$ ,Y Yr   