
    LfO                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
 d dlZd dlZd dlZd dlZd dlmZ d dlmZmZ d dlmZ d dlmZ dZ	 d dlZdZej8                  dk(  r)d	e j:                  v re j:                  j=                  d	      Z ej>                          d
Zeree j:                  d	<    G d de!      Z" G d de!      Z#de j:                  v re j:                  d   Z$ndZ$d Z%d Z& G d dejN                        Z(ddZ) G d dejN                        Z*d Z+ G d dejN                        Z,ddZ-dZ.ddZ/y# e $ r Y w xY w)     N)OptionalListDict)time_ns)hexstr_if_strto_hex)	parse_url)pkm_from_argon2_secretFwin32TERMTc            (       d   e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddee   dee   dee   dee   dee   dee   d	ee   d
ee   dee   deej                     deej                     dee	j                     dee	j                     dee   dee   dee   dee   dee   dee   f&dZd Zed        Zy)ProfileaV  
    User profile, stored as named section in ``${HOME}/.xbrnetwork/config.ini``:

    .. code-block:: INI

        [default]
        # username used with this profile
        username=joedoe

        # user email used with the profile (e.g. for verification emails)
        email=joe.doe@example.com

        # XBR network node used as a directory server and gateway to XBR smart contracts
        network_url=ws://localhost:8090/ws

        # WAMP realm on network node, usually "xbrnetwork"
        network_realm=xbrnetwork

        # user private WAMP-cryptosign key (for client authentication)
        cskey=0xb18bbe88ca0e189689e99f87b19addfb179d46aab3d59ec5d93a15286b949eb6

        # user private Ethereum key (for signing transactions and e2e data encryption)
        ethkey=0xfbada363e724d4db2faa2eeaa7d7aca37637b1076dd8cf6fefde13983abaa2ef
    Npathname
member_adrethkeycskeyusernameemailnetwork_urlnetwork_realm
member_oidvaction_oidvaction_requestedvaction_verifieddata_url
data_realm
infura_urlinfura_network
infura_keyinfura_secretc                 2   ddl m}  |       | _        || _        || _        || _        || _        || _        || _        || _	        || _
        |	| _        |
| _        || _        || _        || _        || _        || _        || _        || _        || _        || _        y)a  

        :param path:
        :param name:
        :param member_adr:
        :param ethkey:
        :param cskey:
        :param username:
        :param email:
        :param network_url:
        :param network_realm:
        :param member_oid:
        :param vaction_oid:
        :param vaction_requested:
        :param vaction_verified:
        :param data_url:
        :param data_realm:
        :param infura_url:
        :param infura_network:
        :param infura_key:
        :param infura_secret:
        r   make_loggerN)txaior$   logr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   )selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r$   s                        O/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/autobahn/xbr/_config.py__init__zProfile.__init__[   s    T 	&=		$
 
&*$&!2 0 $$,$*    c                    i }| j                   xs d|d<   | j                  r<dj                  t        j                  | j                        j                               nd|d<   | j                  r<dj                  t        j                  | j                        j                               nd|d<   | j                  xs d|d<   | j                  xs d|d<   | j                  xs d|d<   | j                  xs d|d	<   | j                  rt        | j                        nd|d
<   | j                  rt        | j                        nd|d<   | j                  rt        | j                        nd|d<   | j                  rt        | j                        nd|d<   | j                   xs d|d<   | j"                  xs d|d<   | j$                  xs d|d<   | j&                  xs d|d<   | j(                  xs d|d<   | j*                  xs d|d<   |S )N r   z0x{}r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   )r   r   formatbinasciib2a_hexdecoder   r   r   r   r   r   strr   r   r   r   r   r   r   r    r!   )r'   objs     r(   marshalzProfile.marshal   s    OO1rLQUQ\Q\h&6&6t{{&C&J&J&LMbdHOSzzv}}X%5%5djj%A%H%H%JK_aG---2Jzz'RG!--3M#117RO48OOC0L6:6F6FS!1!12BMBFBXBX3t'='=#>^` @D@U@U#d&;&;"<[]---2J OO1rL OO1rL $ 3 3 9r OO1rL#117RO
r*   c                    d }d }d }d }d }d }d }	d }
d }d }d }d }d }d }d }d }d }|D ]  \  }}|dk(  rt        |      }|dk(  rt        |      }	)|dk(  r0t        |      t         k(  r|dk7  rt        j                  |      }[d }^|dk(  rt        |      t         k(  r|dk7  r|}}d }|dk(  r0t        |      t         k(  r|dk7  rt        j                  |      }
d }
|dk(  r.t        |      t        k(  r|rt        j                  |d      }|}|d	k(  r.t        |      t        k(  rt        j                  |d      }|}|d
k(  rt        |      }-|dk(  rt        |      }?|dk(  rt        j                  |dd        }^|dk(  rt        j                  |dd        }}|dk(  rt        |      }|dk(  rt        |      }|dk(  rt        |      }|dk(  rt        |      }|dk(  rt        |      }|dk(  rt        |      }|dv rt        dj                  |              t        | ||||||||	|
|||||||||      S )Nr   r   r   r,   r   r   r   nsr   r   r   r      r   r   r   r   r    r!   r   )r   r   z!unprocessed config attribute "{}")r1   typeuuidUUIDintnp
datetime64r.   a2b_hexprintr-   r   )r   r   itemsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r   kvs                         r(   parsezProfile.parse   s   

 


 6	EDAqM!!!fo% #Am#7c>a2g"&))A,K"&Kl"7c>a2g!"J!%Jl"7c>a2g!%1J!%J))7c>a(*a(>%()%((7c>')}}Q'=$'($jq6l" V
h!))!AB%0g ((12/jq6gA&&!$Ql" V
o% #Al" V
&& 9@@CDm6	Ep tT!65"M!"$57G!>:}N 	Nr*   )NNNNNNNNNNNNNNNNNNN)__name__
__module____qualname____doc__r   r1   bytesr8   r9   r;   r<   r)   r3   staticmethodrB    r*   r(   r   r   A   s   4 (,'+-1+/*.+/(,.2043748>B=A+/-1-115-104'@+}@+}@+ &c]@+ "%	@+
 !@+ $C=@+ !@+ 'sm@+ !)@+ &dii0@+ 'tyy1@+ %-R]]$;@+ $,BMM#:@+ $C=@+ &c]@+  &c]!@+" "*##@+$ &c]%@+& !)'@+D* QN QNr*   r   c                   z    e Zd ZdZd Zedee   fd       Zede	ee
