a
    Šxd  ã                   @   sj   d dl Z d dlZd dlZd dlmZ d dlmZ dd„ ZG dd„ dƒZG dd	„ d	eƒZ	G d
d„ deƒZ
dS )é    N)Úimport_module)Úsettingsc                  C   sh   t } i }ttddƒ}|rZd|v rJ|d }| dd¡\}}t|ƒ}t||ƒ} d|v rZ|d }| f i |¤ŽS )zº
    Returns the token generator class based on the configuration in DJANGO_REST_PASSWORDRESET_TOKEN_CONFIG.CLASS and
    DJANGO_REST_PASSWORDRESET_TOKEN_CONFIG.OPTIONS
    :return:
    Ú&DJANGO_REST_PASSWORDRESET_TOKEN_CONFIGNZCLASSÚ.é   ÚOPTIONS)ÚRandomStringTokenGeneratorÚgetattrr   Úrsplitr   )Ztoken_classÚoptionsr   Zclass_path_nameÚmodule_nameÚ
class_nameÚmod© r   úX/var/www/html/Ranjet/env/lib/python3.9/site-packages/django_rest_passwordreset/tokens.pyÚget_token_generator	   s    
r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚBaseTokenGeneratorzœ
    Base Class for the Token Generators

    - Can take arbitrary args/kwargs and work with those
    - Needs to implement the "generate_token" Method
    c                 O   s   d S ©Nr   ©ÚselfÚargsÚkwargsr   r   r   Ú__init__-   s    zBaseTokenGenerator.__init__c                 O   s   t ‚d S r   )ÚNotImplementedErrorr   r   r   r   Úgenerate_token0   s    z!BaseTokenGenerator.generate_tokenN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   &   s   r   c                   @   s"   e Zd ZdZd	dd„Zdd„ ZdS )
r   za
    Generates a random string with min and max length using os.urandom and binascii.hexlify
    é
   é2   c                 O   s   || _ || _d S r   )Ú
min_lengthÚ
max_length)r   r"   r#   r   r   r   r   r   r   9   s    z#RandomStringTokenGenerator.__init__c                 O   s.   t  | j| j¡}t t | j¡¡ ¡ d|… S )zF generates a pseudo random code using os.urandom and binascii.hexlify r   )	ÚrandomÚrandintr"   r#   ÚbinasciiÚhexlifyÚosÚurandomÚdecode)r   r   r   Úlengthr   r   r   r   =   s    
ÿþz)RandomStringTokenGenerator.generate_tokenN)r    r!   r   r   r   r   r   r   4   s   
r   c                   @   s"   e Zd ZdZd	dd„Zdd„ ZdS )
ÚRandomNumberTokenGeneratorzf
    Generates a random number using random.SystemRandom() (which uses urandom in the background)
    é'  éŸ† c                 O   s   || _ || _d S r   )Ú
min_numberÚ
max_number)r   r/   r0   r   r   r   r   r   r   L   s    z#RandomNumberTokenGenerator.__init__c                 O   s   t  ¡ }t| | j| j¡ƒS r   )r$   ÚSystemRandomÚstrr%   r/   r0   )r   r   r   Úrr   r   r   r   P   s    z)RandomNumberTokenGenerator.generate_tokenN)r-   r.   r   r   r   r   r   r,   H   s   
r,   )r(   r&   r$   Ú	importlibr   Zdjango.confr   r   r   r   r,   r   r   r   r   Ú<module>   s   