
    )Jf                     t    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mZ  G d d          ZdS )    N)sha1)app_settings)Authenticator)decryptencryptc                   j    e Zd Zd Zed             Zed             Zd Zd Zd Z	d Z
d Zd	 Zd
 ZdS )RecoveryCodesc                     || _         d S N)instance)selfr   s     ]/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/allauth/mfa/recovery_codes.py__init__zRecoveryCodes.__init__   s         c                 d   t           j                            |t           j        j                                                  }|r | |          S t          |t           j        j        t          |                                           dd          }|                                  | |          S )N)usertyper   )seed	used_mask)r   r   data)	r   objectsfilterTypeRECOVERY_CODESfirstr   generate_seedsave)clsr   r   s      r   activatezRecoveryCodes.activate   s     (//M.= 0 
 

%'' 	  	!3x==  #2 1 1 3 344 
 
 
 	s8}}r   c                 x    t          j        t          j        d                                        d          }|S )N   ascii)binasciihexlifyosurandomdecode)r   keys     r   r   zRecoveryCodes.generate_seed"   s-    rz"~~..55g>>
r   c                 `    | j         j                            d          }|d |D             S d S )Nmigrated_codesc                 ,    g | ]}t          |          S  )r   ).0codes     r   
<listcomp>z5RecoveryCodes._get_migrated_codes.<locals>.<listcomp>*   s    444dGDMM444r   )r   r   get)r   codess     r   _get_migrated_codesz!RecoveryCodes._get_migrated_codes'   s=    "&&'78844e4444 r   c                    |                                  }||S g }t          | j        j        d                   }t	          j        |                    d          d t                    }t          t          j
                  D ]}|                    |dd                    d                     t          j        d|                                d d                   d	         }|d
z  }|d}|                    |           |S )Nr   r"   )r(   msg	digestmod3,zutf-8z>I   r   i 08)r2   r   r   r   hmacnewencoder   ranger   RECOVERY_CODE_COUNTupdatestructunpackdigestappend)r   r*   retr   hivalue	fmt_values           r   generate_codeszRecoveryCodes.generate_codes,   s    1133%!!t})&122HW--44HHH|788 	" 	"AHHiiii''00111M$

2A277:EUNE IJJy!!!!
r   c                 P    | j         j        d         }t          |d|z  z            S Nr      )r   r   boolr   rF   r   s      r   _is_code_usedzRecoveryCodes._is_code_used<   s(    M&{3	Ia()))r   c                     | j         j        d         }|d|z  z  }|| j         j        d<   | j                                          d S rK   )r   r   r   rN   s      r   _mark_code_usedzRecoveryCodes._mark_code_used@   sH    M&{3	Q!V	*3;'r   c                     |                                  }||S g }t          |                                           D ]0\  }}|                     |          r|                    |           1|S r   )r2   	enumeraterI   rO   rC   )r   r*   rD   rF   r.   s        r   get_unused_codeszRecoveryCodes.get_unused_codesF   s~    1133%!! !4!4!6!677 	 	GAt!!!$$ JJt
r   c                 "   |                                  }|d S 	 |                    |          }| j        j        d         }|                    |           || j        j        d<   | j                                         dS # t          $ r Y dS w xY w)Nr*   TF)r2   indexr   r   popr   
ValueError)r   r.   r*   idxs       r   _validate_migrated_codez%RecoveryCodes._validate_migrated_codeR   s    1133!4		 &&t,,C "]/0@ANs###3ADM/0M   4  	 	 	55	s   B   
BBc                     |                      |          }||S t          |                                           D ]9\  }}|                     |          r||k    r|                     |            dS :dS )NTF)rZ   rS   rI   rO   rQ   )r   r.   rD   rF   cs        r   validate_codezRecoveryCodes.validate_codea   s    **400?Jd113344 	 	DAq!!!$$ qyy$$Q'''tt  ur   N)__name__
__module____qualname__r   classmethodr   r   r2   rI   rO   rQ   rT   rZ   r]   r,   r   r   r	   r	      s        ! ! !   ["   [5 5 5
   * * *  
 
 
      r   r	   )r#   r:   r%   r@   hashlibr   allauth.mfar   allauth.mfa.modelsr   allauth.mfa.utilsr   r   r	   r,   r   r   <module>rf      s      				        $ $ $ $ $ $ , , , , , , . . . . . . . .` ` ` ` ` ` ` ` ` `r   