@@ -848,8 +848,11 @@ impl<S: MutinyStorage> NodeManager<S> {
848
848
for payjoin in all {
849
849
let wallet = nm. wallet . clone ( ) ;
850
850
let stop = nm. stop . clone ( ) ;
851
+ let storage = Arc :: new ( nm. storage . clone ( ) ) ;
851
852
utils:: spawn ( async move {
852
- let pj_txid = Self :: receive_payjoin ( wallet, stop, payjoin) . await . unwrap ( ) ;
853
+ let pj_txid = Self :: receive_payjoin ( wallet, stop, storage, payjoin)
854
+ . await
855
+ . unwrap ( ) ;
853
856
log:: info!( "Received payjoin txid: {}" , pj_txid) ;
854
857
} ) ;
855
858
}
@@ -1087,14 +1090,17 @@ impl<S: MutinyStorage> NodeManager<S> {
1087
1090
. process_res ( ohttp_response. as_ref ( ) , context)
1088
1091
. map_err ( |e| anyhow ! ( "parse error {}" , e) )
1089
1092
. unwrap ( ) ;
1090
- self . storage . persist_payjoin ( enrolled. clone ( ) ) . unwrap ( ) ;
1093
+ let session = self . storage . persist_payjoin ( enrolled. clone ( ) ) . unwrap ( ) ;
1091
1094
let pj_uri = enrolled. fallback_target ( ) ;
1092
1095
log_debug ! ( self . logger, "{pj_uri}" ) ;
1093
1096
// run await payjoin task in the background as it'll keep polling the relay
1094
1097
let wallet = self . wallet . clone ( ) ;
1095
1098
let stop = self . stop . clone ( ) ;
1099
+ let storage = Arc :: new ( self . storage . clone ( ) ) ;
1096
1100
utils:: spawn ( async move {
1097
- let pj_txid = Self :: receive_payjoin ( wallet, stop, enrolled) . await . unwrap ( ) ;
1101
+ let pj_txid = Self :: receive_payjoin ( wallet, stop, storage, session)
1102
+ . await
1103
+ . unwrap ( ) ;
1098
1104
log:: info!( "Received payjoin txid: {}" , pj_txid) ;
1099
1105
} ) ;
1100
1106
Some ( pj_uri)
@@ -1186,14 +1192,15 @@ impl<S: MutinyStorage> NodeManager<S> {
1186
1192
pub async fn receive_payjoin (
1187
1193
wallet : Arc < OnChainWallet < S > > ,
1188
1194
stop : Arc < AtomicBool > ,
1189
- mut enrolled : payjoin:: receive:: v2:: Enrolled ,
1195
+ storage : Arc < S > ,
1196
+ mut session : crate :: payjoin:: Session ,
1190
1197
) -> Result < Txid , MutinyError > {
1191
1198
let http_client = reqwest:: Client :: builder ( )
1192
1199
//.danger_accept_invalid_certs(true) ? is tls unchecked :O
1193
1200
. build ( )
1194
1201
. unwrap ( ) ;
1195
1202
let proposal: payjoin:: receive:: v2:: UncheckedProposal =
1196
- Self :: poll_for_fallback_psbt ( stop, & http_client, & mut enrolled )
1203
+ Self :: poll_for_fallback_psbt ( stop, storage , & http_client, & mut session )
1197
1204
. await
1198
1205
. unwrap ( ) ;
1199
1206
let payjoin_proposal = wallet. process_payjoin_proposal ( proposal) . unwrap ( ) ;
@@ -1218,17 +1225,23 @@ impl<S: MutinyStorage> NodeManager<S> {
1218
1225
1219
1226
async fn poll_for_fallback_psbt (
1220
1227
stop : Arc < AtomicBool > ,
1228
+ storage : Arc < S > ,
1221
1229
client : & reqwest:: Client ,
1222
- enroller : & mut payjoin :: receive :: v2 :: Enrolled ,
1230
+ session : & mut crate :: payjoin :: Session ,
1223
1231
) -> Result < payjoin:: receive:: v2:: UncheckedProposal , ( ) > {
1224
1232
loop {
1225
1233
if stop. load ( Ordering :: Relaxed ) {
1226
1234
return Err ( ( ) ) ; // stopped
1227
1235
}
1228
- let ( req, context) = enroller. extract_req ( ) . unwrap ( ) ;
1236
+ if session. expiry > utils:: now ( ) {
1237
+ storage. delete_payjoin ( & session. enrolled . pubkey ( ) ) ;
1238
+ return Err ( ( ) ) ; // expired
1239
+ }
1240
+ let ( req, context) = session. enrolled . extract_req ( ) . unwrap ( ) ;
1229
1241
let ohttp_response = client. post ( req. url ) . body ( req. body ) . send ( ) . await . unwrap ( ) ;
1230
1242
let ohttp_response = ohttp_response. bytes ( ) . await . unwrap ( ) ;
1231
- let proposal = enroller
1243
+ let proposal = session
1244
+ . enrolled
1232
1245
. process_res ( ohttp_response. as_ref ( ) , context)
1233
1246
. map_err ( |e| anyhow ! ( "parse error {}" , e) )
1234
1247
. unwrap ( ) ;
0 commit comments