o
    èó·i¡&  ã                   @   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v rWd
 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)Ú
cryptosignÚ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   ú[C:\Users\psant\Downloads\PAF backend\school\venv\Lib\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ÚmatchZ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   s8   | rt S 	 tjdtƒ t d�}tjd |¡dd�r	 |S q)NTzPlease enter your email address)ÚtypeÚdefaultz,We will send an activation code to "{}", ok?)r$   )Ú_DEFAULT_EMAIL_ADDRESSr   Úpromptr   Zconfirmr   )Ú
yes_to_allr   r   r   r   Ú_user_idC   s   ür(   c                 C   s\   | rt S zt ¡ }W n ty   d}Y nw zt ¡ }W n ty'   d}Y nw d ||¡S )zQ
    for informational purposes, try to identify the creator (user@hostname)
    r   r   N)r%   ÚgetpassÚgetuserÚBaseExceptionÚsocketÚgethostnamer   )r'   ÚuserÚhostnamer   r   r   Ú_creatorM   s   ÿÿr0   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Úkeyr0   Ú_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   r2   r3   r:   r   r   r   r   Ú__str__q   s   ÿzUserKey.__str__Fc                 C   sn  t j |¡rßt|dd�}dD ]}||vrtd ||¡ƒ‚q|d }|d }|d }|d }	t|	td	�}
|
j}|j	td	� 
d
¡}|d |krLtd |¡ƒ‚d }d }| dd ¡}|rzt |¡}ttƒ |¡}|j ¡ }d|v rz|d |krztd |¡ƒ‚t j |¡rµt|dd�}dD ]}||vr–td ||¡ƒ‚qˆ|d |kr¤td |¡ƒ‚| dd ¡|kr´td ||¡ƒ‚n®t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�ryt  |d¡ t d¡ t  |¡jd@ dk�r�t  |d¡ t d ¡ || _|| _ |
| _!|	| _"|| _#|| _$|| _%|| _&|| _'|| _(t)j*|
dd!�| _+d S )"NT)Úprivate)Úcreatorú
created-atúuser-idúpublic-key-ed25519úprivate-key-ed25519z3Corrupt user private key file {} - {} tag not foundr@   rA   rB   rD   )ÚencoderÚasciirC   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@   rA   rB   rC   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echor0   r   r(   ÚgenerateÚurandomÚb2a_hexÚchmodÚstatÚst_moder5   r7   r8   r9   r:   Z_eth_pubadrZ_eth_privkey_seed_hexZ_eth_privkeyr6   r
   ZCryptosignKeyr4   )r   Zprivkey_pathZpubkey_pathr'   Z	priv_tagsÚtagr@   Z
created_atr6   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   r1   a   s    
r1   rZ   ) r   rH   rO   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(   r0   Úobjectr1   r   r   r   r   Ú<module>   s(   



