
    afO                     p   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j        dk    r#d	e j        v re j                            d	          Z ej                     d
Zer
ee j        d	<   n# e $ r Y nw xY w 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j'                  Z(ddZ) G d dej'                  Z*d Z+ G d dej'                  Z,ddZ-dZ.ddZ/dS )     N)OptionalListDict)time_ns)hexstr_if_strto_hex)	parse_url)pkm_from_argon2_secretFwin32TERMTc            (          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dS )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                 :   ddl m}  |            | _        || _        || _        || _        || _        || _        || _        || _	        || _
        |	| _        |
| _        || _        || _        || _        || _        || _        || _        || _        || _        || _        dS )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                        F/var/www/html/env/lib/python3.11/site-packages/autobahn/xbr/_config.py__init__zProfile.__init__[   s    T 	&%%%%%;==		$
 
&*$&!2 0 $$,$*    c                 :   i }| j         pd|d<   | j        r>d                    t          j        | j                                                            nd|d<   | j        r>d                    t          j        | j                                                            nd|d<   | j        pd|d<   | j        pd|d<   | j	        pd|d<   | j
        p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        pd|d<   | j        pd|d<   | j        pd|d<   | j        pd|d<   | j        pd|d<   | j        p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    O1rLQUQ\dh&6t{&C&C&J&J&L&LMMMbdHOSzav}}X%5dj%A%A%H%H%J%JKKK_aG--2Jz'RG!-3M#17RO48OKC000L6:6FNS!1222BMBFBX#`3t'=#>#>#>^` @D@U"]#d&;"<"<"<[]--2J O1rL O1rL $ 3 9r O1rL#17RO
r*   c                 p   d }d }d }d }d }d }d }	d }
d }d }d }d }d }d }d }d }d }|D ]p\  }}|dk    rt          |          }|dk    rt          |          }	2|dk    r6t          |          t           k    r|dk    rt          j        |          }kd }n|dk    r$t          |          t           k    r	|dk    r|}d }|dk    r6t          |          t           k    r|dk    rt          j        |          }
d }
|dk    r5t          |          t          k    r|rt          j        |d          }|}|d	k    r3t          |          t          k    rt          j        |d          }D|}H|d
k    rt          |          }_|dk    rt          |          }v|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          |          }1|dk    rt          |          }H|dv rNt          d
                    |                     rt          | ||||||||	|
|||||||||          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 6	EDAqM!!!!ffo%% #Am##77c>>a2gg"&)A,,KK"&KKl""77c>>a2gg!"JJ!%JJl""77c>>a2gg!%1JJ!%JJ)))77c>>a>(*a(>(>%%()%%(((77c>>')}Q'='=$$'($$jq66l"" VV

h!)!ABB%00g (122//jq66gA&&&!$Ql"" VV

o%% #Al"" VV

&&& 9@@CCDDDDtT!65"M!"$57G!>:}N 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@+ !)@+ &di0@+ 'ty1@+ %-R]$;@+ $,BM#:@+ $C=@+ &c]@+  &c]!@+" "*##@+$ &c]%@+& !)'@+ @+ @+ @+D  * QN QN \QN QN QNr*   r   c                       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dS )
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                            |          | _        i | _        dS )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__  sD    
 	&%%%%%;==GOOK8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                                        D ]z\  }}||                                vr|                    |           |dz  }|                                }|                                D ]\  }}|                    |||           {t          j	                    5 }	|
                    |	           |	                                                    d          }
ddd           n# 1 swxY w Y   |rt          j        d          }d}t          d|||          }t           j                            |          }|                    |
          }d	d
dt)          j        dt-          |                    t)          j        dt/                                d||g}d                    |          }n|
}t3          | j        d          5 }|
                    |           ddd           n# 1 swxY w Y   | j                            d|t-          |          | j                   t-          |          S )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 	8!L'6??#4#444""<0001""B!# 8 8

