Browse Source

If an invoice cannot be parsed in import_invoices or import_requests,

raise FileImportFailed. Fixes #7950
patch-4
ThomasV 3 years ago
parent
commit
cf94ebc106
  1. 16
      electrum/wallet.py

16
electrum/wallet.py

@ -82,7 +82,7 @@ from .mnemonic import Mnemonic
from .logging import get_logger, Logger from .logging import get_logger, Logger
from .lnworker import LNWallet from .lnworker import LNWallet
from .paymentrequest import PaymentRequest from .paymentrequest import PaymentRequest
from .util import read_json_file, write_json_file, UserFacingException from .util import read_json_file, write_json_file, UserFacingException, FileImportFailed
from .util import EventListener, event_listener from .util import EventListener, event_listener
if TYPE_CHECKING: if TYPE_CHECKING:
@ -986,7 +986,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
) )
return invoice return invoice
def save_invoice(self, invoice: Invoice) -> None: def save_invoice(self, invoice: Invoice, *, write_to_disk: bool = True) -> None:
key = self.get_key_for_outgoing_invoice(invoice) key = self.get_key_for_outgoing_invoice(invoice)
if not invoice.is_lightning(): if not invoice.is_lightning():
if self.is_onchain_invoice_paid(invoice)[0]: if self.is_onchain_invoice_paid(invoice)[0]:
@ -995,6 +995,7 @@ class Abstract_Wallet(ABC, Logger, EventListener):
for txout in invoice.get_outputs(): for txout in invoice.get_outputs():
self._invoices_from_scriptpubkey_map[txout.scriptpubkey].add(key) self._invoices_from_scriptpubkey_map[txout.scriptpubkey].add(key)
self._invoices[key] = invoice self._invoices[key] = invoice
if write_to_disk:
self.save_db() self.save_db()
def clear_invoices(self): def clear_invoices(self):
@ -1021,7 +1022,10 @@ class Abstract_Wallet(ABC, Logger, EventListener):
def import_requests(self, path): def import_requests(self, path):
data = read_json_file(path) data = read_json_file(path)
for x in data: for x in data:
try:
req = Invoice(**x) req = Invoice(**x)
except:
raise FileImportFailed(_("Invalid invoice format"))
self.add_payment_request(req, write_to_disk=False) self.add_payment_request(req, write_to_disk=False)
self.save_db() self.save_db()
@ -1031,8 +1035,12 @@ class Abstract_Wallet(ABC, Logger, EventListener):
def import_invoices(self, path): def import_invoices(self, path):
data = read_json_file(path) data = read_json_file(path)
for x in data: for x in data:
invoice = Invoice(**x) try:
self.save_invoice(invoice) req = Invoice(**x)
except:
raise FileImportFailed(_("Invalid invoice format"))
self.save_invoice(invoice, write_to_disk=False)
self.save_db()
def export_invoices(self, path): def export_invoices(self, path):
write_json_file(path, list(self._invoices.values())) write_json_file(path, list(self._invoices.values()))

Loading…
Cancel
Save