f   fd       Zd
dee   fdZd
dee   fd	Zy)
UserConfigz
    Local user configuration file. The data is either a plain text (unencrypted)
    .ini file, or such a file encrypted with XSalsa20-Poly1305, and with a
    binary file header of 48 octets.
    c                 ~    ddl m}  |       | _        t        j                  j                  |      | _        i | _        y)zH

        :param config_path: The user configuration file path.
        r   r#   N)r%   r$   r&   osr   abspath_config_path	_profiles)r'   config_pathr$   s      r(   r)   zUserConfig.__init__  s,    
 	&=GGOOK8r*   returnc                     | j                   S )z
        Return the path to the user configuration file exposed by this object.,

        :return: Local filesystem path.
        )rO   r'   s    r(   rQ   zUserConfig.config_path  s        r*   c                     | j                   S )zv
        Access to a map of user profiles in this user configuration.

        :return: Map of user profiles.
        )rP   rT   s    r(   profileszUserConfig.profiles   s     ~~r*   Npasswordc           	      <   d}t        j                         }| j                  j                         D ]h  \  }}||j	                         vr|j                  |       |dz  }|j                         }|j                         D ]  \  }}|j                  |||        j t        j                         5 }	|j                  |	       |	j                         j                  d      }
ddd       |rt        j                  d      }d}t        d|||      }t         j"                  j%                  |      }|j'                  
      }d	d
dt)        j*                  dt-        |            t)        j*                  dt/                     d||g}dj1                  |      }n
}t3        | j4                  d      5 }|j                  |       ddd       | j6                  j9                  d|t-        |      | j4                         t-        |      S # 1 sw Y   &xY w# 1 sw Y   SxY w)a;  
        Save this user configuration to the underlying configuration file. The user
        configuration file can be encrypted using Argon2id when a ``password`` is given.

        :param password: The optional Argon2id password.

        :return: Number of octets written to the user configuration file.
        r      utf8N   xbrnetwork-configr,   r   rW   contextsalts   ޭs     fs      >L>Qs           r*   wbzUconfiguration with {sections} sections, {bytes_written} bytes written to {written_to})sectionsbytes_written
written_to)configparserConfigParserrP   r?   rc   add_sectionr3   setioStringIOwritegetvalueencoderM   urandomr
   naclsecret	SecretBoxencryptstructpacklenr   joinopenrO   r&   debug)r'   rW   writtenconfigprofile_nameprofilepdoptionvaluefp1config_datar_   r^   priv_keyboxconfig_data_ciphertextdldatafp2s                      r(   savezUserConfig.save)  s    **,%)^^%9%9%; 	8!L'6??#44""<01"B!# 8

