From c5d7b7f4113865e487f4a239dd88dd478dd2c4b4 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Tue, 30 Nov 2021 21:19:05 +0000 Subject: [PATCH 01/34] wos debugging --- lnbits/extensions/lnaddress/lnurl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 30b8fc5a..d1449072 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -34,7 +34,7 @@ async def lnurl_response(username: str, domain: str, request: Request): max_sendable=1000000000, metadata=await address.lnurlpay_metadata(), ) - + print("RESP", resp) return resp.dict() From de2ebf90c79c65976204d2e1923e88a875d47bc2 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Tue, 30 Nov 2021 21:41:38 +0000 Subject: [PATCH 02/34] lnurl debug --- lnbits/extensions/lnaddress/lnurl.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index d1449072..6d4bd95b 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -34,12 +34,13 @@ async def lnurl_response(username: str, domain: str, request: Request): max_sendable=1000000000, metadata=await address.lnurlpay_metadata(), ) - print("RESP", resp) + print("RESP", resp.dict()) return resp.dict() @lnaddress_ext.get("/lnurl/cb/{address_id}", name="lnaddress.lnurl_callback") async def lnurl_callback(address_id, amount: int = Query(...)): + print("PING") address = await get_address(address_id) if not address: From 4ee86958b851a9aada085369d63e965fb2c25487 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 09:44:19 +0000 Subject: [PATCH 03/34] text identifier --- lnbits/extensions/lnaddress/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index eb098457..74161026 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -51,6 +51,6 @@ class Addresses(BaseModel): async def lnurlpay_metadata(self) -> LnurlPayMetadata: text = f"Payment to {self.username}" - metadata = [["text/plain", text]] + metadata = [["text/identifier", text]] return LnurlPayMetadata(json.dumps(metadata)) From a628f125c9b50e7428f56f024dc92d4818cd49da Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 09:46:04 +0000 Subject: [PATCH 04/34] text --- lnbits/extensions/lnaddress/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index 74161026..65df395d 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -50,7 +50,7 @@ class Addresses(BaseModel): time: int async def lnurlpay_metadata(self) -> LnurlPayMetadata: - text = f"Payment to {self.username}" + text = f"Payment to {self.username}@{self.domain}" metadata = [["text/identifier", text]] return LnurlPayMetadata(json.dumps(metadata)) From 44e0dd4c92073548cb4fe8eb657c823f0476b732 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 09:53:00 +0000 Subject: [PATCH 05/34] try1 --- lnbits/extensions/lnaddress/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index 65df395d..a98d9bea 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -51,6 +51,6 @@ class Addresses(BaseModel): async def lnurlpay_metadata(self) -> LnurlPayMetadata: text = f"Payment to {self.username}@{self.domain}" - metadata = [["text/identifier", text]] + metadata = [["text/plain", text], ["text/identifier", "{self.username}@{self.domain}"]] return LnurlPayMetadata(json.dumps(metadata)) From 4411780f82e750464831f8bb1bbe340b4f44edeb Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 09:56:42 +0000 Subject: [PATCH 06/34] try2 --- lnbits/extensions/lnaddress/models.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index a98d9bea..bf124c99 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -50,7 +50,8 @@ class Addresses(BaseModel): time: int async def lnurlpay_metadata(self) -> LnurlPayMetadata: - text = f"Payment to {self.username}@{self.domain}" - metadata = [["text/plain", text], ["text/identifier", "{self.username}@{self.domain}"]] + text = f"Payment to {self.username}" + identifier = f"{self.username}" + metadata = [["text/plain", text], ["text/identifier", identifier]] return LnurlPayMetadata(json.dumps(metadata)) From 52503c2ba9260ce3c59141492a41745d9fbef912 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 10:07:34 +0000 Subject: [PATCH 07/34] debugging --- lnbits/extensions/lnaddress/lnurl.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 6d4bd95b..40d36e17 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -42,13 +42,14 @@ async def lnurl_response(username: str, domain: str, request: Request): async def lnurl_callback(address_id, amount: int = Query(...)): print("PING") address = await get_address(address_id) - if not address: return LnurlErrorResponse(reason=f"Address not found").dict() amount_received = amount domain = await get_domain(address.domain) + print("ADR", address) + print("DOM", domain) base_url = ( address.wallet_endpoint[:-1] From d89d80c2458abeaba290921d8ddd9d8dd84fc226 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 10:19:59 +0000 Subject: [PATCH 08/34] more debug --- lnbits/extensions/lnaddress/models.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index bf124c99..c2da2af8 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -3,7 +3,9 @@ from typing import Optional from fastapi.params import Query from lnurl.types import LnurlPayMetadata -from pydantic.main import BaseModel # type: ignore +from pydantic.main import BaseModel + +from lnbits.extensions.lnaddress.crud import get_domain # type: ignore class CreateDomain(BaseModel): @@ -50,8 +52,9 @@ class Addresses(BaseModel): time: int async def lnurlpay_metadata(self) -> LnurlPayMetadata: - text = f"Payment to {self.username}" - identifier = f"{self.username}" + domain = await get_domain(self.domain) + text = f"Payment to {self.username}@{domain.domain}" + identifier = f"{self.username}@{domain.domain}" metadata = [["text/plain", text], ["text/identifier", identifier]] return LnurlPayMetadata(json.dumps(metadata)) From 16b6ae461a39a203004e9c3fb0b46da0da6af8ac Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 10:23:54 +0000 Subject: [PATCH 09/34] ... --- lnbits/extensions/lnaddress/lnurl.py | 2 +- lnbits/extensions/lnaddress/models.py | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 40d36e17..33e90a3e 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -32,7 +32,7 @@ async def lnurl_response(username: str, domain: str, request: Request): callback=request.url_for("lnaddress.lnurl_callback", address_id=address.id), min_sendable=1000, max_sendable=1000000000, - metadata=await address.lnurlpay_metadata(), + metadata=await address.lnurlpay_metadata(domain=domain), ) print("RESP", resp.dict()) return resp.dict() diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index c2da2af8..857691ee 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -51,10 +51,9 @@ class Addresses(BaseModel): paid: bool time: int - async def lnurlpay_metadata(self) -> LnurlPayMetadata: - domain = await get_domain(self.domain) - text = f"Payment to {self.username}@{domain.domain}" - identifier = f"{self.username}@{domain.domain}" + async def lnurlpay_metadata(self, domain) -> LnurlPayMetadata: + text = f"Payment to {self.username}@{domain}" + identifier = f"{self.username}@{domain}" metadata = [["text/plain", text], ["text/identifier", identifier]] return LnurlPayMetadata(json.dumps(metadata)) From 860c0258c2f70201996ae5151a5ef1679de132b9 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 10:25:21 +0000 Subject: [PATCH 10/34] .... --- lnbits/extensions/lnaddress/models.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index 857691ee..b4d453bd 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -5,8 +5,6 @@ from fastapi.params import Query from lnurl.types import LnurlPayMetadata from pydantic.main import BaseModel -from lnbits.extensions.lnaddress.crud import get_domain # type: ignore - class CreateDomain(BaseModel): wallet: str = Query(...) From 35eb8cd3137f9ab8ad42f1d01d7896e6cb69420f Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 10:32:37 +0000 Subject: [PATCH 11/34] hard code indentifier --- lnbits/extensions/lnaddress/models.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index b4d453bd..7922b598 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -49,9 +49,9 @@ class Addresses(BaseModel): paid: bool time: int - async def lnurlpay_metadata(self, domain) -> LnurlPayMetadata: - text = f"Payment to {self.username}@{domain}" - identifier = f"{self.username}@{domain}" + async def lnurlpay_metadata(self) -> LnurlPayMetadata: + text = f"Payment to {self.username}" + identifier = f"{self.username}@lnto.name" metadata = [["text/plain", text], ["text/identifier", identifier]] return LnurlPayMetadata(json.dumps(metadata)) From f1394f369778570e9ea04103b7e42052d23cf4db Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 10:33:37 +0000 Subject: [PATCH 12/34] . --- lnbits/extensions/lnaddress/lnurl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 33e90a3e..40d36e17 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -32,7 +32,7 @@ async def lnurl_response(username: str, domain: str, request: Request): callback=request.url_for("lnaddress.lnurl_callback", address_id=address.id), min_sendable=1000, max_sendable=1000000000, - metadata=await address.lnurlpay_metadata(domain=domain), + metadata=await address.lnurlpay_metadata(), ) print("RESP", resp.dict()) return resp.dict() From e21f850ef3125d3e83932afaa9331c91452f01de Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 10:37:40 +0000 Subject: [PATCH 13/34] more hard code --- lnbits/extensions/lnaddress/lnurl.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 40d36e17..358ac0af 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -29,7 +29,8 @@ async def lnurl_response(username: str, domain: str, request: Request): return LnurlErrorResponse(reason="Address has expired.").dict() resp = LnurlPayResponse( - callback=request.url_for("lnaddress.lnurl_callback", address_id=address.id), + # callback=request.url_for("lnaddress.lnurl_callback", address_id=address.id), + callback=f"https://fastbits.lnto.me/lnurl/cb/{address.id}", min_sendable=1000, max_sendable=1000000000, metadata=await address.lnurlpay_metadata(), From 395613040b963f5629204ffd206fed77f631bc25 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 10:39:12 +0000 Subject: [PATCH 14/34] . --- lnbits/extensions/lnaddress/lnurl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 358ac0af..d39cd7b4 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -30,7 +30,7 @@ async def lnurl_response(username: str, domain: str, request: Request): resp = LnurlPayResponse( # callback=request.url_for("lnaddress.lnurl_callback", address_id=address.id), - callback=f"https://fastbits.lnto.me/lnurl/cb/{address.id}", + callback=f"https://fastbits.lnto.me/lnaddress/lnurl/cb/{address.id}", min_sendable=1000, max_sendable=1000000000, metadata=await address.lnurlpay_metadata(), From 177cdecabfbb93f6ea33519a96da786faeac7339 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 10:44:54 +0000 Subject: [PATCH 15/34] trying --- lnbits/extensions/lnaddress/lnurl.py | 3 +-- lnbits/extensions/lnaddress/models.py | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index d39cd7b4..40d36e17 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -29,8 +29,7 @@ async def lnurl_response(username: str, domain: str, request: Request): return LnurlErrorResponse(reason="Address has expired.").dict() resp = LnurlPayResponse( - # callback=request.url_for("lnaddress.lnurl_callback", address_id=address.id), - callback=f"https://fastbits.lnto.me/lnaddress/lnurl/cb/{address.id}", + callback=request.url_for("lnaddress.lnurl_callback", address_id=address.id), min_sendable=1000, max_sendable=1000000000, metadata=await address.lnurlpay_metadata(), diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index 7922b598..268831b3 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -51,7 +51,7 @@ class Addresses(BaseModel): async def lnurlpay_metadata(self) -> LnurlPayMetadata: text = f"Payment to {self.username}" - identifier = f"{self.username}@lnto.name" + identifier = f"{self.username}" metadata = [["text/plain", text], ["text/identifier", identifier]] - return LnurlPayMetadata(json.dumps(metadata)) + return LnurlPayMetadata(metadata) From 3e6a5b67201ead810f28513d71e843d9b94f04fd Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 10:47:39 +0000 Subject: [PATCH 16/34] revert --- lnbits/extensions/lnaddress/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index 268831b3..f850271b 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -54,4 +54,4 @@ class Addresses(BaseModel): identifier = f"{self.username}" metadata = [["text/plain", text], ["text/identifier", identifier]] - return LnurlPayMetadata(metadata) + return LnurlPayMetadata(json.dumps(metadata)) From a7ceae86b4ec7edbb56b1a5143d3b1c49e19643c Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 10:58:04 +0000 Subject: [PATCH 17/34] remove identifier --- lnbits/extensions/lnaddress/models.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index f850271b..fe92473a 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -51,7 +51,6 @@ class Addresses(BaseModel): async def lnurlpay_metadata(self) -> LnurlPayMetadata: text = f"Payment to {self.username}" - identifier = f"{self.username}" - metadata = [["text/plain", text], ["text/identifier", identifier]] + metadata = [["text/plain", text]] return LnurlPayMetadata(json.dumps(metadata)) From e6ec5603176880ce6182c662b139d17e5a423d98 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 11:06:56 +0000 Subject: [PATCH 18/34] adding identifier...again --- lnbits/extensions/lnaddress/lnurl.py | 4 ++-- lnbits/extensions/lnaddress/models.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 40d36e17..66ddcba0 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -32,7 +32,7 @@ async def lnurl_response(username: str, domain: str, request: Request): callback=request.url_for("lnaddress.lnurl_callback", address_id=address.id), min_sendable=1000, max_sendable=1000000000, - metadata=await address.lnurlpay_metadata(), + metadata=await address.lnurlpay_metadata(domain=domain), ) print("RESP", resp.dict()) return resp.dict() @@ -69,7 +69,7 @@ async def lnurl_callback(address_id, amount: int = Query(...)): "out": False, "amount": int(amount_received / 1000), "description_hash": hashlib.sha256( - (await address.lnurlpay_metadata()).encode("utf-8") + (await address.lnurlpay_metadata(domain=domain.domain)).encode("utf-8") ).hexdigest(), "extra": {"tag": f"Payment to {address.username}@{domain.domain}"}, }, diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index fe92473a..330f04fc 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -49,8 +49,9 @@ class Addresses(BaseModel): paid: bool time: int - async def lnurlpay_metadata(self) -> LnurlPayMetadata: + async def lnurlpay_metadata(self, domain) -> LnurlPayMetadata: text = f"Payment to {self.username}" - metadata = [["text/plain", text]] + identifier = f"{self.username}@{domain}" + metadata = [["text/plain", text], ["text/identifier"], identifier] return LnurlPayMetadata(json.dumps(metadata)) From 346e50cbb512f8de6fa9abb3ff4849f75e38cfd0 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 11:10:19 +0000 Subject: [PATCH 19/34] . --- lnbits/extensions/lnaddress/models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index 330f04fc..1c73f30d 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -53,5 +53,6 @@ class Addresses(BaseModel): text = f"Payment to {self.username}" identifier = f"{self.username}@{domain}" metadata = [["text/plain", text], ["text/identifier"], identifier] + print(json.dumps(metadata)) return LnurlPayMetadata(json.dumps(metadata)) From 205c53d8e9d27b7fb161df0220ab02aee26e284b Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 11:11:51 +0000 Subject: [PATCH 20/34] stupid --- lnbits/extensions/lnaddress/models.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index 1c73f30d..6f21278e 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -52,7 +52,6 @@ class Addresses(BaseModel): async def lnurlpay_metadata(self, domain) -> LnurlPayMetadata: text = f"Payment to {self.username}" identifier = f"{self.username}@{domain}" - metadata = [["text/plain", text], ["text/identifier"], identifier] - print(json.dumps(metadata)) - + metadata = [["text/plain", text], ["text/identifier", identifier]] + return LnurlPayMetadata(json.dumps(metadata)) From 2a9a0bd7aa057794f475bbbe81cdb5f1e80ee0d6 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 11:21:54 +0000 Subject: [PATCH 21/34] return text instead of json --- lnbits/extensions/lnaddress/lnurl.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 66ddcba0..77eee507 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -35,7 +35,7 @@ async def lnurl_response(username: str, domain: str, request: Request): metadata=await address.lnurlpay_metadata(domain=domain), ) print("RESP", resp.dict()) - return resp.dict() + return resp @lnaddress_ext.get("/lnurl/cb/{address_id}", name="lnaddress.lnurl_callback") @@ -82,4 +82,4 @@ async def lnurl_callback(address_id, amount: int = Query(...)): resp = LnurlPayActionResponse(pr=r["payment_request"], routes=[]) - return resp.dict() + return resp From 8cdbd02a77d68dc5f51645972adf15b25176dfc5 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 11:27:43 +0000 Subject: [PATCH 22/34] htmlresponse --- lnbits/core/views/public_api.py | 3 ++- lnbits/extensions/lnaddress/lnurl.py | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lnbits/core/views/public_api.py b/lnbits/core/views/public_api.py index 0f5c74e3..f8b48ecc 100644 --- a/lnbits/core/views/public_api.py +++ b/lnbits/core/views/public_api.py @@ -5,6 +5,7 @@ from urllib.parse import urlparse from fastapi import HTTPException from starlette.requests import Request +from starlette.responses import HTMLResponse from lnbits import bolt11 @@ -13,7 +14,7 @@ from ..crud import get_standalone_payment from ..tasks import api_invoice_listeners -@core_app.get("/.well-known/lnurlp/{username}") +@core_app.get("/.well-known/lnurlp/{username}", response_class=HTMLResponse) async def lnaddress(username: str, request: Request): from lnbits.extensions.lnaddress.lnurl import lnurl_response diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 77eee507..ba3a53ea 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -9,6 +9,7 @@ from lnurl import ( # type: ignore LnurlPayResponse, ) from starlette.requests import Request +from starlette.responses import HTMLResponse from . import lnaddress_ext from .crud import get_address, get_address_by_username, get_domain @@ -35,10 +36,10 @@ async def lnurl_response(username: str, domain: str, request: Request): metadata=await address.lnurlpay_metadata(domain=domain), ) print("RESP", resp.dict()) - return resp + return resp.dict() -@lnaddress_ext.get("/lnurl/cb/{address_id}", name="lnaddress.lnurl_callback") +@lnaddress_ext.get("/lnurl/cb/{address_id}", name="lnaddress.lnurl_callback", response_class=HTMLResponse) async def lnurl_callback(address_id, amount: int = Query(...)): print("PING") address = await get_address(address_id) @@ -82,4 +83,4 @@ async def lnurl_callback(address_id, amount: int = Query(...)): resp = LnurlPayActionResponse(pr=r["payment_request"], routes=[]) - return resp + return resp.dict() From c24d28bff45e9ce2f3f9defcb5bbec675d1a12de Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 11:31:47 +0000 Subject: [PATCH 23/34] on more spin --- lnbits/extensions/lnaddress/lnurl.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index ba3a53ea..3f4b9933 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -1,4 +1,5 @@ import hashlib +import json from datetime import datetime, timedelta import httpx @@ -36,7 +37,7 @@ async def lnurl_response(username: str, domain: str, request: Request): metadata=await address.lnurlpay_metadata(domain=domain), ) print("RESP", resp.dict()) - return resp.dict() + return json.dumps(resp) @lnaddress_ext.get("/lnurl/cb/{address_id}", name="lnaddress.lnurl_callback", response_class=HTMLResponse) @@ -83,4 +84,4 @@ async def lnurl_callback(address_id, amount: int = Query(...)): resp = LnurlPayActionResponse(pr=r["payment_request"], routes=[]) - return resp.dict() + return json.dumps(resp) From b6498389bc93a596d2623ab99535c0200583e28a Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 11:33:38 +0000 Subject: [PATCH 24/34] . --- lnbits/extensions/lnaddress/lnurl.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 3f4b9933..8ddc59f7 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -37,7 +37,7 @@ async def lnurl_response(username: str, domain: str, request: Request): metadata=await address.lnurlpay_metadata(domain=domain), ) print("RESP", resp.dict()) - return json.dumps(resp) + return json.dumps(resp.dict()) @lnaddress_ext.get("/lnurl/cb/{address_id}", name="lnaddress.lnurl_callback", response_class=HTMLResponse) @@ -84,4 +84,4 @@ async def lnurl_callback(address_id, amount: int = Query(...)): resp = LnurlPayActionResponse(pr=r["payment_request"], routes=[]) - return json.dumps(resp) + return json.dumps(resp.dict()) From 55cb78710b90c0768d5853012581024d8346e278 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 11:40:03 +0000 Subject: [PATCH 25/34] added tag --- lnbits/extensions/lnaddress/lnurl.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 8ddc59f7..995da0b4 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -31,6 +31,7 @@ async def lnurl_response(username: str, domain: str, request: Request): return LnurlErrorResponse(reason="Address has expired.").dict() resp = LnurlPayResponse( + tag="payRequest", callback=request.url_for("lnaddress.lnurl_callback", address_id=address.id), min_sendable=1000, max_sendable=1000000000, From 3fd519e9dc2af68d3d829f4d5db656450647f9d1 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 11:49:04 +0000 Subject: [PATCH 26/34] revert to JSON return --- lnbits/extensions/lnaddress/lnurl.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 995da0b4..527898fd 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -38,7 +38,7 @@ async def lnurl_response(username: str, domain: str, request: Request): metadata=await address.lnurlpay_metadata(domain=domain), ) print("RESP", resp.dict()) - return json.dumps(resp.dict()) + return resp.dict() @lnaddress_ext.get("/lnurl/cb/{address_id}", name="lnaddress.lnurl_callback", response_class=HTMLResponse) @@ -85,4 +85,4 @@ async def lnurl_callback(address_id, amount: int = Query(...)): resp = LnurlPayActionResponse(pr=r["payment_request"], routes=[]) - return json.dumps(resp.dict()) + return resp.dict() From 9cc3aaa7a2bff8c76137b364d3628da810e17e8c Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 11:50:45 +0000 Subject: [PATCH 27/34] . --- lnbits/core/views/public_api.py | 2 +- lnbits/extensions/lnaddress/lnurl.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lnbits/core/views/public_api.py b/lnbits/core/views/public_api.py index f8b48ecc..5f8be4e2 100644 --- a/lnbits/core/views/public_api.py +++ b/lnbits/core/views/public_api.py @@ -14,7 +14,7 @@ from ..crud import get_standalone_payment from ..tasks import api_invoice_listeners -@core_app.get("/.well-known/lnurlp/{username}", response_class=HTMLResponse) +@core_app.get("/.well-known/lnurlp/{username}") async def lnaddress(username: str, request: Request): from lnbits.extensions.lnaddress.lnurl import lnurl_response diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 527898fd..22f4f33d 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -31,7 +31,6 @@ async def lnurl_response(username: str, domain: str, request: Request): return LnurlErrorResponse(reason="Address has expired.").dict() resp = LnurlPayResponse( - tag="payRequest", callback=request.url_for("lnaddress.lnurl_callback", address_id=address.id), min_sendable=1000, max_sendable=1000000000, @@ -41,7 +40,7 @@ async def lnurl_response(username: str, domain: str, request: Request): return resp.dict() -@lnaddress_ext.get("/lnurl/cb/{address_id}", name="lnaddress.lnurl_callback", response_class=HTMLResponse) +@lnaddress_ext.get("/lnurl/cb/{address_id}", name="lnaddress.lnurl_callback") async def lnurl_callback(address_id, amount: int = Query(...)): print("PING") address = await get_address(address_id) From 7b8c9cfdc5d581aa50b511f2fd64d78db72ac12d Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 12:19:55 +0000 Subject: [PATCH 28/34] ditch lnurl lib --- lnbits/extensions/lnaddress/lnurl.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 22f4f33d..855bfdd2 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -30,14 +30,16 @@ async def lnurl_response(username: str, domain: str, request: Request): if now > expiration: return LnurlErrorResponse(reason="Address has expired.").dict() - resp = LnurlPayResponse( - callback=request.url_for("lnaddress.lnurl_callback", address_id=address.id), - min_sendable=1000, - max_sendable=1000000000, - metadata=await address.lnurlpay_metadata(domain=domain), - ) - print("RESP", resp.dict()) - return resp.dict() + resp = { + "tag": "payRequest", + "callback": request.url_for("lnaddress.lnurl_callback", address_id=address.id), + "metadata": await address.lnurlpay_metadata(domain=domain), + "minSendable": 1000, + "maxSendable": 1000000000, + } + + print("RESP", resp) + return json.dumps(resp) @lnaddress_ext.get("/lnurl/cb/{address_id}", name="lnaddress.lnurl_callback") @@ -82,6 +84,7 @@ async def lnurl_callback(address_id, amount: int = Query(...)): except AssertionError as e: return LnurlErrorResponse(reason="ERROR") - resp = LnurlPayActionResponse(pr=r["payment_request"], routes=[]) + # resp = LnurlPayActionResponse(pr=r["payment_request"], routes=[]) + resp = {"pr": r["payment_request"], "routes": []} - return resp.dict() + return json.dumps(resp) From 35f24b828d4f8639c474806ef6c427a4cd129c92 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 12:25:51 +0000 Subject: [PATCH 29/34] . --- lnbits/extensions/lnaddress/lnurl.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 855bfdd2..0e453435 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -31,7 +31,6 @@ async def lnurl_response(username: str, domain: str, request: Request): return LnurlErrorResponse(reason="Address has expired.").dict() resp = { - "tag": "payRequest", "callback": request.url_for("lnaddress.lnurl_callback", address_id=address.id), "metadata": await address.lnurlpay_metadata(domain=domain), "minSendable": 1000, From 4790bf21b2ed51dedfd0ab91b640395ea4471693 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 12:27:47 +0000 Subject: [PATCH 30/34] .. --- lnbits/extensions/lnaddress/lnurl.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 0e453435..855bfdd2 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -31,6 +31,7 @@ async def lnurl_response(username: str, domain: str, request: Request): return LnurlErrorResponse(reason="Address has expired.").dict() resp = { + "tag": "payRequest", "callback": request.url_for("lnaddress.lnurl_callback", address_id=address.id), "metadata": await address.lnurlpay_metadata(domain=domain), "minSendable": 1000, From 2302937fc9a9fc7cc7ad572b10c79df5c1a06882 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 12:28:42 +0000 Subject: [PATCH 31/34] .. --- lnbits/extensions/lnaddress/lnurl.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 855bfdd2..1277c07e 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -39,7 +39,7 @@ async def lnurl_response(username: str, domain: str, request: Request): } print("RESP", resp) - return json.dumps(resp) + return resp @lnaddress_ext.get("/lnurl/cb/{address_id}", name="lnaddress.lnurl_callback") @@ -87,4 +87,4 @@ async def lnurl_callback(address_id, amount: int = Query(...)): # resp = LnurlPayActionResponse(pr=r["payment_request"], routes=[]) resp = {"pr": r["payment_request"], "routes": []} - return json.dumps(resp) + return resp From d1a9960acb5eecfecb2431cabac89eea040bd56c Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Wed, 1 Dec 2021 19:41:17 +0000 Subject: [PATCH 32/34] clean prints --- lnbits/extensions/lnaddress/lnurl.py | 4 +--- lnbits/extensions/lnaddress/tasks.py | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 1277c07e..47140315 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -52,9 +52,7 @@ async def lnurl_callback(address_id, amount: int = Query(...)): amount_received = amount domain = await get_domain(address.domain) - print("ADR", address) - print("DOM", domain) - + base_url = ( address.wallet_endpoint[:-1] if address.wallet_endpoint.endswith("/") diff --git a/lnbits/extensions/lnaddress/tasks.py b/lnbits/extensions/lnaddress/tasks.py index f962f4ab..9702c70b 100644 --- a/lnbits/extensions/lnaddress/tasks.py +++ b/lnbits/extensions/lnaddress/tasks.py @@ -47,7 +47,7 @@ async def on_invoice_paid(payment: Payment) -> None: await payment.set_pending(False) await set_address_paid(payment_hash=payment.payment_hash) - await call_webhook_on_paid(payment.payment_hash) + await call_webhook_on_paid(payment_hash=payment.payment_hash) elif "renew lnaddress" == payment.extra.get("tag"): @@ -55,7 +55,7 @@ async def on_invoice_paid(payment: Payment) -> None: await set_address_renewed( address_id=payment.extra["id"], duration=payment.extra["duration"] ) - await call_webhook_on_paid(payment.payment_hash) + await call_webhook_on_paid(payment_hash=payment.payment_hash) else: return From 69a4583203a30df27f343d2def9cab4acf2d6330 Mon Sep 17 00:00:00 2001 From: benarc Date: Wed, 1 Dec 2021 21:55:04 +0000 Subject: [PATCH 33/34] wos debugging lnurl debug text identifier text try1 try2 debugging more debug ... .... hard code indentifier . more hard code . trying revert remove identifier adding identifier...again . stupid return text instead of json htmlresponse on more spin . added tag revert to JSON return . ditch lnurl lib . .. .. clean prints --- lnbits/core/views/public_api.py | 1 + lnbits/extensions/lnaddress/lnurl.py | 29 ++++++++++++++++----------- lnbits/extensions/lnaddress/models.py | 9 +++++---- lnbits/extensions/lnaddress/tasks.py | 4 ++-- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/lnbits/core/views/public_api.py b/lnbits/core/views/public_api.py index 0f5c74e3..5f8be4e2 100644 --- a/lnbits/core/views/public_api.py +++ b/lnbits/core/views/public_api.py @@ -5,6 +5,7 @@ from urllib.parse import urlparse from fastapi import HTTPException from starlette.requests import Request +from starlette.responses import HTMLResponse from lnbits import bolt11 diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 30b8fc5a..47140315 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -1,4 +1,5 @@ import hashlib +import json from datetime import datetime, timedelta import httpx @@ -9,6 +10,7 @@ from lnurl import ( # type: ignore LnurlPayResponse, ) from starlette.requests import Request +from starlette.responses import HTMLResponse from . import lnaddress_ext from .crud import get_address, get_address_by_username, get_domain @@ -28,27 +30,29 @@ async def lnurl_response(username: str, domain: str, request: Request): if now > expiration: return LnurlErrorResponse(reason="Address has expired.").dict() - resp = LnurlPayResponse( - callback=request.url_for("lnaddress.lnurl_callback", address_id=address.id), - min_sendable=1000, - max_sendable=1000000000, - metadata=await address.lnurlpay_metadata(), - ) + resp = { + "tag": "payRequest", + "callback": request.url_for("lnaddress.lnurl_callback", address_id=address.id), + "metadata": await address.lnurlpay_metadata(domain=domain), + "minSendable": 1000, + "maxSendable": 1000000000, + } - return resp.dict() + print("RESP", resp) + return resp @lnaddress_ext.get("/lnurl/cb/{address_id}", name="lnaddress.lnurl_callback") async def lnurl_callback(address_id, amount: int = Query(...)): + print("PING") address = await get_address(address_id) - if not address: return LnurlErrorResponse(reason=f"Address not found").dict() amount_received = amount domain = await get_domain(address.domain) - + base_url = ( address.wallet_endpoint[:-1] if address.wallet_endpoint.endswith("/") @@ -67,7 +71,7 @@ async def lnurl_callback(address_id, amount: int = Query(...)): "out": False, "amount": int(amount_received / 1000), "description_hash": hashlib.sha256( - (await address.lnurlpay_metadata()).encode("utf-8") + (await address.lnurlpay_metadata(domain=domain.domain)).encode("utf-8") ).hexdigest(), "extra": {"tag": f"Payment to {address.username}@{domain.domain}"}, }, @@ -78,6 +82,7 @@ async def lnurl_callback(address_id, amount: int = Query(...)): except AssertionError as e: return LnurlErrorResponse(reason="ERROR") - resp = LnurlPayActionResponse(pr=r["payment_request"], routes=[]) + # resp = LnurlPayActionResponse(pr=r["payment_request"], routes=[]) + resp = {"pr": r["payment_request"], "routes": []} - return resp.dict() + return resp diff --git a/lnbits/extensions/lnaddress/models.py b/lnbits/extensions/lnaddress/models.py index eb098457..6f21278e 100644 --- a/lnbits/extensions/lnaddress/models.py +++ b/lnbits/extensions/lnaddress/models.py @@ -3,7 +3,7 @@ from typing import Optional from fastapi.params import Query from lnurl.types import LnurlPayMetadata -from pydantic.main import BaseModel # type: ignore +from pydantic.main import BaseModel class CreateDomain(BaseModel): @@ -49,8 +49,9 @@ class Addresses(BaseModel): paid: bool time: int - async def lnurlpay_metadata(self) -> LnurlPayMetadata: + async def lnurlpay_metadata(self, domain) -> LnurlPayMetadata: text = f"Payment to {self.username}" - metadata = [["text/plain", text]] - + identifier = f"{self.username}@{domain}" + metadata = [["text/plain", text], ["text/identifier", identifier]] + return LnurlPayMetadata(json.dumps(metadata)) diff --git a/lnbits/extensions/lnaddress/tasks.py b/lnbits/extensions/lnaddress/tasks.py index f962f4ab..9702c70b 100644 --- a/lnbits/extensions/lnaddress/tasks.py +++ b/lnbits/extensions/lnaddress/tasks.py @@ -47,7 +47,7 @@ async def on_invoice_paid(payment: Payment) -> None: await payment.set_pending(False) await set_address_paid(payment_hash=payment.payment_hash) - await call_webhook_on_paid(payment.payment_hash) + await call_webhook_on_paid(payment_hash=payment.payment_hash) elif "renew lnaddress" == payment.extra.get("tag"): @@ -55,7 +55,7 @@ async def on_invoice_paid(payment: Payment) -> None: await set_address_renewed( address_id=payment.extra["id"], duration=payment.extra["duration"] ) - await call_webhook_on_paid(payment.payment_hash) + await call_webhook_on_paid(payment_hash=payment.payment_hash) else: return From 907714838bc921cac0dda732b462792705b13884 Mon Sep 17 00:00:00 2001 From: benarc Date: Thu, 2 Dec 2021 21:22:30 +0000 Subject: [PATCH 34/34] Added check to explain fee reserve --- lnbits/core/services.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lnbits/core/services.py b/lnbits/core/services.py index 1fd8a593..f4570c7f 100644 --- a/lnbits/core/services.py +++ b/lnbits/core/services.py @@ -95,6 +95,10 @@ async def pay_invoice( if max_sat and invoice.amount_msat > max_sat * 1000: raise ValueError("Amount in invoice is too high.") + wallet = await get_wallet(wallet_id, conn=conn) + if invoice.amount_msat > wallet.balance_msat - (wallet.balance_msat / 100 * 2): + raise PermissionError("LNbits requires you keep at least 2% reserve to cover potential routing fees.") + # put all parameters that don't change here PaymentKwargs = TypedDict( "PaymentKwargs",