diff --git a/lib/core/conf/src/lib.rs b/lib/core/conf/src/lib.rs index 851a69b88a68cccc55ff0f819b746afc322ee735..c60668367f79b56b592ba78ce9f4d28a73b7b331 100644 --- a/lib/core/conf/src/lib.rs +++ b/lib/core/conf/src/lib.rs @@ -38,7 +38,9 @@ pub mod keys; use dubp_documents::CurrencyName; use dup_crypto::keys::*; use durs_common_tools::fatal_error; -use durs_module::{DursConfTrait, ModuleName, RequiredKeys, RequiredKeysContent}; +use durs_module::{ + DursConfTrait, DursGlobalConfTrait, ModuleName, RequiredKeys, RequiredKeysContent, +}; use rand::Rng; use serde::ser::{Serialize, SerializeStruct, Serializer}; use std::collections::HashSet; @@ -217,6 +219,23 @@ pub enum DuRsGlobalConf { V2(DuRsConfV2), } +impl DursGlobalConfTrait for DuRsGlobalConf { + /// Get currency + fn currency(&self) -> CurrencyName { + match *self { + DuRsGlobalConf::V1(ref conf_v1) => conf_v1.currency.clone(), + DuRsGlobalConf::V2(ref conf_v2) => conf_v2.currency.clone(), + } + } + /// Get node id + fn my_node_id(&self) -> u32 { + match *self { + DuRsGlobalConf::V1(ref conf_v1) => conf_v1.my_node_id, + DuRsGlobalConf::V2(ref conf_v2) => conf_v2.my_node_id, + } + } +} + impl Default for DuRsConf { #[inline] fn default() -> Self { @@ -258,14 +277,6 @@ impl DursConfTrait for DuRsConf { DuRsConf::V2 { .. } => 2, } } - fn currency(&self) -> CurrencyName { - match *self { - DuRsConf::V1(ref conf_v1) => conf_v1.currency.clone(), - DuRsConf::V2 { - ref global_conf, .. - } => global_conf.currency.clone(), - } - } fn set_currency(&mut self, new_currency: CurrencyName) { match *self { DuRsConf::V1(ref mut conf_v1) => conf_v1.currency = new_currency, @@ -275,14 +286,6 @@ impl DursConfTrait for DuRsConf { } => global_conf.currency = new_currency, } } - fn my_node_id(&self) -> u32 { - match *self { - DuRsConf::V1(ref conf_v1) => conf_v1.my_node_id, - DuRsConf::V2 { - ref global_conf, .. - } => global_conf.my_node_id, - } - } fn disable(&mut self, module: ModuleName) { match *self { DuRsConf::V1(ref mut conf_v1) => { diff --git a/lib/core/core/src/lib.rs b/lib/core/core/src/lib.rs index 8bbd0af748d52145afe506778b0f488e3faa1cdc..240f9ef7aa40b574d95956e3ea6396dcbe72c261 100644 --- a/lib/core/core/src/lib.rs +++ b/lib/core/core/src/lib.rs @@ -497,9 +497,9 @@ pub fn get_module_conf<M: DursModule<DuRsConf, DursMsg>>( if let Some(module_conf_json) = module_conf_json { let module_user_conf: M::ModuleUserConf = serde_json::from_str(module_conf_json.to_string().as_str())?; - M::generate_module_conf(global_conf, module_user_conf) + M::generate_module_conf(global_conf, Some(module_user_conf)) } else { - Ok(M::ModuleConf::default()) + M::generate_module_conf(global_conf, None) } } diff --git a/lib/core/module/src/lib.rs b/lib/core/module/src/lib.rs index 05cb334f4f8d498d8880ed093e920e5c1aafbc1c..8db64900bb52b48294cf3fabcddf19397e4762e6 100644 --- a/lib/core/module/src/lib.rs +++ b/lib/core/module/src/lib.rs @@ -100,15 +100,27 @@ impl ToString for ModuleReqFullId { } } +/// Durs global configuration trait +pub trait DursGlobalConfTrait: + Clone + Debug + PartialEq + Serialize + DeserializeOwned + Send + ToOwned +{ + /// Get currency + fn currency(&self) -> CurrencyName; + /// Get node id + fn my_node_id(&self) -> u32; +} + /// Durs configuration trait pub trait DursConfTrait: Clone + Debug + Default + PartialEq + Serialize + DeserializeOwned + Send + ToOwned { /// Durs configuration without modules configuration - type GlobalConf: Clone + Debug + PartialEq + Serialize + DeserializeOwned + Send + ToOwned; + type GlobalConf: DursGlobalConfTrait; /// Get currency - fn currency(&self) -> CurrencyName; + fn currency(&self) -> CurrencyName { + self.get_global_conf().currency() + } /// Disable a module fn disable(&mut self, module: ModuleName); /// Get disabled modules @@ -122,7 +134,9 @@ pub trait DursConfTrait: /// Get modules conf fn modules(&self) -> serde_json::Value; /// Get node id - fn my_node_id(&self) -> u32; + fn my_node_id(&self) -> u32 { + self.get_global_conf().my_node_id() + } /// Set currency fn set_currency(&mut self, new_currency: CurrencyName); /// Change module conf @@ -389,7 +403,7 @@ pub trait DursModule<DC: DursConfTrait, M: ModuleMessage> { /// Generate module configuration fn generate_module_conf( global_conf: &DC::GlobalConf, - module_user_conf: Self::ModuleUserConf, + module_user_conf: Option<Self::ModuleUserConf>, ) -> Result<Self::ModuleConf, ModuleConfError>; /// Define if module have a cli subcommand fn have_subcommand() -> bool { diff --git a/lib/modules/skeleton/lib.rs b/lib/modules/skeleton/lib.rs index c668973767c5c410a4d9160fc0d96ca2710c113d..89cbd042480aa78b72cb578835e876aa5e8bac91 100644 --- a/lib/modules/skeleton/lib.rs +++ b/lib/modules/skeleton/lib.rs @@ -131,12 +131,14 @@ impl DursModule<DuRsConf, DursMsg> for SkeletonModule { } fn generate_module_conf( _global_conf: &<DuRsConf as DursConfTrait>::GlobalConf, - module_user_conf: Self::ModuleUserConf, + module_user_conf: Option<Self::ModuleUserConf>, ) -> Result<Self::ModuleConf, ModuleConfError> { let mut conf = SkeletonConf::default(); - if let Some(test_fake_conf_field) = module_user_conf.test_fake_conf_field { - conf.test_fake_conf_field = test_fake_conf_field; + if let Some(module_user_conf) = module_user_conf { + if let Some(test_fake_conf_field) = module_user_conf.test_fake_conf_field { + conf.test_fake_conf_field = test_fake_conf_field; + } } Ok(conf) diff --git a/lib/modules/tui/lib.rs b/lib/modules/tui/lib.rs index 620ed14ca4b6c32b1e67b15ef35a70936fa77827..88a1a462727ff8c0979e0c40b02a03e124d670e1 100644 --- a/lib/modules/tui/lib.rs +++ b/lib/modules/tui/lib.rs @@ -389,7 +389,7 @@ impl DursModule<DuRsConf, DursMsg> for TuiModule { } fn generate_module_conf( _global_conf: &<DuRsConf as DursConfTrait>::GlobalConf, - _module_user_conf: Self::ModuleUserConf, + _module_user_conf: Option<Self::ModuleUserConf>, ) -> Result<Self::ModuleConf, ModuleConfError> { Ok(TuiConf {}) } diff --git a/lib/modules/ws2p-v1-legacy/src/lib.rs b/lib/modules/ws2p-v1-legacy/src/lib.rs index c1fb22f1258465df8ec19a1a4f367cd6e2cd4543..1fa790d5e154af287a5a7902b5c30ba5eb2819f1 100644 --- a/lib/modules/ws2p-v1-legacy/src/lib.rs +++ b/lib/modules/ws2p-v1-legacy/src/lib.rs @@ -56,7 +56,7 @@ use crate::ws2p_db::DbEndpoint; use crate::ws_connections::messages::WS2PConnectionMessage; use crate::ws_connections::states::WS2PConnectionState; use crate::ws_connections::*; -use dubp_documents::Blockstamp; +use dubp_documents::{Blockstamp, CurrencyName}; use duniter_network::cli::sync::SyncOpt; use duniter_network::documents::*; use duniter_network::events::*; @@ -344,16 +344,29 @@ impl DursModule<DuRsConf, DursMsg> for WS2PModule { true } fn generate_module_conf( - _global_conf: &<DuRsConf as DursConfTrait>::GlobalConf, - module_user_conf: Self::ModuleUserConf, + global_conf: &<DuRsConf as DursConfTrait>::GlobalConf, + module_user_conf: Option<Self::ModuleUserConf>, ) -> Result<Self::ModuleConf, ModuleConfError> { let mut conf = WS2PConf::default(); - if let Some(outcoming_quota) = module_user_conf.outcoming_quota { - conf.outcoming_quota = outcoming_quota; + if global_conf.currency() == CurrencyName("g1-test".to_owned()) { + conf.sync_endpoints = vec![unwrap!(EndpointV1::parse_from_raw( + "WS2P 3eaab4c7 ts.gt.librelois.fr 443 /ws2p", + PubKey::Ed25519(unwrap!(ed25519::PublicKey::from_base58( + "CrznBiyq8G4RVUprH9jHmAw1n1iuzw8y9FdJbrESnaX7", + )),), + 0, + 0, + ))]; } - if let Some(sync_endpoints) = module_user_conf.sync_endpoints { - conf.sync_endpoints = sync_endpoints; + + if let Some(module_user_conf) = module_user_conf { + if let Some(outcoming_quota) = module_user_conf.outcoming_quota { + conf.outcoming_quota = outcoming_quota; + } + if let Some(sync_endpoints) = module_user_conf.sync_endpoints { + conf.sync_endpoints = sync_endpoints; + } } Ok(conf) diff --git a/lib/modules/ws2p/ws2p/src/lib.rs b/lib/modules/ws2p/ws2p/src/lib.rs index a9e1eedd0b86e3982e519ee1676f6d91fb10e4a3..131bc11c5a927f1c54a60d09f4e2dbc41d6a0f7f 100644 --- a/lib/modules/ws2p/ws2p/src/lib.rs +++ b/lib/modules/ws2p/ws2p/src/lib.rs @@ -159,15 +159,17 @@ impl DursModule<DuRsConf, DursMsg> for WS2Pv2Module { } fn generate_module_conf( _global_conf: &<DuRsConf as DursConfTrait>::GlobalConf, - module_user_conf: Self::ModuleUserConf, + module_user_conf: Option<Self::ModuleUserConf>, ) -> Result<Self::ModuleConf, ModuleConfError> { let mut conf = WS2PConf::default(); - if let Some(outcoming_quota) = module_user_conf.outcoming_quota { - conf.outcoming_quota = outcoming_quota; - } - if let Some(sync_endpoints) = module_user_conf.sync_endpoints { - conf.sync_endpoints = sync_endpoints; + if let Some(module_user_conf) = module_user_conf { + if let Some(outcoming_quota) = module_user_conf.outcoming_quota { + conf.outcoming_quota = outcoming_quota; + } + if let Some(sync_endpoints) = module_user_conf.sync_endpoints { + conf.sync_endpoints = sync_endpoints; + } } Ok(conf)