
    Lf&                     ^   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 r/d
j/                  ej,                  d	    ej0                               ZndZ G d dej4                        ZddZddZ G d de      Zy)    N)OrderedDict)
SigningKey)
HexEncoder)KeyAPI)NativeECCBackend)utcnowwrite_keyfileparse_keyfile)
cryptosignUSER{}@{}unknownc                        e Zd ZdZdZd Zd Zy)EmailAddressz"
    Email address validator.
    zEmail addressc                 B    t         j                  j                  |        y N)click	ParamType__init__selfs    P/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/autobahn/xbr/_userkey.pyr   zEmailAddress.__init__:   s      &    c                 t    t        j                  d|      r|S | j                  dj                  |             y )Nz0^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$zinvalid email address "{}")rematchfailformat)r   valueparamctxs       r   convertzEmailAddress.convert=   s.    88GOL		.55e<=r   N)__name__
__module____qualname____doc__namer   r"    r   r   r   r   3   s     D'>r   r   c                     | rt         S 	 t        j                  dt               t               }t        j                  dj                  |      d      r	 |S N)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   s     r   _user_idr0   C   sL    %%
>\^]st==GNNuU_cdL	 r   c                     | rt         S 	 t        j                         }	 t	        j
                         }dj                  ||      S # t        $ r d}Y 4w xY w# t        $ r d}Y 0w xY w)zQ
    for informational purposes, try to identify the creator (user@hostname)
    r   r   )r,   getpassgetuserBaseExceptionsocketgethostnamer   )r/   userhostnames      r   _creatorr9   M   so     %%	??$D	!))+H ~~dH--  	D	
  	! H	!s"   A A AAA$#A$c                   "    e Zd ZddZd ZddZy)UserKeyc                     || _         || _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _	        | j                  | j                   | j                  |       y r   )_privkey_path_pubkey_pathkeyr9   _created_atuser_id_privkey_privkey_hex_pubkey_pubkey_hex_load_and_maybe_generate)r   privkeypubkeyr/   s       r   r   zUserKey.__init__b   sk    $" %%d&8&8$:K:KZXr   c                 d    dj                  | j                  | j                  | j                        S )Nz'UserKey(privkey="{}", pubkey="{}" [{}]))r   r=   r>   rE   r   s    r   __str__zUserKey.__str__q   s1    8??@R@RTXTeTe@D@P@PR 	Rr   c                 
   t         j                  j                  |      r3t        |d      }dD ]!  }||vst	        dj                  ||             |d   }|d   }|d   }|d   }	t        |	t        	      }
|
j                  }|j                  t        	      j                  d
      }|d   |k7  rt	        dj                  |            d }d }|j                  dd       }|rst        j                  |      }t        t              j!                  |      }|j"                  j%                         }d|v r"|d   |k7  rt	        dj                  |            t         j                  j                  |      rt        |d      }dD ]!  }||vst	        dj                  ||             |d   |k7  rt	        dj                  |            |j                  dd       |k7  r$t	        dj                  ||            t'        d|d   fd|d   fd|d   fd|fd|fg      }d}t)        |||       t+        j,                  dj                  |             nt/        |      }t1               }t3        |      }t        j4                         }
|
j                  t        	      j                  d
      }	|
j                  }|j                  t        	      j                  d
      }t        j6                  d      }t        j8                  |      j                         }t        t              j!                  |      }|j"                  j%                         }t'        d|fd|fd|fd|fd|fg      }d}t)        |||       t        j:                  |d       |	|d<   ||d<   d}t)        |||       t        j:                  |d       t+        j,                  dj                  |             t+        j,                  dj                  d|             t        j<                  |      j>                  dz  dk7  r+t        j:                  |d       t+        j,                  d       t        j<                  |      j>                  dz  dk7  r+t        j:                  |d       t+        j,                  d        || _        || _         |
| _!        |	| _"        || _#        || _$        || _%        || _&        || _'        || _(        tS        jT                  |
d!      | _+        y )"NT)private)creator
created-atuser-idpublic-key-ed25519private-key-ed25519z3Corrupt user private key file {} - {} tag not foundrM   rN   rO   rQ   )encoderasciirP   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)rM   rN   rO   rP   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   echor9   r   r0   generateurandomb2a_hexchmodstatst_moder@   rB   rC   rD   rE   _eth_pubadr_eth_privkey_seed_hex_eth_privkeyrA   r   CryptosignKeyr?   )r   privkey_pathpubkey_pathr/   	priv_tagstagrM   
created_atrA   privkey_hexrG   rH   
pubkey_hex
eth_pubadreth_privkeyeth_privkey_seed_hexeth_privkey_seedpub_tagsmsgtagss                       r   rF   z UserKey._load_and_maybe_generateu   s   77>>,' &lDAIh ui'#$Y$`$`amor$sttu  	*G"<0J	*G#$9:K jAG''Fz:AA'JJ-.*< "FGMvkGZ\ \ JK#,==1BD#I ##+#3#34H#I $%56AABRS(33GGI
#y0 !12j@' *JKQ6R^K_a a ww~~k*(eDU wC(*'(\(c(cdoqt(uvvw 01Z?# &JKQ6R]K^` ` << 0$7:E#QRXRXYdfrRsu u '	) 45!9\#:;	) 45):6%z2(  8k8S9

LSST_`a z*GJz*G ))+G!...<CCGLK''Fz:AA'JJ!zz"~#+#3#34D#E#L#L#N  !12==>NOK$//CCEJ G$z*G$%z2!:.  D 4C+tS1HH[#& +6D&'&:D"#FC,c2HH\3'JJ:AA+NOJJ@GGHY[ghi 77;''#-4HH[#&JJCD77< ((3.#5HH\3'JJDE  %'%%%9"'++GdCr   N)TF)r#   r$   r%   r   rJ   rF   r(   r   r   r;   r;   a   s    YRDr   r;   r|   ) r   rV   r^   r5   collectionsr   r2   r   nacl.signingr   nacl.encodingr   eth_keysr   eth_keys.backendsr   autobahn.utilr   r	   r
   autobahn.wampr   environr   getfqdnr,   r   r   r0   r9   objectr;   r(   r   r   <module>r      s   6 
 	   #   # $  . > > $	RZZ$^^BJJv,>@PQ&>5?? > .(SDf SDr   