o
    uh                     @   s   d dl Z d dlmZ d dlmZmZmZ d dlmZ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edfdedee defddZdedfdedee defddZdedefddZdS )    N)split)AnyDictSequence)	parse_qslunquoteurlparse   )contrib)random)HOTP)OTP)TOTP     ABCDEFGHIJKLMNOPQRSTUVWXYZ234567lengthcharsreturnc                    s,   | dk rt dd fddt| D S )Nr   #Secrets should be at least 160 bits c                 3   s    | ]}t  V  qd S )N)r   choice).0_r    A/var/www/html/venv/lib/python3.10/site-packages/pyotp/__init__.py	<genexpr>   s    z random_base32.<locals>.<genexpr>)
ValueErrorjoinranger   r   r   r   r   random_base32   s   r!   (   ABCDEF0123456789c                 C   s   | dk rt dt| |dS )Nr"   r   r    )r   r!   r    r   r   r   
random_hex   s   r$   uric           	      C   s  d}d}d}i }t t| }|jdkrtdtd|jdd dd}t|dkr0|d |d< n|d |d	< |d |d< t|jD ]\}}|d
krL|}qA|d	krid	|v rd|d	 durd|d	 |krdtd||d	< qA|dkr|dkrwt	j
|d< qA|dkrt	j|d< qA|dkrt	j|d< qAtd|dkr|}qA|dkrt|}||d< qA|dkrt||d< qA|dkrt||d< qA|dkrtd|qA|dkr|dur|dvrtd|std|dkrtj|fi |S |jdkrt|fi |S |jdkrt|fi |S td )!z
    Parses the provisioning URI for the OTP; works for either TOTP or HOTP.

    See also:
        https://github.com/google/google-authenticator/wiki/Key-Uri-Format

    :param uri: the hotp/totp URI to parse
    :returns: OTP object
    NotpauthzNot an otpauth URIz:|%3Ar	   )maxsplitr   nameissuersecretzHIf issuer is specified in both label and parameters, it should be equal.	algorithmSHA1digestSHA256SHA512z;Invalid value for algorithm, must be SHA1, SHA256 or SHA512encoderdigitsperiodintervalcounterinitial_countimagez{} is not a valid parametersteam)         zDigits may only be 6, 7, or 8zNo secret found in URItotphotpzNot a supported OTP type)r   r   schemer   r   pathlenr   queryhashlibsha1sha256sha512intformatr
   Steamnetlocr   r   )	r%   r*   r0   r1   otp_data
parsed_uriaccountinfo_partskeyvaluer   r   r   	parse_uri   sf   
 


rN   )rA   rer   typingr   r   r   urllib.parser   r   r   r   r
   compatr   r<   r   otpr   r;   r   listrE   strr!   r$   rN   r   r   r   r   <module>   s    $$
