11use crate :: module:: account:: AccountFeatureModule ;
22use clap:: Parser ;
33use many_identity:: verifiers:: AnonymousVerifier ;
4+ use many_identity:: Address ;
45use many_identity_dsa:: { CoseKeyIdentity , CoseKeyVerifier } ;
56use many_modules:: account:: features:: Feature ;
67use many_modules:: { abci_backend, account, events, kvstore} ;
78use many_server:: transport:: http:: HttpServer ;
89use many_server:: ManyServer ;
10+ use std:: collections:: BTreeSet ;
911use std:: net:: SocketAddr ;
1012use std:: path:: PathBuf ;
1113use std:: sync:: { Arc , Mutex } ;
@@ -62,6 +64,12 @@ struct Opts {
6264 /// Use given logging strategy
6365 #[ clap( long, arg_enum, default_value_t = LogStrategy :: Terminal ) ]
6466 logmode : LogStrategy ,
67+
68+ /// Path to a JSON file containing an array of MANY addresses
69+ /// Only addresses from this array will be able to execute commands, e.g., send, put, ...
70+ /// Any addresses will be able to execute queries, e.g., balance, get, ...
71+ #[ clap( long) ]
72+ allow_addrs : Option < PathBuf > ,
6573}
6674
6775fn main ( ) {
@@ -75,6 +83,7 @@ fn main() {
7583 persistent,
7684 clean,
7785 logmode,
86+ allow_addrs,
7887 } = Opts :: parse ( ) ;
7988
8089 let verbose_level = 2 + verbose - quiet;
@@ -143,7 +152,17 @@ fn main() {
143152 {
144153 let mut s = many. lock ( ) . unwrap ( ) ;
145154 s. add_module ( kvstore:: KvStoreModule :: new ( module. clone ( ) ) ) ;
146- s. add_module ( kvstore:: KvStoreCommandsModule :: new ( module. clone ( ) ) ) ;
155+ let kvstore_command_module = kvstore:: KvStoreCommandsModule :: new ( module. clone ( ) ) ;
156+ if let Some ( path) = allow_addrs {
157+ let allow_addrs: BTreeSet < Address > =
158+ json5:: from_str ( & std:: fs:: read_to_string ( & path) . unwrap ( ) ) . unwrap ( ) ;
159+ s. add_module ( allow_addrs:: AllowAddrsModule {
160+ inner : kvstore_command_module,
161+ allow_addrs,
162+ } ) ;
163+ } else {
164+ s. add_module ( kvstore_command_module) ;
165+ }
147166 s. add_module ( events:: EventsModule :: new ( module. clone ( ) ) ) ;
148167
149168 s. add_module ( AccountFeatureModule :: new (
0 commit comments