clippy patches

This commit is contained in:
kn0sys 2024-09-02 11:21:33 -04:00
parent 45b2563f78
commit a4cd1d3624
No known key found for this signature in database
GPG key ID: 3BDB674C95F103FA
22 changed files with 175 additions and 243 deletions

10
Cargo.lock generated
View file

@ -249,6 +249,15 @@ version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72" checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72"
[[package]]
name = "bincode"
version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "1.3.2" version = "1.3.2"
@ -1915,6 +1924,7 @@ dependencies = [
name = "neveko_core" name = "neveko_core"
version = "0.1.2-beta" version = "0.1.2-beta"
dependencies = [ dependencies = [
"bincode",
"chrono", "chrono",
"clap", "clap",
"curve25519-dalek", "curve25519-dalek",

View file

@ -6,6 +6,7 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
bincode = "1.3.3"
chrono = "0.4.23" chrono = "0.4.23"
clap = { version = "4.1.4", features = ["derive"] } clap = { version = "4.1.4", features = ["derive"] }
curve25519-dalek = "4.1.3" curve25519-dalek = "4.1.3"

View file

@ -85,7 +85,7 @@ fn update_expiration(f_auth: &Authorization, address: &String) -> Authorization
&u_auth.aid, &u_auth.aid,
&Authorization::to_db(&u_auth), &Authorization::to_db(&u_auth),
); );
return u_auth; u_auth
} }
/// Performs the signature verfication against stored auth /// Performs the signature verfication against stored auth
@ -130,7 +130,7 @@ pub async fn verify_login(aid: String, uid: String, signature: String) -> Author
&Authorization::to_db(&u_auth), &Authorization::to_db(&u_auth),
); );
monero::close_wallet(&wallet_name, &wallet_password).await; monero::close_wallet(&wallet_name, &wallet_password).await;
return u_auth; u_auth
} else if f_user.xmr_address != utils::empty_string() { } else if f_user.xmr_address != utils::empty_string() {
info!("returning user"); info!("returning user");
let m_access = verify_access(&address, &signature).await; let m_access = verify_access(&address, &signature).await;
@ -174,7 +174,7 @@ async fn verify_access(address: &String, signature: &String) -> bool {
return false; return false;
} }
info!("auth verified"); info!("auth verified");
return true; true
} }
/// get the auth expiration command line configuration /// get the auth expiration command line configuration
@ -185,7 +185,7 @@ fn get_auth_expiration() -> i64 {
fn create_token(address: String, created: i64) -> String { fn create_token(address: String, created: i64) -> String {
let jwt_secret_key = utils::get_jwt_secret_key(); let jwt_secret_key = utils::get_jwt_secret_key();
let key: Hmac<Sha384> = Hmac::new_from_slice(&jwt_secret_key.as_bytes()).expect("hash"); let key: Hmac<Sha384> = Hmac::new_from_slice(jwt_secret_key.as_bytes()).expect("hash");
let header = Header { let header = Header {
algorithm: AlgorithmType::Hs384, algorithm: AlgorithmType::Hs384,
..Default::default() ..Default::default()
@ -202,6 +202,13 @@ fn create_token(address: String, created: i64) -> String {
#[derive(Debug)] #[derive(Debug)]
pub struct BearerToken(String); pub struct BearerToken(String);
impl BearerToken {
pub fn get_token(self) -> String {
self.0
}
}
#[derive(Debug)] #[derive(Debug)]
pub enum BearerTokenError { pub enum BearerTokenError {
Expired, Expired,
@ -232,7 +239,7 @@ impl<'r> FromRequest<'r> for BearerToken {
Some(token) => { Some(token) => {
// check validity // check validity
let jwt_secret_key = utils::get_jwt_secret_key(); let jwt_secret_key = utils::get_jwt_secret_key();
let key: Hmac<Sha384> = Hmac::new_from_slice(&jwt_secret_key.as_bytes()).expect(""); let key: Hmac<Sha384> = Hmac::new_from_slice(jwt_secret_key.as_bytes()).expect("");
let jwt: Result< let jwt: Result<
Token<jwt::Header, BTreeMap<std::string::String, std::string::String>, _>, Token<jwt::Header, BTreeMap<std::string::String, std::string::String>, _>,
jwt::Error, jwt::Error,
@ -250,10 +257,7 @@ impl<'r> FromRequest<'r> for BearerToken {
} }
// verify expiration // verify expiration
let now: i64 = chrono::offset::Utc::now().timestamp(); let now: i64 = chrono::offset::Utc::now().timestamp();
let expire = match claims["expiration"].parse::<i64>() { let expire = claims["expiration"].parse::<i64>().unwrap_or(0);
Ok(n) => n,
Err(_) => 0,
};
if now > expire { if now > expire {
return Outcome::Failure(( return Outcome::Failure((
Status::Unauthorized, Status::Unauthorized,

View file

@ -84,7 +84,7 @@ pub fn find(cid: &String) -> Contact {
pub fn find_by_i2p_address(i2p_address: &String) -> Contact { pub fn find_by_i2p_address(i2p_address: &String) -> Contact {
let contacts = find_all(); let contacts = find_all();
for c in contacts { for c in contacts {
if c.i2p_address == String::from(i2p_address) { if c.i2p_address == *i2p_address {
return c; return c;
} }
} }
@ -99,7 +99,7 @@ pub fn delete(cid: &String) {
error!("contact not found"); error!("contact not found");
return; return;
} }
db::Interface::delete(&s.env, &s.handle, &cid); db::Interface::delete(&s.env, &s.handle, cid);
} }
/// All contact lookup /// All contact lookup
@ -113,7 +113,7 @@ pub fn find_all() -> Vec<Contact> {
return Default::default(); return Default::default();
} }
let v_cid = r.split(","); let v_cid = r.split(",");
let v: Vec<String> = v_cid.map(|s| String::from(s)).collect(); let v: Vec<String> = v_cid.map(String::from).collect();
let mut contacts: Vec<Contact> = Vec::new(); let mut contacts: Vec<Contact> = Vec::new();
for id in v { for id in v {
if id != utils::empty_string() { if id != utils::empty_string() {
@ -168,7 +168,7 @@ pub fn exists(from: &String) -> bool {
for c in all { for c in all {
addresses.push(c.i2p_address); addresses.push(c.i2p_address);
} }
return addresses.contains(from); addresses.contains(from)
} }
/// Get invoice for jwp creation /// Get invoice for jwp creation

View file

@ -44,7 +44,7 @@ impl Interface {
// increase map size for writing the multisig txset // increase map size for writing the multisig txset
.map_size(crate::LMDB_MAPSIZE) .map_size(crate::LMDB_MAPSIZE)
.open(format!("{}/{}", file_path, env_str), 0o777) .open(format!("{}/{}", file_path, env_str), 0o777)
.expect(&format!("could not open LMDB at {}", file_path)); .unwrap_or_else(|_| panic!("could not open LMDB at {}", file_path));
let handle = env.get_default_db(DbFlags::empty()).unwrap(); let handle = env.get_default_db(DbFlags::empty()).unwrap();
Interface { env, handle } Interface { env, handle }
} }
@ -66,16 +66,13 @@ impl Interface {
let txn = e.new_transaction().unwrap(); let txn = e.new_transaction().unwrap();
{ {
// get a database bound to this transaction // get a database bound to this transaction
let db = txn.bind(&h); let db = txn.bind(h);
let pair = vec![(k, v)]; let pair = [(k, v)];
for &(key, value) in pair.iter() { for &(key, value) in pair.iter() {
db.set(&key, &value).unwrap(); db.set(&key, &value).unwrap();
} }
} }
match txn.commit() { if txn.commit().is_err() { error!("failed to commit!") }
Err(_) => error!("failed to commit!"),
Ok(_) => (),
}
} }
pub async fn async_write(e: &Environment, h: &DbHandle, k: &str, v: &str) { pub async fn async_write(e: &Environment, h: &DbHandle, k: &str, v: &str) {
info!("excecuting lmdb async write"); info!("excecuting lmdb async write");
@ -95,8 +92,8 @@ impl Interface {
return utils::empty_string(); return utils::empty_string();
} }
let reader = e.get_reader().unwrap(); let reader = e.get_reader().unwrap();
let db = reader.bind(&h); let db = reader.bind(h);
let value = db.get::<&str>(&k).unwrap_or_else(|_| ""); let value = db.get::<&str>(&k).unwrap_or("");
let r = String::from(value); let r = String::from(value);
{ {
if r == utils::empty_string() { if r == utils::empty_string() {
@ -125,13 +122,10 @@ impl Interface {
let txn = e.new_transaction().unwrap(); let txn = e.new_transaction().unwrap();
{ {
// get a database bound to this transaction // get a database bound to this transaction
let db = txn.bind(&h); let db = txn.bind(h);
db.del(&k).unwrap_or_else(|_| error!("failed to delete")); db.del(&k).unwrap_or_else(|_| error!("failed to delete"));
} }
match txn.commit() { if txn.commit().is_err() { error!("failed to commit!") }
Err(_) => error!("failed to commit!"),
Ok(_) => (),
}
} }
pub async fn async_delete(e: &Environment, h: &DbHandle, k: &str) { pub async fn async_delete(e: &Environment, h: &DbHandle, k: &str) {
info!("excecuting lmdb async delete"); info!("excecuting lmdb async delete");

View file

@ -70,7 +70,7 @@ pub fn find_all() -> Vec<Dispute> {
error!("dispute index not found"); error!("dispute index not found");
} }
let d_v_did = d_r.split(","); let d_v_did = d_r.split(",");
let d_v: Vec<String> = d_v_did.map(|s| String::from(s)).collect(); let d_v: Vec<String> = d_v_did.map(String::from).collect();
let mut disputes: Vec<Dispute> = Vec::new(); let mut disputes: Vec<Dispute> = Vec::new();
for o in d_v { for o in d_v {
let dispute: Dispute = find(&o); let dispute: Dispute = find(&o);
@ -112,7 +112,7 @@ pub async fn settle_dispute() {
info!("dispute index not found"); info!("dispute index not found");
} }
let v_mid = r.split(","); let v_mid = r.split(",");
let d_vec: Vec<String> = v_mid.map(|s| String::from(s)).collect(); let d_vec: Vec<String> = v_mid.map(String::from).collect();
debug!("dispute contents: {:#?}", d_vec); debug!("dispute contents: {:#?}", d_vec);
let cleared = is_dispute_clear(r); let cleared = is_dispute_clear(r);
if cleared { if cleared {
@ -127,7 +127,7 @@ pub async fn settle_dispute() {
let now = chrono::offset::Utc::now().timestamp(); let now = chrono::offset::Utc::now().timestamp();
let settle_date = dispute.created + crate::DISPUTE_AUTO_SETTLE as i64; let settle_date = dispute.created + crate::DISPUTE_AUTO_SETTLE as i64;
if settle_date > now { if settle_date > now {
let wallet_name = String::from(dispute.orid); let wallet_name = dispute.orid;
let wallet_password = utils::empty_string(); let wallet_password = utils::empty_string();
monero::open_wallet(&wallet_name, &wallet_password).await; monero::open_wallet(&wallet_name, &wallet_password).await;
let signed = monero::sign_multisig(dispute.tx_set).await; let signed = monero::sign_multisig(dispute.tx_set).await;
@ -147,15 +147,15 @@ pub async fn settle_dispute() {
fn is_dispute_clear(r: String) -> bool { fn is_dispute_clear(r: String) -> bool {
let v_mid = r.split(","); let v_mid = r.split(",");
let v: Vec<String> = v_mid.map(|s| String::from(s)).collect(); let v: Vec<String> = v_mid.map(String::from).collect();
debug!("dispute index contents: {:#?}", v); debug!("dispute index contents: {:#?}", v);
let limit = v.len() <= 1; let limit = v.len() <= 1;
if !limit { if !limit {
return v.len() >= 2 v.len() >= 2
&& v[v.len() - 1] == utils::empty_string() && v[v.len() - 1] == utils::empty_string()
&& v[0] == utils::empty_string(); && v[0] == utils::empty_string()
} else { } else {
return limit; limit
} }
} }

View file

@ -49,17 +49,11 @@ struct Tunnel {
} }
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
#[derive(Default)]
struct Tunnels { struct Tunnels {
tunnels: Vec<Tunnel>, tunnels: Vec<Tunnel>,
} }
impl Default for Tunnels {
fn default() -> Self {
Tunnels {
tunnels: Vec::new(),
}
}
}
/// Looks for the `tunnels-config.json` at /home/$USER/.i2p-zero/config/ /// Looks for the `tunnels-config.json` at /home/$USER/.i2p-zero/config/
/// ///
@ -77,7 +71,7 @@ async fn find_tunnels() {
let proxy_port = get_i2p_proxy_port(); let proxy_port = get_i2p_proxy_port();
let socks_proxy_port = get_i2p_socks_proxy_port(); let socks_proxy_port = get_i2p_socks_proxy_port();
let has_http_tunnel = contents.contains(&proxy_port); let has_http_tunnel = contents.contains(&proxy_port);
let has_socks_proxy_tunnel = contents.contains(&format!("{}", &socks_proxy_port)); let has_socks_proxy_tunnel = contents.contains(&socks_proxy_port.to_string());
let has_anon_inbound_tunnel = contents.contains(&format!("{}", args.anon_inbound_port)); let has_anon_inbound_tunnel = contents.contains(&format!("{}", args.anon_inbound_port));
if !has_app_tunnel || !has_http_tunnel || !has_anon_inbound_tunnel || !has_socks_proxy_tunnel { if !has_app_tunnel || !has_http_tunnel || !has_anon_inbound_tunnel || !has_socks_proxy_tunnel {
tokio::time::sleep(Duration::new(120, 0)).await; tokio::time::sleep(Duration::new(120, 0)).await;
@ -112,7 +106,7 @@ pub async fn start() {
Ok(child) => debug!("{:?}", child.stdout), Ok(child) => debug!("{:?}", child.stdout),
_ => { _ => {
warn!("i2p-zero not installed, manual tunnel creation required"); warn!("i2p-zero not installed, manual tunnel creation required");
()
} }
} }
find_tunnels().await; find_tunnels().await;
@ -150,7 +144,7 @@ fn create_socks_proxy_tunnel() {
let args = args::Args::parse(); let args = args::Args::parse();
let path = args.i2p_zero_dir; let path = args.i2p_zero_dir;
let output = Command::new(format!("{}/router/bin/tunnel-control.sh", path)) let output = Command::new(format!("{}/router/bin/tunnel-control.sh", path))
.args(["socks.create", &format!("{}", get_i2p_socks_proxy_port())]) .args(["socks.create", &get_i2p_socks_proxy_port().to_string()])
.spawn() .spawn()
.expect("i2p-zero failed to create a socks proxy tunnel"); .expect("i2p-zero failed to create a socks proxy tunnel");
debug!("{:?}", output.stdout); debug!("{:?}", output.stdout);
@ -176,18 +170,18 @@ fn create_anon_inbound_tunnel() {
fn get_i2p_proxy_port() -> String { fn get_i2p_proxy_port() -> String {
let proxy_host = utils::get_i2p_http_proxy(); let proxy_host = utils::get_i2p_http_proxy();
let values = proxy_host.split(":"); let values = proxy_host.split(":");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
let port = v.remove(2);
port v.remove(2)
} }
/// Extract i2p socks port from command line arg /// Extract i2p socks port from command line arg
fn get_i2p_socks_proxy_port() -> String { fn get_i2p_socks_proxy_port() -> String {
let proxy_host = utils::get_i2p_wallet_proxy_host(); let proxy_host = utils::get_i2p_wallet_proxy_host();
let values = proxy_host.split(":"); let values = proxy_host.split(":");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
let port = v.remove(2);
port v.remove(2)
} }
/// Create the http proxy if it doesn't exist /// Create the http proxy if it doesn't exist
@ -216,7 +210,7 @@ pub fn get_destination(port: Option<u16>) -> String {
let args = args::Args::parse(); let args = args::Args::parse();
let is_advanced_mode = let is_advanced_mode =
std::env::var(crate::NEVEKO_I2P_ADVANCED_MODE).unwrap_or(utils::empty_string()); std::env::var(crate::NEVEKO_I2P_ADVANCED_MODE).unwrap_or(utils::empty_string());
if args.i2p_advanced || is_advanced_mode == String::from("1") { if args.i2p_advanced || is_advanced_mode == *"1" {
let advanced_tunnel = let advanced_tunnel =
std::env::var(crate::NEVEKO_I2P_TUNNELS_JSON).unwrap_or(utils::empty_string()); std::env::var(crate::NEVEKO_I2P_TUNNELS_JSON).unwrap_or(utils::empty_string());
let manual_tunnel = if advanced_tunnel == utils::empty_string() { let manual_tunnel = if advanced_tunnel == utils::empty_string() {
@ -232,7 +226,7 @@ pub fn get_destination(port: Option<u16>) -> String {
_ => utils::empty_string(), _ => utils::empty_string(),
}; };
if contents != utils::empty_string() { if contents != utils::empty_string() {
let input = format!(r#"{contents}"#); let input = contents.to_string();
let j: Tunnels = serde_json::from_str(&input).unwrap_or(Default::default()); let j: Tunnels = serde_json::from_str(&input).unwrap_or(Default::default());
let mut destination: String = utils::empty_string(); let mut destination: String = utils::empty_string();
let tunnels: Vec<Tunnel> = j.tunnels; let tunnels: Vec<Tunnel> = j.tunnels;

View file

@ -69,7 +69,7 @@ pub const I2P_ZERO_RELEASE_VERSION: &str = "v1.21";
pub const I2P_ZERO_RELEASH_HASH: &str = pub const I2P_ZERO_RELEASH_HASH: &str =
"14f34052ad6abb0c24b048816b0ea86b696ae350dd139dd1e90a67ca88e1d07a"; "14f34052ad6abb0c24b048816b0ea86b696ae350dd139dd1e90a67ca88e1d07a";
pub const LMDB_MAPSIZE: u64 = 1 * 1024 * 1024 * 1024; pub const LMDB_MAPSIZE: u64 = 1024 * 1024 * 1024;
pub const I2P_CONNECTIVITY_CHECK_INTERVAL: u32 = 600000; pub const I2P_CONNECTIVITY_CHECK_INTERVAL: u32 = 600000;
pub const FTS_RETRY_INTERVAL: u32 = 60000; pub const FTS_RETRY_INTERVAL: u32 = 60000;
/// There is a one week grace period for manual intervention of disputes /// There is a one week grace period for manual intervention of disputes

View file

@ -133,10 +133,10 @@ pub async fn rx(m: Json<Message>) {
/// Parse the multisig message type and info /// Parse the multisig message type and info
async fn parse_multisig_message(mid: String) -> MultisigMessageData { async fn parse_multisig_message(mid: String) -> MultisigMessageData {
let d: reqres::DecipheredMessageBody = decipher_body(mid).await; let d: reqres::DecipheredMessageBody = decipher_body(mid).await;
let mut bytes = hex::decode(d.body.into_bytes()).unwrap_or(Vec::new()); let mut bytes = hex::decode(d.body.into_bytes()).unwrap_or_default();
let decoded = String::from_utf8(bytes).unwrap_or(utils::empty_string()); let decoded = String::from_utf8(bytes).unwrap_or(utils::empty_string());
let values = decoded.split(":"); let values = decoded.split(":");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
if v.len() != VALID_MSIG_MSG_LENGTH { if v.len() != VALID_MSIG_MSG_LENGTH {
error!("invalid msig message length"); error!("invalid msig message length");
return Default::default(); return Default::default();
@ -247,7 +247,7 @@ pub fn find_all() -> Vec<Message> {
error!("message index not found"); error!("message index not found");
} }
let i_v_mid = i_r.split(","); let i_v_mid = i_r.split(",");
let i_v: Vec<String> = i_v_mid.map(|s| String::from(s)).collect(); let i_v: Vec<String> = i_v_mid.map(String::from).collect();
let mut messages: Vec<Message> = Vec::new(); let mut messages: Vec<Message> = Vec::new();
for m in i_v { for m in i_v {
let message: Message = find(&m); let message: Message = find(&m);
@ -262,7 +262,7 @@ pub fn find_all() -> Vec<Message> {
error!("message index not found"); error!("message index not found");
} }
let o_v_mid = o_r.split(","); let o_v_mid = o_r.split(",");
let o_v: Vec<String> = o_v_mid.map(|s| String::from(s)).collect(); let o_v: Vec<String> = o_v_mid.map(String::from).collect();
for m in o_v { for m in o_v {
let message: Message = find(&m); let message: Message = find(&m);
if message.mid != utils::empty_string() { if message.mid != utils::empty_string() {
@ -286,7 +286,7 @@ async fn send_message(out: &Message, jwp: &str, m_type: MessageType) -> Result<(
.await .await
.unwrap_or(false); .unwrap_or(false);
if is_online { if is_online {
return match client? match client?
.post(url) .post(url)
.header("proof", jwp) .header("proof", jwp)
.json(&out) .json(&out)
@ -298,7 +298,7 @@ async fn send_message(out: &Message, jwp: &str, m_type: MessageType) -> Result<(
debug!("send response: {:?}", status.as_str()); debug!("send response: {:?}", status.as_str());
if status == StatusCode::OK || status == StatusCode::PAYMENT_REQUIRED { if status == StatusCode::OK || status == StatusCode::PAYMENT_REQUIRED {
remove_from_fts(String::from(&out.mid)); remove_from_fts(String::from(&out.mid));
return Ok(()); Ok(())
} else { } else {
Ok(()) Ok(())
} }
@ -307,7 +307,7 @@ async fn send_message(out: &Message, jwp: &str, m_type: MessageType) -> Result<(
error!("failed to send message due to: {:?}", e); error!("failed to send message due to: {:?}", e);
Ok(()) Ok(())
} }
}; }
} else { } else {
send_to_retry(String::from(&out.mid)).await; send_to_retry(String::from(&out.mid)).await;
Ok(()) Ok(())
@ -385,7 +385,7 @@ async fn send_to_retry(mid: String) {
// restart fts if not empty // restart fts if not empty
let r = db::Interface::read(&s.env, &s.handle, &String::from(list_key)); let r = db::Interface::read(&s.env, &s.handle, &String::from(list_key));
let v_mid = r.split(","); let v_mid = r.split(",");
let v: Vec<String> = v_mid.map(|s| String::from(s)).collect(); let v: Vec<String> = v_mid.map(String::from).collect();
debug!("fts contents: {:#?}", v); debug!("fts contents: {:#?}", v);
let cleared = is_fts_clear(r); let cleared = is_fts_clear(r);
if !cleared { if !cleared {
@ -440,7 +440,7 @@ pub async fn retry_fts() {
break; // terminate fts if no message to send break; // terminate fts if no message to send
} }
let v_mid = r.split(","); let v_mid = r.split(",");
let v: Vec<String> = v_mid.map(|s| String::from(s)).collect(); let v: Vec<String> = v_mid.map(String::from).collect();
debug!("fts contents: {:#?}", v); debug!("fts contents: {:#?}", v);
let cleared = is_fts_clear(r); let cleared = is_fts_clear(r);
if cleared { if cleared {
@ -482,15 +482,15 @@ fn validate_message(j: &Json<Message>) -> bool {
fn is_fts_clear(r: String) -> bool { fn is_fts_clear(r: String) -> bool {
let v_mid = r.split(","); let v_mid = r.split(",");
let v: Vec<String> = v_mid.map(|s| String::from(s)).collect(); let v: Vec<String> = v_mid.map(String::from).collect();
debug!("fts contents: {:#?}", v); debug!("fts contents: {:#?}", v);
let limit = v.len() <= 1; let limit = v.len() <= 1;
if !limit { if !limit {
return v.len() >= 2 v.len() >= 2
&& v[v.len() - 1] == utils::empty_string() && v[v.len() - 1] == utils::empty_string()
&& v[0] == utils::empty_string(); && v[0] == utils::empty_string()
} else { } else {
return limit; limit
} }
} }
@ -516,7 +516,7 @@ pub async fn send_prepare_info(orid: &String, contact: &String) {
..Default::default() ..Default::default()
}; };
let j_message: Json<Message> = utils::message_to_json(&message); let j_message: Json<Message> = utils::message_to_json(&message);
monero::close_wallet(&orid, &wallet_password).await; monero::close_wallet(orid, &wallet_password).await;
create(j_message, jwp, MessageType::Multisig).await; create(j_message, jwp, MessageType::Multisig).await;
} }
@ -539,7 +539,7 @@ pub async fn send_make_info(orid: &String, contact: &String, info: Vec<String>)
..Default::default() ..Default::default()
}; };
let j_message: Json<Message> = utils::message_to_json(&message); let j_message: Json<Message> = utils::message_to_json(&message);
monero::close_wallet(&orid, &wallet_password).await; monero::close_wallet(orid, &wallet_password).await;
create(j_message, jwp, MessageType::Multisig).await; create(j_message, jwp, MessageType::Multisig).await;
} }
@ -576,7 +576,7 @@ pub async fn send_exchange_info(
..Default::default() ..Default::default()
}; };
let j_message: Json<Message> = utils::message_to_json(&message); let j_message: Json<Message> = utils::message_to_json(&message);
monero::close_wallet(&orid, &wallet_password).await; monero::close_wallet(orid, &wallet_password).await;
create(j_message, jwp, MessageType::Multisig).await; create(j_message, jwp, MessageType::Multisig).await;
} }
@ -599,7 +599,7 @@ pub async fn send_export_info(orid: &String, contact: &String) {
..Default::default() ..Default::default()
}; };
let j_message: Json<Message> = utils::message_to_json(&message); let j_message: Json<Message> = utils::message_to_json(&message);
monero::close_wallet(&orid, &wallet_password).await; monero::close_wallet(orid, &wallet_password).await;
create(j_message, jwp, MessageType::Multisig).await; create(j_message, jwp, MessageType::Multisig).await;
} }
@ -613,7 +613,7 @@ pub async fn send_import_info(orid: &String, info: &Vec<String>) {
let wallet_password = utils::empty_string(); let wallet_password = utils::empty_string();
monero::open_wallet(&wallet_name, &wallet_password).await; monero::open_wallet(&wallet_name, &wallet_password).await;
let pre_import = monero::import_multisig_info(info.to_vec()).await; let pre_import = monero::import_multisig_info(info.to_vec()).await;
monero::close_wallet(&orid, &wallet_password).await; monero::close_wallet(orid, &wallet_password).await;
if pre_import.result.n_outputs == 0 { if pre_import.result.n_outputs == 0 {
error!("unable to import multisig info for order: {}", orid); error!("unable to import multisig info for order: {}", orid);
return; return;

View file

@ -40,7 +40,7 @@ impl Authorization {
} }
pub fn from_db(k: String, v: String) -> Authorization { pub fn from_db(k: String, v: String) -> Authorization {
let values = v.split(":"); let values = v.split(":");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
let created_str = v.remove(0); let created_str = v.remove(0);
let created = match created_str.parse::<i64>() { let created = match created_str.parse::<i64>() {
Ok(n) => n, Ok(n) => n,
@ -117,7 +117,7 @@ impl Contact {
} }
pub fn from_db(k: String, v: String) -> Contact { pub fn from_db(k: String, v: String) -> Contact {
let values = v.split("!"); let values = v.split("!");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
let nmpk = v.remove(0); let nmpk = v.remove(0);
let i2p_address = v.remove(0); let i2p_address = v.remove(0);
let is_vendor = match v.remove(0).parse::<bool>() { let is_vendor = match v.remove(0).parse::<bool>() {
@ -165,7 +165,7 @@ impl Message {
} }
pub fn from_db(k: String, v: String) -> Message { pub fn from_db(k: String, v: String) -> Message {
let values = v.split(":"); let values = v.split(":");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
let uid = v.remove(0); let uid = v.remove(0);
let body = v.remove(0); let body = v.remove(0);
let created_str = v.remove(0); let created_str = v.remove(0);
@ -210,7 +210,7 @@ impl User {
} }
pub fn from_db(k: String, v: String) -> User { pub fn from_db(k: String, v: String) -> User {
let values = v.split(":"); let values = v.split(":");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
let name = v.remove(0); let name = v.remove(0);
let xmr_address = v.remove(0); let xmr_address = v.remove(0);
User { User {
@ -264,22 +264,13 @@ impl Product {
} }
pub fn from_db(k: String, v: String) -> Product { pub fn from_db(k: String, v: String) -> Product {
let values = v.split(":"); let values = v.split(":");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
let description = v.remove(0); let description = v.remove(0);
let image = hex::decode(v.remove(0)).unwrap_or(Vec::new()); let image = hex::decode(v.remove(0)).unwrap_or_default();
let in_stock = match v.remove(0).parse::<bool>() { let in_stock = v.remove(0).parse::<bool>().unwrap_or(false);
Ok(b) => b,
Err(_) => false,
};
let name = v.remove(0); let name = v.remove(0);
let price = match v.remove(0).parse::<u128>() { let price = v.remove(0).parse::<u128>().unwrap_or(0);
Ok(p) => p, let qty = v.remove(0).parse::<u128>().unwrap_or(0);
Err(_) => 0,
};
let qty = match v.remove(0).parse::<u128>() {
Ok(q) => q,
Err(_) => 0,
};
Product { Product {
pid: k, pid: k,
description, description,
@ -294,7 +285,7 @@ impl Product {
Product { Product {
pid: p.pid, pid: p.pid,
description: String::from(&jp.description), description: String::from(&jp.description),
image: jp.image.iter().cloned().collect(), image: jp.image.to_vec(),
in_stock: jp.in_stock, in_stock: jp.in_stock,
name: String::from(&jp.name), name: String::from(&jp.name),
price: jp.price, price: jp.price,
@ -413,7 +404,7 @@ impl Order {
} }
pub fn from_db(k: String, v: String) -> Order { pub fn from_db(k: String, v: String) -> Order {
let values = v.split(":"); let values = v.split(":");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
let orid = k; let orid = k;
let cid = v.remove(0); let cid = v.remove(0);
let pid = v.remove(0); let pid = v.remove(0);
@ -423,14 +414,8 @@ impl Order {
let cust_msig_make = v.remove(0); let cust_msig_make = v.remove(0);
let cust_msig_prepare = v.remove(0); let cust_msig_prepare = v.remove(0);
let cust_msig_txset = v.remove(0); let cust_msig_txset = v.remove(0);
let date = match v.remove(0).parse::<i64>() { let date = v.remove(0).parse::<i64>().unwrap_or(0);
Ok(d) => d, let deliver_date = v.remove(0).parse::<i64>().unwrap_or(0);
Err(_) => 0,
};
let deliver_date = match v.remove(0).parse::<i64>() {
Ok(d) => d,
Err(_) => 0,
};
let hash = v.remove(0); let hash = v.remove(0);
let adjudicator_msig_make = v.remove(0); let adjudicator_msig_make = v.remove(0);
let adjudicator_msig_prepare = v.remove(0); let adjudicator_msig_prepare = v.remove(0);
@ -438,16 +423,10 @@ impl Order {
let adjudicator_kex_2 = v.remove(0); let adjudicator_kex_2 = v.remove(0);
let adjudicator_kex_3 = v.remove(0); let adjudicator_kex_3 = v.remove(0);
let ship_address = v.remove(0); let ship_address = v.remove(0);
let ship_date = match v.remove(0).parse::<i64>() { let ship_date = v.remove(0).parse::<i64>().unwrap_or(0);
Ok(d) => d,
Err(_) => 0,
};
let subaddress = v.remove(0); let subaddress = v.remove(0);
let status = v.remove(0); let status = v.remove(0);
let quantity = match v.remove(0).parse::<u128>() { let quantity = v.remove(0).parse::<u128>().unwrap_or(0);
Ok(d) => d,
Err(_) => 0,
};
let vend_kex_1 = v.remove(0); let vend_kex_1 = v.remove(0);
let vend_kex_2 = v.remove(0); let vend_kex_2 = v.remove(0);
let vend_kex_3 = v.remove(0); let vend_kex_3 = v.remove(0);
@ -548,11 +527,8 @@ impl Dispute {
} }
pub fn from_db(k: String, v: String) -> Dispute { pub fn from_db(k: String, v: String) -> Dispute {
let values = v.split(":"); let values = v.split(":");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
let created = match v.remove(0).parse::<i64>() { let created = v.remove(0).parse::<i64>().unwrap_or(0);
Ok(t) => t,
Err(_) => 0,
};
let orid = v.remove(0); let orid = v.remove(0);
let tx_set = v.remove(0); let tx_set = v.remove(0);
Dispute { Dispute {

View file

@ -17,11 +17,7 @@ use log::{
}; };
use std::{ use std::{
error::Error, error::Error,
io::Write, process::Command,
process::{
Command,
Stdio,
},
}; };
use lazy_static::lazy_static; use lazy_static::lazy_static;
@ -184,7 +180,7 @@ pub fn start_daemon() {
let mut socks_proxy_host = utils::get_i2p_wallet_proxy_host(); let mut socks_proxy_host = utils::get_i2p_wallet_proxy_host();
if socks_proxy_host.contains("http://") { if socks_proxy_host.contains("http://") {
let values = socks_proxy_host.split("http://"); let values = socks_proxy_host.split("http://");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
socks_proxy_host = v.remove(1); socks_proxy_host = v.remove(1);
}; };
let tx_proxy = format!("i2p,{}", socks_proxy_host); let tx_proxy = format!("i2p,{}", socks_proxy_host);
@ -241,7 +237,7 @@ pub fn start_rpc() {
let mut proxy_host = utils::get_i2p_wallet_proxy_host(); let mut proxy_host = utils::get_i2p_wallet_proxy_host();
if proxy_host.contains("http://") { if proxy_host.contains("http://") {
let values = proxy_host.split("http://"); let values = proxy_host.split("http://");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
proxy_host = v.remove(1); proxy_host = v.remove(1);
} }
let mut args = vec![ let mut args = vec![
@ -281,9 +277,9 @@ pub fn start_rpc() {
fn get_rpc_port() -> String { fn get_rpc_port() -> String {
let args = args::Args::parse(); let args = args::Args::parse();
let rpc = String::from(args.monero_rpc_host); let rpc = args.monero_rpc_host;
let values = rpc.split(":"); let values = rpc.split(":");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
let port = v.remove(2); let port = v.remove(2);
debug!("monero-wallet-rpc port: {}", port); debug!("monero-wallet-rpc port: {}", port);
port port
@ -291,28 +287,22 @@ fn get_rpc_port() -> String {
pub fn get_daemon_port() -> u16 { pub fn get_daemon_port() -> u16 {
let args = args::Args::parse(); let args = args::Args::parse();
let rpc = String::from(args.monero_rpc_daemon); let rpc = args.monero_rpc_daemon;
let values = rpc.split(":"); let values = rpc.split(":");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
let port = v.remove(2); let port = v.remove(2);
debug!("monerod port: {}", port); debug!("monerod port: {}", port);
match port.parse::<u16>() { port.parse::<u16>().unwrap_or(0)
Ok(p) => p,
Err(_) => 0,
}
} }
pub fn get_tx_proxy_port() -> u16 { pub fn get_tx_proxy_port() -> u16 {
let args = args::Args::parse(); let args = args::Args::parse();
let rpc = String::from(args.i2p_socks_proxy_host); let rpc = args.i2p_socks_proxy_host;
let values = rpc.split(":"); let values = rpc.split(":");
let mut v: Vec<String> = values.map(|s| String::from(s)).collect(); let mut v: Vec<String> = values.map(String::from).collect();
let port = v.remove(2); let port = v.remove(2);
debug!("i2p socks port: {}", port); debug!("i2p socks port: {}", port);
match port.parse::<u16>() { port.parse::<u16>().unwrap_or(0)
Ok(p) => p,
Err(_) => 0,
}
} }
pub fn get_anon_inbound_port() -> u16 { pub fn get_anon_inbound_port() -> u16 {
@ -323,7 +313,7 @@ pub fn get_anon_inbound_port() -> u16 {
/// Get monero rpc host from command line argument /// Get monero rpc host from command line argument
fn get_blockchain_dir() -> String { fn get_blockchain_dir() -> String {
let args = args::Args::parse(); let args = args::Args::parse();
String::from(args.monero_blockchain_dir) args.monero_blockchain_dir
} }
/// Get monero download location /// Get monero download location
@ -338,7 +328,7 @@ fn get_rpc_host() -> String {
let args = args::Args::parse(); let args = args::Args::parse();
let gui_host = std::env::var(crate::MONERO_WALLET_RPC_HOST).unwrap_or(utils::empty_string()); let gui_host = std::env::var(crate::MONERO_WALLET_RPC_HOST).unwrap_or(utils::empty_string());
let rpc = if gui_host == utils::empty_string() { let rpc = if gui_host == utils::empty_string() {
String::from(args.monero_rpc_host) args.monero_rpc_host
} else { } else {
gui_host gui_host
}; };
@ -348,8 +338,8 @@ fn get_rpc_host() -> String {
/// Get creds from the `--monero-rpc-daemon` cli arg /// Get creds from the `--monero-rpc-daemon` cli arg
fn get_rpc_creds() -> RpcLogin { fn get_rpc_creds() -> RpcLogin {
let args = args::Args::parse(); let args = args::Args::parse();
let username = String::from(args.monero_rpc_username); let username = args.monero_rpc_username;
let credential = String::from(args.monero_rpc_cred); let credential = args.monero_rpc_cred;
RpcLogin { RpcLogin {
username, username,
credential, credential,
@ -360,7 +350,7 @@ fn get_rpc_daemon() -> String {
let args = args::Args::parse(); let args = args::Args::parse();
let gui_host = std::env::var(crate::MONERO_DAEMON_HOST).unwrap_or(utils::empty_string()); let gui_host = std::env::var(crate::MONERO_DAEMON_HOST).unwrap_or(utils::empty_string());
if gui_host == utils::empty_string() { if gui_host == utils::empty_string() {
String::from(args.monero_rpc_daemon) args.monero_rpc_daemon
} else { } else {
gui_host gui_host
} }
@ -396,7 +386,7 @@ pub async fn get_version() -> reqres::XmrRpcVersionResponse {
} }
/// Helper function for checking xmr rpc online during app startup /// Helper function for checking xmr rpc online during app startup
pub async fn check_rpc_connection() -> () { pub async fn check_rpc_connection() {
let res: reqres::XmrRpcVersionResponse = get_version().await; let res: reqres::XmrRpcVersionResponse = get_version().await;
if res.result.version == INVALID_VERSION { if res.result.version == INVALID_VERSION {
error!("failed to connect to monero-wallet-rpc"); error!("failed to connect to monero-wallet-rpc");
@ -531,10 +521,10 @@ fn update_wallet_lock(filename: &String, closing: bool) -> bool {
} }
if !closing { if !closing {
*IS_WALLET_BUSY.lock().unwrap() = true; *IS_WALLET_BUSY.lock().unwrap() = true;
return true; true
} else { } else {
*IS_WALLET_BUSY.lock().unwrap() = false; *IS_WALLET_BUSY.lock().unwrap() = false;
return true; true
} }
} }
@ -576,7 +566,7 @@ pub async fn open_wallet(filename: &String, password: &String) -> bool {
if r.contains("-1") { if r.contains("-1") {
return false; return false;
} }
return true; true
} }
_ => false, _ => false,
} }
@ -615,10 +605,7 @@ pub async fn close_wallet(filename: &String, password: &String) -> bool {
// The result from wallet operation is empty // The result from wallet operation is empty
let res = response.text().await; let res = response.text().await;
debug!("{} response: {:?}", RpcFields::Close.value(), res); debug!("{} response: {:?}", RpcFields::Close.value(), res);
match res { res.is_ok()
Ok(_) => true,
_ => false,
}
} }
Err(_) => false, Err(_) => false,
} }
@ -662,7 +649,7 @@ pub async fn change_wallet_password(new_password: &String) -> bool {
if r.contains("-1") { if r.contains("-1") {
return false; return false;
} }
return true; true
} }
_ => false, _ => false,
} }

View file

@ -54,7 +54,7 @@ fn curve_l_as_big_int() -> BigInt {
} }
fn big_int_to_string(b: &BigInt) -> String { fn big_int_to_string(b: &BigInt) -> String {
String::from(String::from_utf8(b.to_signed_bytes_le()).unwrap_or_default()) String::from_utf8(b.to_signed_bytes_le()).unwrap_or_default()
} }
/// Hash string input to scalar /// Hash string input to scalar
@ -110,8 +110,8 @@ pub async fn generate_neveko_message_keys() -> NevekoMessageKeys {
let point_nmpk = EdwardsPoint::mul_base(&scalar_nmsk); let point_nmpk = EdwardsPoint::mul_base(&scalar_nmsk);
let nmsk = *scalar_nmsk.as_bytes(); let nmsk = *scalar_nmsk.as_bytes();
let nmpk: [u8; 32] = *point_nmpk.compress().as_bytes(); let nmpk: [u8; 32] = *point_nmpk.compress().as_bytes();
let hex_nmpk = hex::encode(&nmpk); let hex_nmpk = hex::encode(nmpk);
let hex_nmsk = hex::encode(&nmsk); let hex_nmsk = hex::encode(nmsk);
NevekoMessageKeys { NevekoMessageKeys {
nmpk, nmpk,
nmsk, nmsk,
@ -143,15 +143,15 @@ pub async fn cipher(hex_nmpk: &String, message: String, encipher: Option<String>
// x = m + h or x = m - h' // x = m + h or x = m - h'
let h = hash_to_scalar(vec![&ss_hex[..]]); let h = hash_to_scalar(vec![&ss_hex[..]]);
let h_bi = BigInt::from_bytes_le(Sign::Plus, h.as_bytes()); let h_bi = BigInt::from_bytes_le(Sign::Plus, h.as_bytes());
if unwrap_encipher == String::from(ENCIPHER) { if unwrap_encipher == *ENCIPHER {
let msg_bi = BigInt::from_bytes_le(Sign::Plus, &message.as_bytes()); let msg_bi = BigInt::from_bytes_le(Sign::Plus, message.as_bytes());
let x = msg_bi + h_bi; let x = msg_bi + h_bi;
return hex::encode(x.to_bytes_le().1); hex::encode(x.to_bytes_le().1)
} else { } else {
let msg_bi = BigInt::from_bytes_le(Sign::Plus, &hex::decode(&message).unwrap_or_default()); let msg_bi = BigInt::from_bytes_le(Sign::Plus, &hex::decode(&message).unwrap_or_default());
let x = msg_bi - h_bi; let x = msg_bi - h_bi;
return big_int_to_string(&x); big_int_to_string(&x)
}; }
} }
// Tests // Tests

View file

@ -98,7 +98,7 @@ pub fn backup(order: &Order) {
let s = db::Interface::open(); let s = db::Interface::open();
let k = &order.orid; let k = &order.orid;
db::Interface::delete(&s.env, &s.handle, k); db::Interface::delete(&s.env, &s.handle, k);
db::Interface::write(&s.env, &s.handle, k, &Order::to_db(&order)); db::Interface::write(&s.env, &s.handle, k, &Order::to_db(order));
// in order to retrieve all orders, write keys to with col // in order to retrieve all orders, write keys to with col
let list_key = crate::CUSTOMER_ORDER_LIST_DB_KEY; let list_key = crate::CUSTOMER_ORDER_LIST_DB_KEY;
let r = db::Interface::read(&s.env, &s.handle, &String::from(list_key)); let r = db::Interface::read(&s.env, &s.handle, &String::from(list_key));
@ -135,7 +135,7 @@ pub fn find_all() -> Vec<Order> {
error!("order index not found"); error!("order index not found");
} }
let i_v_oid = i_r.split(","); let i_v_oid = i_r.split(",");
let i_v: Vec<String> = i_v_oid.map(|s| String::from(s)).collect(); let i_v: Vec<String> = i_v_oid.map(String::from).collect();
let mut orders: Vec<Order> = Vec::new(); let mut orders: Vec<Order> = Vec::new();
for o in i_v { for o in i_v {
let order: Order = find(&o); let order: Order = find(&o);
@ -155,7 +155,7 @@ pub fn find_all_backup() -> Vec<Order> {
error!("customer order index not found"); error!("customer order index not found");
} }
let i_v_oid = i_r.split(","); let i_v_oid = i_r.split(",");
let i_v: Vec<String> = i_v_oid.map(|s| String::from(s)).collect(); let i_v: Vec<String> = i_v_oid.map(String::from).collect();
let mut orders: Vec<Order> = Vec::new(); let mut orders: Vec<Order> = Vec::new();
for o in i_v { for o in i_v {
let order: Order = find(&o); let order: Order = find(&o);
@ -179,7 +179,7 @@ pub async fn find_all_customer_orders(cid: String) -> Vec<Order> {
error!("order index not found"); error!("order index not found");
} }
let i_v_oid = i_r.split(","); let i_v_oid = i_r.split(",");
let i_v: Vec<String> = i_v_oid.map(|s| String::from(s)).collect(); let i_v: Vec<String> = i_v_oid.map(String::from).collect();
let mut orders: Vec<Order> = Vec::new(); let mut orders: Vec<Order> = Vec::new();
for o in i_v { for o in i_v {
let order: Order = find(&o); let order: Order = find(&o);
@ -200,7 +200,7 @@ pub fn find_all_vendor_orders() -> Vec<Order> {
error!("order index not found"); error!("order index not found");
} }
let i_v_oid = i_r.split(","); let i_v_oid = i_r.split(",");
let i_v: Vec<String> = i_v_oid.map(|s| String::from(s)).collect(); let i_v: Vec<String> = i_v_oid.map(String::from).collect();
let mut orders: Vec<Order> = Vec::new(); let mut orders: Vec<Order> = Vec::new();
let vendor_b32: String = i2p::get_destination(None); let vendor_b32: String = i2p::get_destination(None);
for o in i_v { for o in i_v {
@ -229,7 +229,7 @@ pub fn modify(o: Json<Order>) -> Order {
let s = db::Interface::open(); let s = db::Interface::open();
db::Interface::delete(&s.env, &s.handle, &u_order.orid); db::Interface::delete(&s.env, &s.handle, &u_order.orid);
db::Interface::write(&s.env, &s.handle, &u_order.orid, &Order::to_db(&u_order)); db::Interface::write(&s.env, &s.handle, &u_order.orid, &Order::to_db(&u_order));
return u_order; u_order
} }
/// Sign and submit multisig /// Sign and submit multisig
@ -239,12 +239,12 @@ pub async fn sign_and_submit_multisig(
) -> reqres::XmrRpcSubmitMultisigResponse { ) -> reqres::XmrRpcSubmitMultisigResponse {
info!("signing and submitting multisig"); info!("signing and submitting multisig");
let wallet_password = utils::empty_string(); let wallet_password = utils::empty_string();
monero::open_wallet(&orid, &wallet_password).await; monero::open_wallet(orid, &wallet_password).await;
let r_sign: reqres::XmrRpcSignMultisigResponse = let r_sign: reqres::XmrRpcSignMultisigResponse =
monero::sign_multisig(String::from(tx_data_hex)).await; monero::sign_multisig(String::from(tx_data_hex)).await;
let r_submit: reqres::XmrRpcSubmitMultisigResponse = let r_submit: reqres::XmrRpcSubmitMultisigResponse =
monero::submit_multisig(r_sign.result.tx_data_hex).await; monero::submit_multisig(r_sign.result.tx_data_hex).await;
monero::close_wallet(&orid, &wallet_password).await; monero::close_wallet(orid, &wallet_password).await;
if r_submit.result.tx_hash_list.is_empty() { if r_submit.result.tx_hash_list.is_empty() {
error!("unable to submit payment for order: {}", orid); error!("unable to submit payment for order: {}", orid);
} }
@ -262,7 +262,7 @@ pub async fn sign_and_submit_multisig(
pub async fn secure_retrieval(orid: &String, signature: &String) -> Order { pub async fn secure_retrieval(orid: &String, signature: &String) -> Order {
info!("secure order retrieval for {}", orid); info!("secure order retrieval for {}", orid);
// get customer address for NEVEKO NOT order wallet // get customer address for NEVEKO NOT order wallet
let m_order: Order = find(&orid); let m_order: Order = find(orid);
let mut xmr_address: String = String::new(); let mut xmr_address: String = String::new();
let a_customers: Vec<Contact> = contact::find_all(); let a_customers: Vec<Contact> = contact::find_all();
for customer in a_customers { for customer in a_customers {
@ -292,7 +292,7 @@ pub async fn secure_retrieval(orid: &String, signature: &String) -> Order {
pub async fn cancel_order(orid: &String, signature: &String) -> Order { pub async fn cancel_order(orid: &String, signature: &String) -> Order {
info!("cancel order {}", orid); info!("cancel order {}", orid);
// get customer address for NEVEKO NOT order wallet // get customer address for NEVEKO NOT order wallet
let mut m_order: Order = find(&orid); let mut m_order: Order = find(orid);
let mut xmr_address: String = String::new(); let mut xmr_address: String = String::new();
let a_customers: Vec<Contact> = contact::find_all(); let a_customers: Vec<Contact> = contact::find_all();
for customer in a_customers { for customer in a_customers {
@ -316,7 +316,7 @@ pub async fn cancel_order(orid: &String, signature: &String) -> Order {
// update the order status and send to customer // update the order status and send to customer
m_order.status = order::StatusType::Cancelled.value(); m_order.status = order::StatusType::Cancelled.value();
order::modify(Json(m_order)); order::modify(Json(m_order));
order::find(&orid) order::find(orid)
} }
/// Check for import multisig info, validate block time and that the /// Check for import multisig info, validate block time and that the
@ -335,10 +335,10 @@ pub async fn validate_order_for_ship(orid: &String) -> reqres::FinalizeOrderResp
let price = m_product.price; let price = m_product.price;
let total = price * &m_order.quantity; let total = price * &m_order.quantity;
let wallet_password = utils::empty_string(); let wallet_password = utils::empty_string();
monero::open_wallet(&orid, &wallet_password).await; monero::open_wallet(orid, &wallet_password).await;
// check balance and unlock_time // check balance and unlock_time
let r_balance = monero::get_balance().await; let r_balance = monero::get_balance().await;
monero::close_wallet(&orid, &wallet_password).await; monero::close_wallet(orid, &wallet_password).await;
// update the order status to multisig complete // update the order status to multisig complete
let ready_to_ship: bool = r_balance.result.balance >= total as u128 let ready_to_ship: bool = r_balance.result.balance >= total as u128
&& r_balance.result.blocks_to_unlock < monero::LockTimeLimit::Blocks.value(); && r_balance.result.blocks_to_unlock < monero::LockTimeLimit::Blocks.value();
@ -421,11 +421,11 @@ pub async fn upload_delivery_info(
} }
// get draft payment txset // get draft payment txset
let wallet_password = utils::empty_string(); let wallet_password = utils::empty_string();
monero::open_wallet(&orid, &wallet_password).await; monero::open_wallet(orid, &wallet_password).await;
monero::refresh().await; monero::refresh().await;
let sweep: reqres::XmrRpcSweepAllResponse = let sweep: reqres::XmrRpcSweepAllResponse =
monero::sweep_all(String::from(&lookup.subaddress)).await; monero::sweep_all(String::from(&lookup.subaddress)).await;
monero::close_wallet(&orid, &wallet_password).await; monero::close_wallet(orid, &wallet_password).await;
if sweep.result.multisig_txset.is_empty() { if sweep.result.multisig_txset.is_empty() {
error!("unable to create draft txset"); error!("unable to create draft txset");
return Default::default(); return Default::default();
@ -439,7 +439,7 @@ pub async fn upload_delivery_info(
// order // order
let s = db::Interface::async_open().await; let s = db::Interface::async_open().await;
let k = String::from(crate::DELIVERY_INFO_DB_KEY); let k = String::from(crate::DELIVERY_INFO_DB_KEY);
db::Interface::async_write(&s.env, &s.handle, &k, &hex::encode(&delivery_info)).await; db::Interface::async_write(&s.env, &s.handle, &k, &hex::encode(delivery_info)).await;
modify(Json(m_order)); modify(Json(m_order));
// trigger nasr, this will cause the customer's neveko instance to request the // trigger nasr, this will cause the customer's neveko instance to request the
// txset // txset
@ -560,7 +560,7 @@ pub async fn trigger_finalize_request(
return Default::default(); return Default::default();
} }
let unwrap: reqres::FinalizeOrderResponse = finalize.unwrap(); let unwrap: reqres::FinalizeOrderResponse = finalize.unwrap();
let mut m_order: Order = order::find(&orid); let mut m_order: Order = order::find(orid);
m_order.status = order::StatusType::Delivered.value(); m_order.status = order::StatusType::Delivered.value();
backup(&m_order); backup(&m_order);
unwrap unwrap
@ -578,7 +578,7 @@ pub async fn d_trigger_finalize_request(
let jwp = db::Interface::async_read(&s.env, &s.handle, &k).await; let jwp = db::Interface::async_read(&s.env, &s.handle, &k).await;
info!("executing d_trigger_finalize_request"); info!("executing d_trigger_finalize_request");
// request finalize if the order status is shipped // request finalize if the order status is shipped
let order: Order = order::find(&orid); let order: Order = order::find(orid);
if order.status != order::StatusType::Shipped.value() { if order.status != order::StatusType::Shipped.value() {
let trigger = trigger_finalize_request(contact, &jwp, orid).await; let trigger = trigger_finalize_request(contact, &jwp, orid).await;
if trigger.vendor_update_success { if trigger.vendor_update_success {
@ -808,7 +808,7 @@ pub async fn d_trigger_cancel_request(contact: &String, orid: &String) -> Order
let jwp = db::Interface::async_read(&s.env, &s.handle, &k).await; let jwp = db::Interface::async_read(&s.env, &s.handle, &k).await;
info!("executing d_trigger_cancel_request"); info!("executing d_trigger_cancel_request");
// request cancel if the order status is not MultisigComplete // request cancel if the order status is not MultisigComplete
let order: Order = order::find(&orid); let order: Order = order::find(orid);
if order.status != order::StatusType::MulitsigComplete.value() { if order.status != order::StatusType::MulitsigComplete.value() {
let trigger = trigger_cancel_request(contact, &jwp, orid).await; let trigger = trigger_cancel_request(contact, &jwp, orid).await;
if trigger.status == order::StatusType::Cancelled.value() { if trigger.status == order::StatusType::Cancelled.value() {
@ -824,5 +824,5 @@ pub async fn init_adjudicator_wallet(orid: &String) {
if !m_wallet { if !m_wallet {
log::error!("failed to create adjudicator wallet"); log::error!("failed to create adjudicator wallet");
} }
monero::close_wallet(&orid, &password).await; monero::close_wallet(orid, &password).await;
} }

View file

@ -23,7 +23,7 @@ pub fn create(d: Json<Product>) -> Product {
let new_product = Product { let new_product = Product {
pid: String::from(&pid), pid: String::from(&pid),
description: String::from(&d.description), description: String::from(&d.description),
image: d.image.iter().cloned().collect(), image: d.image.to_vec(),
in_stock: d.in_stock, in_stock: d.in_stock,
name: String::from(&d.name), name: String::from(&d.name),
price: d.price, price: d.price,
@ -68,7 +68,7 @@ pub fn find_all() -> Vec<Product> {
error!("product index not found"); error!("product index not found");
} }
let i_v_pid = i_r.split(","); let i_v_pid = i_r.split(",");
let i_v: Vec<String> = i_v_pid.map(|s| String::from(s)).collect(); let i_v: Vec<String> = i_v_pid.map(String::from).collect();
let mut products: Vec<Product> = Vec::new(); let mut products: Vec<Product> = Vec::new();
for p in i_v { for p in i_v {
let mut product: Product = find(&p); let mut product: Product = find(&p);
@ -94,7 +94,7 @@ pub fn modify(p: Json<Product>) -> Product {
let s = db::Interface::open(); let s = db::Interface::open();
db::Interface::delete(&s.env, &s.handle, &u_prod.pid); db::Interface::delete(&s.env, &s.handle, &u_prod.pid);
db::Interface::write(&s.env, &s.handle, &u_prod.pid, &Product::to_db(&u_prod)); db::Interface::write(&s.env, &s.handle, &u_prod.pid, &Product::to_db(&u_prod));
return u_prod; u_prod
} }
/// check product field lengths to prevent db spam /// check product field lengths to prevent db spam

View file

@ -94,7 +94,7 @@ pub async fn create_jwp(proof: &TxProof) -> String {
return utils::empty_string(); return utils::empty_string();
} }
let jwp_secret_key = utils::get_jwp_secret_key(); let jwp_secret_key = utils::get_jwp_secret_key();
let key: Hmac<Sha512> = Hmac::new_from_slice(&jwp_secret_key.as_bytes()).expect("hash"); let key: Hmac<Sha512> = Hmac::new_from_slice(jwp_secret_key.as_bytes()).expect("hash");
let header = Header { let header = Header {
algorithm: AlgorithmType::Hs512, algorithm: AlgorithmType::Hs512,
..Default::default() ..Default::default()
@ -193,7 +193,7 @@ impl<'r> FromRequest<'r> for PaymentProof {
Some(proof) => { Some(proof) => {
// check validity of address, payment amount and tx confirmations // check validity of address, payment amount and tx confirmations
let jwp_secret_key = utils::get_jwp_secret_key(); let jwp_secret_key = utils::get_jwp_secret_key();
let key: Hmac<Sha512> = Hmac::new_from_slice(&jwp_secret_key.as_bytes()).expect(""); let key: Hmac<Sha512> = Hmac::new_from_slice(jwp_secret_key.as_bytes()).expect("");
let jwp: Result< let jwp: Result<
Token<jwt::Header, BTreeMap<std::string::String, std::string::String>, _>, Token<jwt::Header, BTreeMap<std::string::String, std::string::String>, _>,
jwt::Error, jwt::Error,
@ -301,5 +301,5 @@ async fn validate_subaddress(subaddress: &String) -> bool {
for s_address in all_address { for s_address in all_address {
address_list.push(s_address.address); address_list.push(s_address.address);
} }
return address_list.contains(&subaddress); address_list.contains(subaddress)
} }

View file

@ -473,16 +473,12 @@ pub struct XmrRpcGetTxProofResult {
} }
#[derive(Deserialize, Serialize, Debug)] #[derive(Deserialize, Serialize, Debug)]
#[derive(Default)]
pub struct SubAddressIndex { pub struct SubAddressIndex {
pub major: u64, pub major: u64,
pub minor: u64, pub minor: u64,
} }
impl Default for SubAddressIndex {
fn default() -> Self {
SubAddressIndex { major: 0, minor: 0 }
}
}
#[derive(Deserialize, Serialize, Debug)] #[derive(Deserialize, Serialize, Debug)]
pub struct Transfer { pub struct Transfer {
@ -809,17 +805,11 @@ impl Default for XmrDaemonGetBlockResponse {
/// Only extract the json string. TODO(c2m): map to a struct /// Only extract the json string. TODO(c2m): map to a struct
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
#[derive(Default)]
pub struct XmrDaemonGetTransactionsResponse { pub struct XmrDaemonGetTransactionsResponse {
pub txs_as_json: Vec<String>, pub txs_as_json: Vec<String>,
} }
impl Default for XmrDaemonGetTransactionsResponse {
fn default() -> Self {
XmrDaemonGetTransactionsResponse {
txs_as_json: Vec::new(),
}
}
}
#[derive(Deserialize, Debug)] #[derive(Deserialize, Debug)]
pub struct XmrRpcSignResponse { pub struct XmrRpcSignResponse {
@ -1380,12 +1370,8 @@ impl Default for FinalizeOrderResponse {
/// Response for the vendor mode /// Response for the vendor mode
#[derive(Serialize, Deserialize, Debug)] #[derive(Serialize, Deserialize, Debug)]
#[serde(crate = "rocket::serde")] #[serde(crate = "rocket::serde")]
#[derive(Default)]
pub struct VendorModeResponse { pub struct VendorModeResponse {
pub mode: bool, pub mode: bool,
} }
impl Default for VendorModeResponse {
fn default() -> Self {
VendorModeResponse { mode: false }
}
}

View file

@ -68,19 +68,12 @@ enum ExternalSoftware {
} }
/// Handles the state for the installation manager popup /// Handles the state for the installation manager popup
#[derive(Default)]
pub struct Installations { pub struct Installations {
pub xmr: bool, pub xmr: bool,
pub i2p_zero: bool, pub i2p_zero: bool,
} }
impl Default for Installations {
fn default() -> Self {
Installations {
xmr: false,
i2p_zero: false,
}
}
}
/// Handles the state for the connection manager popup /// Handles the state for the connection manager popup
pub struct Connections { pub struct Connections {
@ -191,16 +184,16 @@ pub fn start_core(conn: &Connections) {
]; ];
if conn.is_i2p_advanced { if conn.is_i2p_advanced {
// set the i2p proxy host for advanced user re-use // set the i2p proxy host for advanced user re-use
std::env::set_var(crate::NEVEKO_I2P_PROXY_HOST, &conn.i2p_proxy_host.clone()); std::env::set_var(crate::NEVEKO_I2P_PROXY_HOST, conn.i2p_proxy_host.clone());
std::env::set_var( std::env::set_var(
crate::NEVEKO_I2P_TUNNELS_JSON, crate::NEVEKO_I2P_TUNNELS_JSON,
&conn.i2p_tunnels_json.clone(), conn.i2p_tunnels_json.clone(),
); );
std::env::set_var(crate::NEVEKO_I2P_ADVANCED_MODE, String::from("1")); std::env::set_var(crate::NEVEKO_I2P_ADVANCED_MODE, String::from("1"));
} }
if conn.is_remote_node { if conn.is_remote_node {
std::env::set_var(crate::MONERO_DAEMON_HOST, &conn.daemon_host.clone()); std::env::set_var(crate::MONERO_DAEMON_HOST, conn.daemon_host.clone());
std::env::set_var(crate::MONERO_WALLET_RPC_HOST, &conn.rpc_host.clone()); std::env::set_var(crate::MONERO_WALLET_RPC_HOST, conn.rpc_host.clone());
std::env::set_var(crate::GUI_REMOTE_NODE, crate::GUI_SET_REMOTE_NODE) std::env::set_var(crate::GUI_REMOTE_NODE, crate::GUI_SET_REMOTE_NODE)
} }
let output = std::process::Command::new("./neveko") let output = std::process::Command::new("./neveko")
@ -230,11 +223,11 @@ pub fn generate_rnd() -> String {
/// Helper for separation of dev and prod concerns /// Helper for separation of dev and prod concerns
pub fn get_release_env() -> ReleaseEnvironment { pub fn get_release_env() -> ReleaseEnvironment {
let args = args::Args::parse(); let args = args::Args::parse();
let env = String::from(args.release_env); let env = args.release_env;
if env == "prod" { if env == "prod" {
return ReleaseEnvironment::Production; ReleaseEnvironment::Production
} else { } else {
return ReleaseEnvironment::Development; ReleaseEnvironment::Development
} }
} }
@ -327,7 +320,7 @@ pub fn product_to_json(m: &models::Product) -> Json<models::Product> {
let r_product: models::Product = models::Product { let r_product: models::Product = models::Product {
pid: String::from(&m.pid), pid: String::from(&m.pid),
description: String::from(&m.description), description: String::from(&m.description),
image: m.image.iter().cloned().collect(), image: m.image.to_vec(),
in_stock: m.in_stock, in_stock: m.in_stock,
name: String::from(&m.name), name: String::from(&m.name),
price: m.price, price: m.price,
@ -675,7 +668,7 @@ fn validate_installation_hash(sw: ExternalSoftware, filename: &String) -> bool {
.expect("hash validation failed"); .expect("hash validation failed");
let str_sha = String::from_utf8(sha_output.stdout).unwrap(); let str_sha = String::from_utf8(sha_output.stdout).unwrap();
let split1 = str_sha.split(" "); let split1 = str_sha.split(" ");
let mut v: Vec<String> = split1.map(|s| String::from(s)).collect(); let mut v: Vec<String> = split1.map(String::from).collect();
let actual_hash = v.remove(0); let actual_hash = v.remove(0);
debug!("actual hash: {}", actual_hash); debug!("actual hash: {}", actual_hash);
debug!("expected hash: {}", expected_hash); debug!("expected hash: {}", expected_hash);
@ -708,7 +701,7 @@ pub async fn estimate_fee() -> u128 {
let mut v_fee: Vec<u128> = Vec::new(); let mut v_fee: Vec<u128> = Vec::new();
let mut r_height: reqres::XmrDaemonGetHeightResponse = Default::default(); let mut r_height: reqres::XmrDaemonGetHeightResponse = Default::default();
let remote_var = std::env::var(crate::GUI_REMOTE_NODE).unwrap_or(utils::empty_string()); let remote_var = std::env::var(crate::GUI_REMOTE_NODE).unwrap_or(utils::empty_string());
let remote_set = remote_var == String::from(crate::GUI_SET_REMOTE_NODE); let remote_set = remote_var == *crate::GUI_SET_REMOTE_NODE;
if remote_set { if remote_set {
let p_height = monero::p_get_height().await; let p_height = monero::p_get_height().await;
r_height = p_height.unwrap_or(r_height); r_height = p_height.unwrap_or(r_height);
@ -726,12 +719,12 @@ pub async fn estimate_fee() -> u128 {
} }
// TODO(?): determine a more effecient fix than this for slow fee estimation // TODO(?): determine a more effecient fix than this for slow fee estimation
// over i2p // over i2p
if v_fee.len() >= 1 && remote_set { if !v_fee.is_empty() && remote_set {
break; break;
} }
height = r_height.height - count; height = r_height.height - count;
let mut block: reqres::XmrDaemonGetBlockResponse = Default::default(); let mut block: reqres::XmrDaemonGetBlockResponse = Default::default();
if remote_var == String::from(crate::GUI_SET_REMOTE_NODE) { if remote_var == *crate::GUI_SET_REMOTE_NODE {
let p_block = monero::p_get_block(height).await; let p_block = monero::p_get_block(height).await;
block = p_block.unwrap_or(block); block = p_block.unwrap_or(block);
} else { } else {
@ -748,10 +741,10 @@ pub async fn estimate_fee() -> u128 {
} }
for tx in transactions.txs_as_json { for tx in transactions.txs_as_json {
let pre_fee_split = tx.split("txnFee\":"); let pre_fee_split = tx.split("txnFee\":");
let mut v1: Vec<String> = pre_fee_split.map(|s| String::from(s)).collect(); let mut v1: Vec<String> = pre_fee_split.map(String::from).collect();
let fee_split = v1.remove(1); let fee_split = v1.remove(1);
let post_fee_split = fee_split.split(","); let post_fee_split = fee_split.split(",");
let mut v2: Vec<String> = post_fee_split.map(|s| String::from(s)).collect(); let mut v2: Vec<String> = post_fee_split.map(String::from).collect();
let fee: u128 = match v2.remove(0).trim().parse::<u128>() { let fee: u128 = match v2.remove(0).trim().parse::<u128>() {
Ok(n) => n, Ok(n) => n,
Err(_e) => 0, Err(_e) => 0,
@ -797,7 +790,7 @@ pub fn toggle_vendor_enabled() -> bool {
contact::NEVEKO_VENDOR_ENABLED, contact::NEVEKO_VENDOR_ENABLED,
contact::NEVEKO_VENDOR_MODE_ON, contact::NEVEKO_VENDOR_MODE_ON,
); );
return true; true
} else { } else {
info!("neveko vendor mode disabled"); info!("neveko vendor mode disabled");
db::Interface::write( db::Interface::write(
@ -806,7 +799,7 @@ pub fn toggle_vendor_enabled() -> bool {
contact::NEVEKO_VENDOR_ENABLED, contact::NEVEKO_VENDOR_ENABLED,
contact::NEVEKO_VENDOR_MODE_OFF, contact::NEVEKO_VENDOR_MODE_OFF,
); );
return false; false
} }
} }

View file

@ -13,7 +13,7 @@ use egui_winit::winit;
use crate::{epi, Result}; use crate::{epi, Result};
use super::epi_integration::{self, EpiIntegration}; use super::epi_integration::{self};
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -58,10 +58,6 @@ enum EventResult {
} }
trait WinitApp { trait WinitApp {
fn is_focused(&self) -> bool;
fn integration(&self) -> Option<&EpiIntegration>;
fn window(&self) -> Option<&winit::window::Window>; fn window(&self) -> Option<&winit::window::Window>;
fn save_and_destroy(&mut self); fn save_and_destroy(&mut self);
@ -736,14 +732,6 @@ mod glow_integration {
} }
impl WinitApp for GlowWinitApp { impl WinitApp for GlowWinitApp {
fn is_focused(&self) -> bool {
self.is_focused
}
fn integration(&self) -> Option<&EpiIntegration> {
self.running.as_ref().map(|r| &r.integration)
}
fn window(&self) -> Option<&winit::window::Window> { fn window(&self) -> Option<&winit::window::Window> {
self.running.as_ref().map(|r| r.gl_window.window()) self.running.as_ref().map(|r| r.gl_window.window())
} }

View file

@ -16,7 +16,7 @@ pub struct WindowSettings {
impl WindowSettings { impl WindowSettings {
pub fn from_display(window: &winit::window::Window) -> Self { pub fn from_display(window: &winit::window::Window) -> Self {
let inner_size_points = window.inner_size().to_logical::<f32>(window.scale_factor()); let inner_size_points = window.inner_size().to_logical::<f32>(window.scale_factor());
let position = if cfg!(macos) { let position = if cfg!(unix) || cfg!(windows) {
// MacOS uses inner position when positioning windows. // MacOS uses inner position when positioning windows.
window window
.inner_position() .inner_position()

View file

@ -217,8 +217,6 @@ impl TextureAtlas {
if required_height > self.max_height() { if required_height > self.max_height() {
// This is a bad place to be - we need to start reusing space :/ // This is a bad place to be - we need to start reusing space :/
#[cfg(feature = "tracing")]
tracing::wan!("epaint texture atlas overflowed!");
self.cursor = (0, self.image.height() / 3); // Restart a bit down - the top of the atlas has too many important things in it self.cursor = (0, self.image.height() / 3); // Restart a bit down - the top of the atlas has too many important things in it
self.overflowed = true; // this will signal the user that we need to recreate the texture atlas next frame. self.overflowed = true; // this will signal the user that we need to recreate the texture atlas next frame.

View file

@ -7,6 +7,7 @@ use std::sync::mpsc::{
Sender, Sender,
}; };
#[allow(dead_code)]
pub struct MultisigManagement { pub struct MultisigManagement {
pub completed_kex_init: bool, pub completed_kex_init: bool,
pub completed_kex_final: bool, pub completed_kex_final: bool,

View file

@ -135,18 +135,18 @@ pub async fn get_multisig_info(
r_info: Json<reqres::MultisigInfoRequest>, r_info: Json<reqres::MultisigInfoRequest>,
_jwp: proof::PaymentProof, _jwp: proof::PaymentProof,
) -> Custom<Json<models::Order>> { ) -> Custom<Json<models::Order>> {
let info: Vec<String> = r_info.info.iter().cloned().collect(); let info: Vec<String> = r_info.info.to_vec();
if r_info.msig_type == String::from(message::PREPARE_MSIG) { if r_info.msig_type == *message::PREPARE_MSIG {
// adjudicator won't have wallet for order yet do that first // adjudicator won't have wallet for order yet do that first
if r_info.init_adjudicator { if r_info.init_adjudicator {
order::init_adjudicator_wallet(&r_info.orid).await; order::init_adjudicator_wallet(&r_info.orid).await;
} }
message::send_prepare_info(&r_info.orid, &r_info.contact).await; message::send_prepare_info(&r_info.orid, &r_info.contact).await;
} else if r_info.msig_type == String::from(message::MAKE_MSIG) { } else if r_info.msig_type == *message::MAKE_MSIG {
message::send_make_info(&r_info.orid, &r_info.contact, info).await; message::send_make_info(&r_info.orid, &r_info.contact, info).await;
} else if r_info.msig_type == String::from(message::EXPORT_MSIG) { } else if r_info.msig_type == *message::EXPORT_MSIG {
message::send_export_info(&r_info.orid, &r_info.contact).await; message::send_export_info(&r_info.orid, &r_info.contact).await;
} else if r_info.msig_type == String::from(message::IMPORT_MSIG) { } else if r_info.msig_type == *message::IMPORT_MSIG {
message::send_import_info(&r_info.orid, &r_info.info).await; message::send_import_info(&r_info.orid, &r_info.info).await;
} else { } else {
message::send_exchange_info(&r_info.orid, &r_info.contact, info, r_info.kex_init).await; message::send_exchange_info(&r_info.orid, &r_info.contact, info, r_info.kex_init).await;