<77778 []] 	8cLL,,..//77K	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8  	 :b>>D)G-BSZaefffH+''11C%([[%=%="###D#&<"="=>>D')),,&	B 88B<<DDD$#T** 	cIIdOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	n 's4yyTM^ 	 	` 	` 	` 4yys$   ==DD
D
&HHHc                 J   t           j                            | j                  r$t           j                            | j                  s't          d                    | j                            t          | j        d          5 }|                                }ddd           n# 1 swxY w Y   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                            |          }|                    |          }nd}|}t%          j                    }|                    |                    d                     i }|                                D ]=}|                    |          }t0                              | j        ||          }|||<   >|| _        t7          | j                                                  }|S )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    w~~d/00 	ltGX8Y8Y 	lPWWX\Xijjkkk$#T** 	b7799D	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 t99??tBQBx+NNN#2#YF9D=vad|44Q7D}T6"R%=99!<HmD&B-88;G 6>>>>s4yy((((WYY&&&&"R%=D)G *?,,-BSZaefffH+''11C;;t$$DD FD*,,4;;v..///"OO-- 	- 	-L\\,//FmmD$5|VLLG%,H\""! !3!3!5!566s   B&&B*-B*N)rC   rD   rE   rF   r)   propertyr   r1   rQ   r   objectrV   r   r   r   rI   r*   r(   rK   rK     s         
   !T#Y ! ! ! X! $sF{+    X: :Xc] : : : :x6 6DI 6 6 6 6 6 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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77r*   c                   "    e Zd ZdZdZd Zd ZdS )WampUrlz'
    WAMP transport URL validator.
    zWAMP transport URLc                 D    t           j                            |            d S r   r   	ParamTyper)   rT   s    r(   r)   zWampUrl.__init__        &&&&&r*   c                     	 t          |           |S # t          $ r:}|                     t          t	          |                               Y d }~d S d }~ww xY wr   )r	   	Exceptionfailr   r1   )r'   r   paramctxes        r(   convertzWampUrl.convert  so    	e L  	+ 	+ 	+IIk#a&&))*********	+s    
A/AANrC   rD   rE   rF   r   r)   r   rI   r*   r(   r   r     sC           D' ' '    r*   r   c                 L    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#     L799g>>>ELr*   c                   "    e Zd ZdZdZd Zd ZdS )EthereumAddressz%
    Ethereum address validator.
    zEthereum addressc                 D    t           j                            |            d S r   r   rT   s    r(   r)   zEthereumAddress.__init__  r   r*   c                    	 t           j                            |          }t          j        |dd                    }t          |          dk    r/t          d                    t          |                              	 |S # t          $ r:}| 	                    t          t          |                               Y d }~d S 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    	I//66E"59--C5zzR !_!f!fgjkngogo!p!pqqq  
 L  	+ 	+ 	+IIk#a&&))*********	+s   A=B 
C/CCNr   rI   r*   r(   r   r     sC          D' ' '	 	 	 	 	r*   r   c                 J    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#     L?#4#4555ELr*   c                   "    e Zd ZdZdZd Zd ZdS )
PrivateKeyz2
    Private key (32 bytes in HEX) validator.
    zPrivate keyc                 R    t           j                            |            || _        d S 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        k    r5t          d                    | j        t	          |                              	 |S # t          $ r:}| 	                    t          t          |                               Y d }~d S 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    	!&%00ERaRyM))&uQRRy11&u--3xx4=(( !P!W!WX\Xegjkngogo!p!pqqq )
 L  	+ 	+ 	+IIk#a&&))*********	+s   BB$ $
C(./C##C(Nr   rI   r*   r(   r   r     sC          D         r*   r   c                 N    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'     L:g#6#6HH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                    | pd} |pd}|pd}|pd}t           j                            |           }t           j                            |          sHt          j        |           t          j        d                    t          |                               t           j        	                    |d          }t           j        
                    |          st          j        d                    t          |                               t          |d          5 }t          d	|
          }	t          j        dt          |          }
t          dddt!          j        t          j        d                                                    z   
          }t          dddt!          j        t          j        d                                                    z   
          }t          j        dt          |          }t          j        dt          |          }|                    t*                              |	|
||||                     t          j        d                    t          |                               d d d            n# 1 swxY w Y   t-          |          }|                                 |j                            |d           }|s't          j        d                    |                    |S )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7==$$ W

8??@T@TUUVVV',,z<88K7>>+&& `
3::8G;L;LMMNNN+s## 		`q-.gq|}}}K!L)elo  zG  H  H  HM"#A2tV^VfgigqrtguguVvVvV}V}VVO  A  A  AE#$>DS[ScdfdnoqdrdrSsSsSzSzS|S|L|}}}FL!C#WdeeeE|$FSZjkkkHGGO**{R_hn16eh + X X Y Y YJ@GGQ\H]H]^^___		` 		` 		` 		` 		` 		` 		` 		` 		` 		` 		` 		` 		` 		` 		` K((JOO%))'488K L"#:#A#A'#J#JKKKs   E#J

JJ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     s  6 
			 				 



        ' ' ' ' ' ' ' ' ' '              7 7 7 7 7 7 7 7 - - - - - - 7 7 7 7 7 7	OOO D
|w6RZ#7#7z~~f%%HMOOOO "!
6 	 	 	D	CN CN CN CN CNf CN CN CNLT T T T T T T Tn BJ&&z"785        eo   &       eo   ,         4   <           s   AB& &B.-B.