@@ -8,11 +8,11 @@ use bitcoin::hashes::sha256;
88use bitcoin:: hashes:: { Hash , HashEngine , Hmac , HmacEngine } ;
99use bitcoin:: secp256k1:: { Message , Secp256k1 , SignOnly } ;
1010use bitcoin:: PrivateKey ;
11+ use bitreq:: Url ;
1112use serde:: Deserialize ;
1213use std:: collections:: HashMap ;
1314use std:: sync:: RwLock ;
1415use std:: time:: { Duration , SystemTime } ;
15- use url:: Url ;
1616
1717// Derivation index of the hashing private key as defined by LUD-05.
1818const HASHING_DERIVATION_INDEX : u32 = 0 ;
@@ -195,7 +195,7 @@ fn sign_lnurl(
195195 error : format ! ( "invalid lnurl: {}" , lnurl_str. escape_debug( ) ) ,
196196 } ;
197197 let mut lnurl = Url :: parse ( lnurl_str) . map_err ( |_| invalid_lnurl ( ) ) ?;
198- let domain = lnurl. domain ( ) . ok_or ( invalid_lnurl ( ) ) ? ;
198+ let domain = lnurl. base_url ( ) ;
199199 let k1_str = lnurl
200200 . query_pairs ( )
201201 . find ( |( k, _) | k == K1_QUERY_PARAM )
@@ -218,10 +218,11 @@ fn sign_lnurl(
218218 let sig = engine. sign_ecdsa ( & message, & linking_private_key. inner ) ;
219219
220220 // Compose LNURL with signature and linking public key.
221- lnurl
222- . query_pairs_mut ( )
223- . append_pair ( SIG_QUERY_PARAM , & sig. serialize_der ( ) . to_string ( ) )
224- . append_pair ( KEY_QUERY_PARAM , & linking_public_key. to_string ( ) ) ;
221+ let serialized_sig = sig. serialize_der ( ) . to_string ( ) ;
222+ let serialized_pubkey = linking_public_key. to_string ( ) ;
223+ let query_params =
224+ [ ( SIG_QUERY_PARAM , serialized_sig. as_str ( ) ) , ( KEY_QUERY_PARAM , serialized_pubkey. as_str ( ) ) ] ;
225+ lnurl. append_query_params ( query_params. into_iter ( ) ) ;
225226 Ok ( lnurl. to_string ( ) )
226227}
227228
0 commit comments