@@ -848,8 +848,11 @@ impl<S: MutinyStorage> NodeManager<S> {
848848 for payjoin in all {
849849 let wallet = nm. wallet . clone ( ) ;
850850 let stop = nm. stop . clone ( ) ;
851+ let storage = Arc :: new ( nm. storage . clone ( ) ) ;
851852 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 ( ) ;
853856 log:: info!( "Received payjoin txid: {}" , pj_txid) ;
854857 } ) ;
855858 }
@@ -1087,14 +1090,17 @@ impl<S: MutinyStorage> NodeManager<S> {
10871090 . process_res ( ohttp_response. as_ref ( ) , context)
10881091 . map_err ( |e| anyhow ! ( "parse error {}" , e) )
10891092 . unwrap ( ) ;
1090- self . storage . persist_payjoin ( enrolled. clone ( ) ) . unwrap ( ) ;
1093+ let session = self . storage . persist_payjoin ( enrolled. clone ( ) ) . unwrap ( ) ;
10911094 let pj_uri = enrolled. fallback_target ( ) ;
10921095 log_debug ! ( self . logger, "{pj_uri}" ) ;
10931096 // run await payjoin task in the background as it'll keep polling the relay
10941097 let wallet = self . wallet . clone ( ) ;
10951098 let stop = self . stop . clone ( ) ;
1099+ let storage = Arc :: new ( self . storage . clone ( ) ) ;
10961100 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 ( ) ;
10981104 log:: info!( "Received payjoin txid: {}" , pj_txid) ;
10991105 } ) ;
11001106 Some ( pj_uri)
@@ -1186,14 +1192,15 @@ impl<S: MutinyStorage> NodeManager<S> {
11861192 pub async fn receive_payjoin (
11871193 wallet : Arc < OnChainWallet < S > > ,
11881194 stop : Arc < AtomicBool > ,
1189- mut enrolled : payjoin:: receive:: v2:: Enrolled ,
1195+ storage : Arc < S > ,
1196+ mut session : crate :: payjoin:: Session ,
11901197 ) -> Result < Txid , MutinyError > {
11911198 let http_client = reqwest:: Client :: builder ( )
11921199 //.danger_accept_invalid_certs(true) ? is tls unchecked :O
11931200 . build ( )
11941201 . unwrap ( ) ;
11951202 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 )
11971204 . await
11981205 . unwrap ( ) ;
11991206 let payjoin_proposal = wallet. process_payjoin_proposal ( proposal) . unwrap ( ) ;
@@ -1218,17 +1225,23 @@ impl<S: MutinyStorage> NodeManager<S> {
12181225
12191226 async fn poll_for_fallback_psbt (
12201227 stop : Arc < AtomicBool > ,
1228+ storage : Arc < S > ,
12211229 client : & reqwest:: Client ,
1222- enroller : & mut payjoin :: receive :: v2 :: Enrolled ,
1230+ session : & mut crate :: payjoin :: Session ,
12231231 ) -> Result < payjoin:: receive:: v2:: UncheckedProposal , ( ) > {
12241232 loop {
12251233 if stop. load ( Ordering :: Relaxed ) {
12261234 return Err ( ( ) ) ; // stopped
12271235 }
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 ( ) ;
12291241 let ohttp_response = client. post ( req. url ) . body ( req. body ) . send ( ) . await . unwrap ( ) ;
12301242 let ohttp_response = ohttp_response. bytes ( ) . await . unwrap ( ) ;
1231- let proposal = enroller
1243+ let proposal = session
1244+ . enrolled
12321245 . process_res ( ohttp_response. as_ref ( ) , context)
12331246 . map_err ( |e| anyhow ! ( "parse error {}" , e) )
12341247 . unwrap ( ) ;
0 commit comments