<78	8 [[] 	8cLL,,.//7K	8  ::b>D)G-BSZaefH++''1C%([[%="###D#&<"=>D'),&	B 88B<DD$##T* 	cIIdO	 	n 's4yTM^M^ 	 	` 4yO	8 	8B	 	s   01H.HHHc                    t         j                  j                  | j                        r)t         j                  j	                  | j                        s$t        dj                  | j                              t        | j                  d      5 }|j                         }ddd       t              dk\  r|dd dk(  r|dd }|dd }t        j                  d|dd       d	   }t        j                  d|dd
       d	   }t        j                  d|d
d       d	   }|dv sJ |t        |      k(  sJ |t               k  sJ |dd }	d}
|r |       }nd}t        d||
|	      }t        j                  j!                  |      }|j#                  |      }nd}|}t%        j&                         }|j)                  |j+                  d             i }|j-                         D ]9  }|j/                  |      }t0        j3                  | j                  ||      }|||<   ; || _        t7        | j8                  j;                               }|S # 1 sw Y   xY w)a%  
        Load this object from the underlying user configuration file. When the
        file is encrypted, call back into ``cb_get_password`` to get the user password.

        :param cb_get_password: Callback called when password is needed.

        :return: List of profiles loaded.
        z/config path "{}" cannot be loaded: so such filerbN0      s   ޭ  fr`      r   r[   ra      )r   rY       r\   r,   r]   rZ   )rM   r   existsrO   isfileRuntimeErrorr-   rx   readrv   rt   unpackr   r
   rp   rq   rr   decryptrf   rg   read_stringr0   rc   r?   r   rB   rP   sortedrV   keys)r'   cb_get_passwordfpr   headerbodyalgodata_lencreatedr_   r^   rW   r   r   r{   rV   r|   citemsr}   loaded_profiless                       r(   loadzUserConfig.loade  s(    ww~~d//0tGXGX8YPWWX\XiXijkk$##T* 	b779D	 t9?tBQx+NN#2YF9D==va|4Q7D}}T6"R=9!<HmmD&B-8;G 6>!>s4y(((WY&&&"R=D)G*,-BSZaefH++''1C;;t$D FD**,4;;v./"OO- 	-L\\,/FmmD$5$5|VLG%,H\"	- " !3!3!56U	 	s   IIN)rC   rD   rE   rF   r)   propertyr   r1   rQ   r   objectrV   r   r   r   rI   r*   r(   rK   rK     sp    
 !T#Y ! ! $sF{+  :Xc] :x6DI 6r*   rK   CROSSBAR_FABRIC_URLzwss://master.xbr.network/wsc                 B    t         rt        j                  | dd      S | S )NredTfgbold_HAS_COLOR_TERMclickstyletexts    r(   style_errorr     s    {{4E55r*   c                 B    t         rt        j                  | dd      S | S )NgreenTr   r   r   s    r(   style_okr     s    {{4G$77r*   c                        e Zd ZdZdZd Zd Zy)WampUrlz'
    WAMP transport URL validator.
    zWAMP transport URLc                 B    t         j                  j                  |        y r   r   	ParamTyper)   rT   s    r(   r)   zWampUrl.__init__        &r*   c                     	 t        |       |S # t        $ r-}| j                  t        t	        |                   Y d }~y d }~ww xY wr   )r	   	Exceptionfailr   r1   )r'   r   paramctxes        r(   convertzWampUrl.convert  s@    	e L  	+IIk#a&)**	+s    	A#A  ANrC   rD   rE   rF   r   r)   r   rI   r*   r(   r   r     s      D'r*   r   c                 F    t        j                  | t               |      }|S )zP
    Prompt user for WAMP transport URL (eg "wss://planet.xbr.network/ws").
    r7   default)r   promptr   )msgr   r   s      r(   prompt_for_wamp_urlr     s     LL79g>ELr*   c                        e Zd ZdZdZd Zd Zy)EthereumAddressz%
    Ethereum address validator.
    zEthereum addressc                 B    t         j                  j                  |        y r   r   rT   s    r(   r)   zEthereumAddress.__init__  r   r*   c                 L   	 t         j                  j                  |      }t        j                  |dd        }t        |      dk7  r#t        dj                  t        |                  	 |S # t        $ r-}| j                  t        t        |                   Y d }~y d }~ww xY w)Nr6      z<Ethereum addres must be 20 bytes (160 bit), but was {} bytes)web3Web3toChecksumAddressr.   r=   rv   
ValueErrorr-   r   r   r   r1   )r'   r   r   r   adrr   s         r(   r   zEthereumAddress.convert  s    	II//6E""59-C5zR !_!f!fgjkngo!pqq  
 L  	+IIk#a&)**	+s   A(A- -	B#6#BB#Nr   rI   r*   r(   r   r     s     D'	r*   r   c                 D    t        j                  | t                     }|S )z7
    Prompt user for an Ethereum (public) address.
    )r7   )r   r   r   )r   r   s     r(   prompt_for_ethereum_addressr     s     LL?#45ELr*   c                        e Zd ZdZdZd Zd Zy)
PrivateKeyz2
    Private key (32 bytes in HEX) validator.
    zPrivate keyc                 P    t         j                  j                  |        || _        y r   )r   r   r)   _key_len)r'   key_lens     r(   r)   zPrivateKey.__init__  s      &r*   c                    	 t        t        |      }|d d dv rt        j                  |dd        }nt        j                  |      }t	        |      | j
                  k7  r.t        dj                  | j
                  t	        |                  	 |S # t        $ r-}| j                  t        t        |                   Y d }~y d }~ww xY w)Nr6   )0xz\xz-key length must be {} bytes, but was {} bytes)r   r   r.   r=   rv   r   r   r-   r   r   r   r1   )r'   r   r   r   keyr   s         r(   r   zPrivateKey.convert  s    	!&%0ERayM)&&uQRy1&&u-3x4==( !P!W!WX\XeXegjkngo!pqq )
 L  	+IIk#a&)**	+s   BB 	C#CCNr   rI   r*   r(   r   r     s     D r*   r   c                 H    t        j                  | t        |      |      }|S )z@
    Prompt user for a binary key of given length (in HEX).
    r   )r   r   r   )r   r   r   r   s       r(   prompt_for_keyr     s      LL:g#6HELr*   a  [default]
# username used with this profile
username={username}

# user email used with the profile (e.g. for verification emails)
email={email}

# XBR network node used as a directory server and gateway to XBR smart contracts
network_url={network_url}

# WAMP realm on network node, usually "xbrnetwork"
network_realm={network_realm}

# user private WAMP-cryptosign key (for client authentication)
cskey={cskey}

# user private Ethereum key (for signing transactions and e2e data encryption)
ethkey={ethkey}
c                    | xs d} |xs d}|xs d}|xs d}t         j                  j                  |       }t         j                  j                  |      sBt        j                  |       t        j                  dj                  t        |                   t         j                  j                  |d      }t         j                  j                  |      st        j                  dj                  t        |                   t        |d      5 }t        d	|
      }	t        j                  dt        |      }
t        dddt!        j"                  t        j$                  d            j'                         z   
      }t        dddt!        j"                  t        j$                  d            j'                         z   
      }t        j                  dt        |      }t        j                  dt        |      }|j)                  t*        j                  |	|
||||             t        j                  dj                  t        |                   d d d        t-        |      }|j/                          |j0                  j3                  |d       }|s$t        j4                  dj                  |            |S # 1 sw Y   hxY w)Nz~/.xbrnetworkr   zwss://planet.xbr.network/ws
xbrnetworkz#created new local user directory {}z
config.inizcreating new user profile "{}"wz7enter the WAMP router URL of the network directory node)r   z:enter the WAMP realm to join on the network directory noder   zyour private WAMP client keyr   r   zyour private Etherum keyz user email used for with profilez user name used with this profile)r   r   r   r   r   r   z'created new local user configuration {}zno such profile: "{}")rM   r   
expanduserisdirmkdirr   echor-   r   rw   r   rx   r   r   r1   r   r.   r/   ro   r0   rl   _DEFAULT_CONFIGrK   r   rV   getClickException)dotdirr}   default_urldefault_realmdefault_emaildefault_username
config_dirrQ   fr   r   r   r   r   r   
config_objprofile_objs                    r(   load_or_create_profiler   ,  s@   &F"G>!>K!1\M##F+J77==$


8??@TUV'',,z<8K77>>+&

3::8G;LMN+s# 		`q-.gq|}K!LL)elo  zG  HM"#A2tV^VfVfgigqgqrtguVvV}V}VO  AE#$>DS[ScScdfdndnoqdrSsSzSzS|L|}FLL!C#WdeE||$FSZjkHGGO**{R_hn16eh + X YJJ@GGQ\H]^_		` K(JOO%%))'48K""#:#A#A'#JKK%		` 		`s   EJ<<Kr   )NNNNNN)0rM   rj   sysr8   rt   r.   rf   typingr   r   r   r   rp   r   numpyr;   timer   eth_utils.conversionsr   r   autobahn.websocket.utilr	   autobahn.xbr._walletr
   r   coloramatermplatformenvironpopinitImportErrorr   r   rK   _DEFAULT_CFC_URLr   r   r   r   r   r   r   r   r   r   r   rI   r*   r(   <module>r     sF  6 
 	 
     ' '      7 - 7	 D
||w6RZZ#7zz~~f%HMMOO!

6CNf CNLT Tn BJJ&zz"785eoo &eoo , 4< _  		s   A"E E
E