U
    •uÄc¡&  ã                   @   sì   d dl Z d dlZd dlZd dlZd dlm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mZ d dlmZ d	ejkr®d
 ejd	 e ¡ ¡ZndZG dd„ dejƒZddd„Zddd„ZG dd„ deƒZdS )é    N)ÚOrderedDict)Ú
SigningKey)Ú
HexEncoder)ÚKeyAPI)ÚNativeECCBackend)ÚutcnowÚwrite_keyfileÚparse_keyfile)Ú
cryptosignZUSERú{}@{}Úunknownc                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚEmailAddressz"
    Email address validator.
    zEmail addressc                 C   s   t j | ¡ d S ©N)ÚclickÚ	ParamTypeÚ__init__©Úself© r   úV/var/www/html/HOTSTAR/school/venv/lib/python3.8/site-packages/autobahn/xbr/_userkey.pyr   :   s    zEmailAddress.__init__c                 C   s$   t  d|¡r|S |  d |¡¡ d S )Nz0^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$zinvalid email address "{}")ÚreÚmatchÚfailÚformat)r   ÚvalueÚparamÚctxr   r   r   Úconvert=   s    zEmailAddress.convertN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Únamer   r   r   r   r   r   r   3   s   r   Fc                 C   s6   | rt S tjdtƒ t d�}tjd |¡dd�rq2q|S )NzPlease enter your email address)ÚtypeÚdefaultz,We will send an activation code to "{}", ok?T)r$   )Ú_DEFAULT_EMAIL_ADDRESSr   Úpromptr   Zconfirmr   )Ú
yes_to_allr   r   r   r   Ú_user_idC   s    r(   c                 C   sd   | rt S zt ¡ }W n tk
r,   d}Y nX zt ¡ }W n tk
rR   d}Y nX d ||¡S dS )zQ
    for informational purposes, try to identify the creator (user@hostname)
    r   r   N)r%   ÚgetpassZgetuserÚBaseExceptionÚsocketÚgethostnamer   )r'   ÚuserÚhostnamer   r   r   Ú_creatorM   s    

r/   c                   @   s(   e Zd Zd
dd„Zdd„ Zddd„Zd	S )ÚUserKeyTc                 C   sR   || _ || _d | _d | _d | _d | _d | _d | _d | _d | _	|  
| j | j|¡ d S r   )Ú_privkey_pathÚ_pubkey_pathÚkeyr/   Ú_created_atÚuser_idÚ_privkeyÚ_privkey_hexÚ_pubkeyÚ_pubkey_hexÚ_load_and_maybe_generate)r   ÚprivkeyÚpubkeyr'   r   r   r   r   b   s    zUserKey.__init__c                 C   s   d  | j| j| j¡S )Nz'UserKey(privkey="{}", pubkey="{}" [{}]))r   r1   r2   r9   r   r   r   r   Ú__str__q   s    ÿzUserKey.__str__Fc                 C   s|  t j |¡�rÌt|dd�}dD ]}||krtd ||¡ƒ‚q|d }|d }|d }|d }	t|	td	�}
|
j}|j	td	� 
d
¡}|d |krštd |¡ƒ‚d }d }| dd ¡}|röt |¡}ttƒ |¡}|j ¡ }d|krö|d |krötd |¡ƒ‚t j |¡�rvt|dd�}dD ] }||k�rtd ||¡ƒ‚�q|d |k�rRtd |¡ƒ‚| dd ¡|k�rÈtd ||¡ƒ‚nRtd|d fd|d fd|d fd|fd|fgƒ}d}t|||ƒ t d |¡¡ �nt|ƒ}tƒ }t|ƒ}t ¡ }
|
j	td	� 
d
¡}	|
j}|j	td	� 
d
¡}t  d¡}t |¡ 
¡ }ttƒ |¡}|j ¡ }td|fd|fd|fd|fd|fgƒ}d}t|||ƒ t  |d¡ |	|d< ||d< d}t|||ƒ t  |d¡ t d |¡¡ t d d|¡¡ t  |¡jd@ dk�r t  |d¡ t d¡ t  |¡jd@ dk�r,t  |d¡ t d ¡ || _|| _ |
| _!|	| _"|| _#|| _$|| _%|| _&|| _'|| _(t)j*|
dd!�| _+d S )"NT)Zprivate)Úcreatorú
created-atúuser-idúpublic-key-ed25519úprivate-key-ed25519z3Corrupt user private key file {} - {} tag not foundr>   r?   r@   rB   )ÚencoderÚasciirA   zdInconsistent user private key file {} - public-key-ed25519 doesn't correspond to private-key-ed25519zprivate-key-ethzpublic-adr-ethz\Inconsistent node private key file {} - public-adr-eth doesn't correspond to private-key-ethF)r>   r?   r@   rA   z2Corrupt user public key file {} - {} tag not foundzcInconsistent user public key file {} - public-key-ed25519 doesn't correspond to private-key-ed25519zrInconsistent user public key file {} - public-adr-eth doesn't correspond to private-key-eth in private key file {}zCrossbar.io user public key

z/Re-created user public key from private key: {}é    i¤  z0Crossbar.io user private key - KEEP THIS SAFE!

i€  z!New user public key generated: {}z'New user private key generated ({}): {}zkeep this safe!iÿ  z*File permissions on user public key fixed!z+File permissions on user private key fixed!)Zcan_sign),ÚosÚpathÚexistsr	   Ú	Exceptionr   r   r   Z
verify_keyÚencodeÚdecodeÚgetÚbinasciiÚa2b_hexr   r   Z
PrivateKeyZ
public_keyZto_checksum_addressr   r   r   Zechor/   r   r(   ZgenerateÚurandomÚb2a_hexÚchmodÚstatÚst_moder4   r6   r7   r8   r9   Z_eth_pubadrZ_eth_privkey_seed_hexZ_eth_privkeyr5   r
   ZCryptosignKeyr3   )r   Zprivkey_pathZpubkey_pathr'   Z	priv_tagsÚtagr>   Z
created_atr5   Zprivkey_hexr;   r<   Z
pubkey_hexZ
eth_pubadrZeth_privkeyZeth_privkey_seed_hexZeth_privkey_seedZpub_tagsÚmsgÚtagsr   r   r   r:   u   sÆ    ÿ

ÿ
ÿ ÿÿ


û

û

z UserKey._load_and_maybe_generateN)T)F)r   r   r    r   r=   r:   r   r   r   r   r0   a   s   
r0   )F)F) r   rF   rM   r+   Úcollectionsr   r)   r   Znacl.signingr   Znacl.encodingr   Zeth_keysr   Zeth_keys.backendsr   Zautobahn.utilr   r   r	   Zautobahn.wampr
   Úenvironr   Úgetfqdnr%   r   r   r(   r/   Úobjectr0   r   r   r   r   Ú<module>   s&   



