From 8eabf53642e049bec74fc2381145546226dc7b27 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Sun, 24 Dec 2023 15:03:58 +0100 Subject: [PATCH] introduce Wallet.normalize_endpoint to remove code duplication --- lnbits/wallets/alby.py | 3 +-- lnbits/wallets/base.py | 8 ++++++++ lnbits/wallets/cliche.py | 2 +- lnbits/wallets/corelightningrest.py | 6 +----- lnbits/wallets/eclair.py | 3 +-- lnbits/wallets/lnbits.py | 3 +-- lnbits/wallets/lndgrpc.py | 5 +++-- lnbits/wallets/lndrest.py | 7 +------ lnbits/wallets/lnpay.py | 4 ++-- lnbits/wallets/lntips.py | 4 ++-- lnbits/wallets/opennode.py | 4 ++-- lnbits/wallets/spark.py | 3 ++- 12 files changed, 25 insertions(+), 27 deletions(-) diff --git a/lnbits/wallets/alby.py b/lnbits/wallets/alby.py index d2f240d7d..593ad6740 100644 --- a/lnbits/wallets/alby.py +++ b/lnbits/wallets/alby.py @@ -25,8 +25,7 @@ class AlbyWallet(Wallet): if not settings.alby_access_token: raise ValueError("cannot initialize AlbyWallet: missing alby_access_token") - endpoint = settings.alby_api_endpoint - self.endpoint = endpoint[:-1] if endpoint.endswith("/") else endpoint + self.endpoint = self.normalize_endpoint(settings.alby_api_endpoint) self.auth = { "Authorization": "Bearer " + settings.alby_access_token, "User-Agent": settings.user_agent, diff --git a/lnbits/wallets/base.py b/lnbits/wallets/base.py index 46786265c..c85d5a5a9 100644 --- a/lnbits/wallets/base.py +++ b/lnbits/wallets/base.py @@ -95,6 +95,14 @@ class Wallet(ABC): def paid_invoices_stream(self) -> AsyncGenerator[str, None]: pass + def normalize_endpoint(self, endpoint: str, add_proto=True) -> str: + endpoint = endpoint[:-1] if endpoint.endswith("/") else endpoint + if add_proto: + endpoint = ( + f"https://{endpoint}" if not endpoint.startswith("http") else endpoint + ) + return endpoint + class Unsupported(Exception): pass diff --git a/lnbits/wallets/cliche.py b/lnbits/wallets/cliche.py index d42e92059..062b84da7 100644 --- a/lnbits/wallets/cliche.py +++ b/lnbits/wallets/cliche.py @@ -24,7 +24,7 @@ class ClicheWallet(Wallet): if not settings.cliche_endpoint: raise ValueError("cannot initialize ClicheWallet: missing cliche_endpoint") - self.endpoint = settings.cliche_endpoint + self.endpoint = self.normalize_endpoint(settings.cliche_endpoint) async def status(self) -> StatusResponse: try: diff --git a/lnbits/wallets/corelightningrest.py b/lnbits/wallets/corelightningrest.py index def252b08..643d34fdd 100644 --- a/lnbits/wallets/corelightningrest.py +++ b/lnbits/wallets/corelightningrest.py @@ -40,11 +40,7 @@ class CoreLightningRestWallet(Wallet): "invalid corelightning_rest_macaroon provided" ) - url = settings.corelightning_rest_url - self.url = url[:-1] if url.endswith("/") else url - self.url = ( - f"https://{self.url}" if not self.url.startswith("http") else self.url - ) + self.url = self.normalize_endpoint(settings.corelightning_rest_url) headers = { "macaroon": macaroon, "encodingtype": "hex", diff --git a/lnbits/wallets/eclair.py b/lnbits/wallets/eclair.py index 3e196a165..5367185d6 100644 --- a/lnbits/wallets/eclair.py +++ b/lnbits/wallets/eclair.py @@ -35,8 +35,7 @@ class EclairWallet(Wallet): if not settings.eclair_pass: raise ValueError("cannot initialize EclairWallet: missing eclair_pass") - url = settings.eclair_url - self.url = url[:-1] if url.endswith("/") else url + self.url = self.normalize_endpoint(settings.eclair_url) self.ws_url = f"ws://{urllib.parse.urlsplit(self.url).netloc}/ws" password = settings.eclair_pass diff --git a/lnbits/wallets/lnbits.py b/lnbits/wallets/lnbits.py index ffe083845..18e977c0f 100644 --- a/lnbits/wallets/lnbits.py +++ b/lnbits/wallets/lnbits.py @@ -32,8 +32,7 @@ class LNbitsWallet(Wallet): "cannot initialize LNbitsWallet: " "missing lnbits_key or lnbits_admin_key or lnbits_invoice_key" ) - endpoint = settings.lnbits_endpoint - self.endpoint = endpoint[:-1] if endpoint.endswith("/") else endpoint + self.endpoint = self.normalize_endpoint(settings.lnbits_endpoint) self.headers = {"X-Api-Key": key, "User-Agent": settings.user_agent} self.client = httpx.AsyncClient(base_url=self.endpoint, headers=self.headers) diff --git a/lnbits/wallets/lndgrpc.py b/lnbits/wallets/lndgrpc.py index 4b76defb1..d8fd6d6e1 100644 --- a/lnbits/wallets/lndgrpc.py +++ b/lnbits/wallets/lndgrpc.py @@ -89,8 +89,9 @@ class LndWallet(Wallet): "lnd_invoice_macaroon or lnd_grpc_macaroon_encrypted" ) - endpoint = settings.lnd_grpc_endpoint - self.endpoint = endpoint[:-1] if endpoint.endswith("/") else endpoint + self.endpoint = self.normalize_endpoint( + settings.lnd_grpc_endpoint, add_proto=False + ) self.port = int(settings.lnd_grpc_port) self.macaroon = load_macaroon(macaroon) cert = open(cert_path, "rb").read() diff --git a/lnbits/wallets/lndrest.py b/lnbits/wallets/lndrest.py index 056734752..6b364beaa 100644 --- a/lnbits/wallets/lndrest.py +++ b/lnbits/wallets/lndrest.py @@ -58,12 +58,7 @@ class LndRestWallet(Wallet): "This only works if you have a publicly issued certificate." ) - endpoint = settings.lnd_rest_endpoint - endpoint = endpoint[:-1] if endpoint.endswith("/") else endpoint - endpoint = ( - f"https://{endpoint}" if not endpoint.startswith("http") else endpoint - ) - self.endpoint = endpoint + self.endpoint = self.normalize_endpoint(settings.lnd_rest_endpoint) # if no cert provided it should be public so we set verify to True # and it will still check for validity of certificate and fail if its not valid diff --git a/lnbits/wallets/lnpay.py b/lnbits/wallets/lnpay.py index b0210ffb9..727dee013 100644 --- a/lnbits/wallets/lnpay.py +++ b/lnbits/wallets/lnpay.py @@ -35,8 +35,8 @@ class LNPayWallet(Wallet): ) self.wallet_key = wallet_key - endpoint = settings.lnpay_api_endpoint - self.endpoint = endpoint[:-1] if endpoint.endswith("/") else endpoint + self.endpoint = self.normalize_endpoint(settings.lnpay_api_endpoint) + headers = { "X-Api-Key": settings.lnpay_api_key, "User-Agent": settings.user_agent, diff --git a/lnbits/wallets/lntips.py b/lnbits/wallets/lntips.py index c492916c4..410699c70 100644 --- a/lnbits/wallets/lntips.py +++ b/lnbits/wallets/lntips.py @@ -35,8 +35,8 @@ class LnTipsWallet(Wallet): "missing lntips_api_key or lntips_admin_key or lntips_invoice_key" ) - endpoint = settings.lntips_api_endpoint - self.endpoint = endpoint[:-1] if endpoint.endswith("/") else endpoint + self.endpoint = self.normalize_endpoint(settings.lntips_api_endpoint) + headers = { "Authorization": f"Basic {key}", "User-Agent": settings.user_agent, diff --git a/lnbits/wallets/opennode.py b/lnbits/wallets/opennode.py index a263fcbaf..ac6b510fc 100644 --- a/lnbits/wallets/opennode.py +++ b/lnbits/wallets/opennode.py @@ -36,8 +36,8 @@ class OpenNodeWallet(Wallet): ) self.key = key - endpoint = settings.opennode_api_endpoint - self.endpoint = endpoint[:-1] if endpoint.endswith("/") else endpoint + self.endpoint = self.normalize_endpoint(settings.opennode_api_endpoint) + headers = { "Authorization": self.key, "User-Agent": settings.user_agent, diff --git a/lnbits/wallets/spark.py b/lnbits/wallets/spark.py index c39bfdc31..6cf6c7bb5 100644 --- a/lnbits/wallets/spark.py +++ b/lnbits/wallets/spark.py @@ -33,7 +33,8 @@ class SparkWallet(Wallet): if not settings.spark_token: raise ValueError("cannot initialize SparkWallet: missing spark_token") - url = settings.spark_url.replace("/rpc", "") + url = self.normalize_endpoint(settings.spark_url) + url = url.replace("/rpc", "") self.token = settings.spark_token headers = {"X-Access": self.token, "User-Agent": settings.user_agent}