o
    >h&                     @   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   u/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/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   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   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   )r&   getpassgetuserBaseExceptionsocketgethostnamer   )r)   userhostnamer   r   r   _creatorM   s   r2   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keyr2   _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   r4   r5   r<   r   r   r   r   __str__q   s   zUserKey.__str__Fc                 C   sn  t j|rt|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|rt|dd}dD ]}||vrtd||q|d |krtd||dd |krtd||ntd|d fd|d fd|d fd|fd|fg}d}t||| td| nt|}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rt |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 foundrB   rC   rD   rF   )encoderasciirE   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)rB   rC   rD   rE   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!)can_sign),ospathexistsr	   	Exceptionr   r   r   
verify_keyencodedecodegetbinasciia2b_hexr   r   
PrivateKey
public_keyto_checksum_addressr   r   r   echor2   r   r*   generateurandomb2a_hexchmodstatst_moder7   r9   r:   r;   r<   _eth_pubadr_eth_privkey_seed_hex_eth_privkeyr8   r
   CryptosignKeyr6   )r   privkey_pathpubkey_pathr)   	priv_tagstagrB   
created_atr8   privkey_hexr>   r?   
pubkey_hex
eth_pubadreth_privkeyeth_privkey_seed_hexeth_privkey_seed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   r3   a   s    
r3   rq   ) r   rK   rS   r.   collectionsr   r+   r   nacl.signingr   nacl.encodingr   eth_keysr   eth_keys.backendsr   autobahn.utilr   r   r	   autobahn.wampr
   environr   getfqdnr&   r   r   r*   r2   objectr3   r   r   r   r   <module>   s(   



