Skip to content

Commit 637e78c

Browse files
committed
keys managements(KM) implementation on add-invoice
1 parent e2f579a commit 637e78c

File tree

3 files changed

+36
-13
lines changed

3 files changed

+36
-13
lines changed

src/cli/add_invoice.rs

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use crate::{db::Order, lightning::is_valid_invoice};
44
use anyhow::Result;
55
use lnurl::lightning_address::LightningAddress;
66
use mostro_core::message::{Action, Message, Payload};
7+
use mostro_core::order::Status;
78
use nostr_sdk::prelude::*;
89
use std::str::FromStr;
910
use uuid::Uuid;
@@ -16,32 +17,38 @@ pub async fn execute_add_invoice(
1617
client: &Client,
1718
) -> Result<()> {
1819
let pool = connect().await?;
19-
let order = Order::get_by_id(&pool, &order_id.to_string())
20+
let mut order = Order::get_by_id(&pool, &order_id.to_string())
2021
.await
2122
.unwrap();
22-
let trade_keys = order.trade_keys.unwrap();
23+
let trade_keys = order.trade_keys.clone().unwrap();
2324
let trade_keys = Keys::parse(trade_keys).unwrap();
2425

2526
println!(
2627
"Sending a lightning invoice {} to mostro pubId {}",
2728
order_id, mostro_key
2829
);
29-
let mut payload = None;
30+
// let mut payload = None;
3031
// Check invoice string
3132
let ln_addr = LightningAddress::from_str(invoice);
32-
if ln_addr.is_ok() {
33-
payload = Some(Payload::PaymentRequest(None, invoice.to_string(), None));
33+
let payload = if ln_addr.is_ok() {
34+
Some(Payload::PaymentRequest(None, invoice.to_string(), None))
3435
} else {
3536
match is_valid_invoice(invoice) {
36-
Ok(i) => payload = Some(Payload::PaymentRequest(None, i.to_string(), None)),
37-
Err(e) => println!("{}", e),
37+
Ok(i) => Some(Payload::PaymentRequest(None, i.to_string(), None)),
38+
Err(_) => None,
3839
}
39-
}
40+
};
41+
let request_id = Uuid::new_v4().as_u128() as u64;
4042
// Create AddInvoice message
41-
let add_invoice_message =
42-
Message::new_order(Some(*order_id), None, None, Action::AddInvoice, payload);
43+
let add_invoice_message = Message::new_order(
44+
Some(*order_id),
45+
Some(request_id),
46+
None,
47+
Action::AddInvoice,
48+
payload,
49+
);
4350

44-
send_message_sync(
51+
let dm = send_message_sync(
4552
client,
4653
Some(identity_keys),
4754
&trade_keys,
@@ -52,5 +59,17 @@ pub async fn execute_add_invoice(
5259
)
5360
.await?;
5461

62+
dm.iter().for_each(|el| {
63+
let message = el.0.get_inner_message_kind();
64+
if message.request_id == Some(request_id) && message.action == Action::WaitingSellerToPay {
65+
println!("Now we should wait for the seller to pay the invoice");
66+
}
67+
});
68+
order
69+
.set_status(Status::WaitingPayment.to_string())
70+
.save(&pool)
71+
.await
72+
.unwrap();
73+
5574
Ok(())
5675
}

src/cli/take_buy.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ pub async fn execute_take_buy(
4848

4949
let order = dm.iter().find_map(|el| {
5050
let message = el.0.get_inner_message_kind();
51-
if message.request_id == Some(request_id) {
51+
if message.request_id == Some(request_id) && message.action == Action::PayInvoice {
5252
if let Some(Payload::PaymentRequest(order, invoice, _)) = &message.payload {
5353
println!(
5454
"Mostro sent you this hold invoice for order id: {}",

src/cli/take_sell.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,12 @@ pub async fn execute_take_sell(
7373

7474
let order = dm.iter().find_map(|el| {
7575
let message = el.0.get_inner_message_kind();
76-
if message.request_id == Some(request_id) {
76+
if message.request_id == Some(request_id) && message.action == Action::AddInvoice {
7777
if let Some(Payload::Order(order)) = message.payload.as_ref() {
78+
println!(
79+
"Please add a lightning invoice with amount of {}",
80+
order.amount
81+
);
7882
return Some(order.clone());
7983
}
8084
}

0 commit comments

Comments
 (0)