B
    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
edfeee edddZdedfeee edddZeedddZdS )    N)split)AnyDictSequence)unquoteurlparse	parse_qsl   )random)HOTP)OTP)TOTP    Z ABCDEFGHIJKLMNOPQRSTUVWXYZ234567)lengthcharsreturnc                s,   | dk rt dd fddt| D S )Nr   z#Secrets should be at least 160 bits c             3   s   | ]}t  V  qd S )N)r
   choice).0_)r    KC:\Users\sanjo\AppData\Local\Qlobot\Launcher\ext_packages\pyotp\__init__.py	<genexpr>   s   z random_base32.<locals>.<genexpr>)
ValueErrorjoinrange)r   r   r   )r   r   random_base32   s
    
r   (   ZABCDEF0123456789c             C   s   | dk rt dt| |dS )Nr   z#Secrets should be at least 160 bits)r   r   )r   r   )r   r   r   r   r   
random_hex   s    r   )urir   c             C   s  d}i }t t| }|jdkr&tdtd|jdd dd}t|dkrX|d |d< n|d |d	< |d |d< x(t|jD ]\}}|d
kr|}q~|d	krd	|kr|d	 dk	r|d	 |krtd||d	< q~|dkr$|dkrt	j
|d< n4|dkrt	j|d< n|dkrt	j|d< ntdq~|dkrRt|}|dkrHtd||d< q~|dkrjt||d< q~|dkrt||d< q~|dkr~td|q~W |std|jdkrt|f|S |jdkrt|f|S tddS )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
    NZotpauthzNot an otpauth URIz:|%3Ar	   )maxsplitr   nameZ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digits)         zDigits may only be 6, 7, or 8ZperiodintervalcounterZinitial_countimagez{} is not a valid parameterzNo secret found in URItotphotpzNot a supported OTP type)r   r   schemer   r   pathlenr   queryhashlibsha1sha256sha512intformatnetlocr   r   )r   r"   Zotp_dataZ
parsed_uriZaccountinfo_partskeyvaluer(   r   r   r   	parse_uri   sV    
 









r>   )r5   rer   typingr   r   r   urllib.parser   r   r   compatr
   r0   r   Zotpr   r/   r   listr9   strr   r   r>   r   r   r   r   <module>   s     