From 3fd66f38dad185c9b895beab66118cc7e2b1a2f4 Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Sat, 27 Nov 2021 12:42:19 +0100 Subject: [PATCH 01/46] rename endpoint to avoid collision --- lnbits/extensions/usermanager/views_api.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lnbits/extensions/usermanager/views_api.py b/lnbits/extensions/usermanager/views_api.py index 26b9874b1..1439b6820 100644 --- a/lnbits/extensions/usermanager/views_api.py +++ b/lnbits/extensions/usermanager/views_api.py @@ -23,7 +23,7 @@ from .crud import ( ) from .models import CreateUserData, CreateUserWallet -### Users +# Users @usermanager_ext.get("/api/v1/users", status_code=HTTPStatus.OK) @@ -72,7 +72,7 @@ async def api_usermanager_users_delete( raise HTTPException(status_code=HTTPStatus.NO_CONTENT) -###Activate Extension +# Activate Extension @usermanager_ext.post("/api/v1/extensions") @@ -88,7 +88,7 @@ async def api_usermanager_activate_extension( return {"extension": "updated"} -###Wallets +# Wallets @usermanager_ext.post("/api/v1/wallets") @@ -107,7 +107,7 @@ async def api_usermanager_wallets(wallet: WalletTypeInfo = Depends(get_key_type) return [wallet.dict() for wallet in await get_usermanager_wallets(admin_id)] -@usermanager_ext.get("/api/v1/wallets/{wallet_id}") +@usermanager_ext.get("/api/v1/transactions/{wallet_id}") async def api_usermanager_wallet_transactions( wallet_id, wallet: WalletTypeInfo = Depends(get_key_type) ): From 2612e6064718dcab9049cf274ef9243dec7193e7 Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Sat, 27 Nov 2021 12:43:14 +0100 Subject: [PATCH 02/46] annotation for optional attributes --- lnbits/extensions/usermanager/models.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lnbits/extensions/usermanager/models.py b/lnbits/extensions/usermanager/models.py index e65bdb52c..67facec68 100644 --- a/lnbits/extensions/usermanager/models.py +++ b/lnbits/extensions/usermanager/models.py @@ -2,6 +2,7 @@ from sqlite3 import Row from fastapi.param_functions import Query from pydantic import BaseModel +from typing import Optional class CreateUserData(BaseModel): @@ -22,8 +23,8 @@ class Users(BaseModel): id: str name: str admin: str - email: str - password: str + email: Optional[str] = None + password: Optional[str] = None class Wallets(BaseModel): From 9b58bfe06a940aee9b101182aa5fb39d21474b06 Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Sat, 27 Nov 2021 12:54:01 +0100 Subject: [PATCH 03/46] remove trio_typing --- mypy.ini | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 mypy.ini diff --git a/mypy.ini b/mypy.ini deleted file mode 100644 index b991c7cc2..000000000 --- a/mypy.ini +++ /dev/null @@ -1,2 +0,0 @@ -[mypy] -plugins = trio_typing.plugin From ad3942f844fc0657964598b5c12d2c50ad0a40be Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Sat, 27 Nov 2021 13:01:12 +0100 Subject: [PATCH 04/46] remove type comment --- lnbits/jinja2_templating.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/jinja2_templating.py b/lnbits/jinja2_templating.py index f74f05c05..5abcd0bff 100644 --- a/lnbits/jinja2_templating.py +++ b/lnbits/jinja2_templating.py @@ -23,7 +23,7 @@ class Jinja2Templates(templating.Jinja2Templates): def get_environment(self, loader: "jinja2.BaseLoader") -> "jinja2.Environment": @jinja2.contextfunction def url_for(context: dict, name: str, **path_params: typing.Any) -> str: - request: Request = context["request"] # type: starlette.requests.Request + request: Request = context["request"] return request.app.url_path_for(name, **path_params) def url_params_update(init: QueryParams, **new: typing.Any) -> QueryParams: From b178d9a38d27730a294130c9b271e36d0faa573e Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Sat, 27 Nov 2021 13:11:29 +0100 Subject: [PATCH 05/46] readd mypy.ini --- mypy.ini | 1 + 1 file changed, 1 insertion(+) create mode 100644 mypy.ini diff --git a/mypy.ini b/mypy.ini new file mode 100644 index 000000000..f8b1844b6 --- /dev/null +++ b/mypy.ini @@ -0,0 +1 @@ +[mypy] From 12c2a04b2ac9567662132bd05cd1833b649dfb5b Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Mon, 29 Nov 2021 18:10:11 +0100 Subject: [PATCH 06/46] LNDRest fee limit --- lnbits/core/services.py | 5 ++++- lnbits/core/views/api.py | 17 +++++++++++------ lnbits/wallets/lndrest.py | 21 ++++++++++++++++++--- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/lnbits/core/services.py b/lnbits/core/services.py index 57722dfd5..3ce1248b8 100644 --- a/lnbits/core/services.py +++ b/lnbits/core/services.py @@ -170,6 +170,8 @@ async def pay_invoice( ) await delete_payment(temp_id, conn=conn) else: + async with db.connect() as conn: + await delete_payment(temp_id, conn=conn) raise PaymentFailure( payment.error_message or "Payment failed, but backend didn't give us an error message." @@ -314,7 +316,8 @@ async def check_invoice_status( if not payment.pending: return status if payment.is_out and status.failed: - print(f" - deleting outgoing failed payment {payment.checking_id}: {status}") + print( + f" - deleting outgoing failed payment {payment.checking_id}: {status}") await payment.delete() elif not status.pending: print( diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index b0ea56098..c919821ff 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -72,7 +72,7 @@ async def api_update_wallet( @core_app.get("/api/v1/payments") async def api_payments(wallet: WalletTypeInfo = Depends(get_key_type)): await get_payments(wallet_id=wallet.wallet.id, pending=True, complete=True) - pendingPayments = await get_payments(wallet_id=wallet.wallet.id, pending=True) + pendingPayments = await get_payments(wallet_id=wallet.wallet.id, pending=True, exclude_uncheckable=True) for payment in pendingPayments: await check_invoice_status( wallet_id=payment.wallet_id, payment_hash=payment.payment_hash @@ -193,7 +193,8 @@ async def api_payments_create( invoiceData: CreateInvoiceData = Body(...), ): if wallet.wallet_type < 0 or wallet.wallet_type > 2: - raise HTTPException(status_code=HTTPStatus.BAD_REQUEST, detail="Key is invalid") + raise HTTPException( + status_code=HTTPStatus.BAD_REQUEST, detail="Key is invalid") if invoiceData.out is True and wallet.wallet_type == 0: if not invoiceData.bolt11: @@ -204,7 +205,8 @@ async def api_payments_create( return await api_payments_pay_invoice( invoiceData.bolt11, wallet.wallet ) # admin key - return await api_payments_create_invoice(invoiceData, wallet.wallet) # invoice key + # invoice key + return await api_payments_create_invoice(invoiceData, wallet.wallet) class CreateLNURLData(BaseModel): @@ -372,14 +374,16 @@ async def api_lnurlscan(code: str): params.update(callback=url) # with k1 already in it lnurlauth_key = g().wallet.lnurlauth_key(domain) - params.update(pubkey=lnurlauth_key.verifying_key.to_string("compressed").hex()) + params.update( + pubkey=lnurlauth_key.verifying_key.to_string("compressed").hex()) else: async with httpx.AsyncClient() as client: r = await client.get(url, timeout=5) if r.is_error: raise HTTPException( status_code=HTTPStatus.SERVICE_UNAVAILABLE, - detail={"domain": domain, "message": "failed to get parameters"}, + detail={"domain": domain, + "message": "failed to get parameters"}, ) try: @@ -409,7 +413,8 @@ async def api_lnurlscan(code: str): if tag == "withdrawRequest": params.update(kind="withdraw") - params.update(fixed=data["minWithdrawable"] == data["maxWithdrawable"]) + params.update(fixed=data["minWithdrawable"] + == data["maxWithdrawable"]) # callback with k1 already in it parsed_callback: ParseResult = urlparse(data["callback"]) diff --git a/lnbits/wallets/lndrest.py b/lnbits/wallets/lndrest.py index f0824dacc..e3addfd68 100644 --- a/lnbits/wallets/lndrest.py +++ b/lnbits/wallets/lndrest.py @@ -5,6 +5,8 @@ import base64 from os import getenv from typing import Optional, Dict, AsyncGenerator +from lnbits import bolt11 as lnbits_bolt11 + from .base import ( StatusResponse, InvoiceResponse, @@ -21,7 +23,8 @@ class LndRestWallet(Wallet): endpoint = getenv("LND_REST_ENDPOINT") endpoint = endpoint[:-1] if endpoint.endswith("/") else endpoint endpoint = ( - "https://" + endpoint if not endpoint.startswith("http") else endpoint + "https://" + + endpoint if not endpoint.startswith("http") else endpoint ) self.endpoint = endpoint @@ -89,10 +92,21 @@ class LndRestWallet(Wallet): async def pay_invoice(self, bolt11: str) -> PaymentResponse: async with httpx.AsyncClient(verify=self.cert) as client: + # set the fee limit for the payment + invoice = lnbits_bolt11.decode(bolt11) + lnrpcFeeLimit = dict() + if invoice.amount_msat > 1000_000: + lnrpcFeeLimit["percent"] = "1" # in percent + else: + lnrpcFeeLimit["fixed"] = "10" # in sat + r = await client.post( url=f"{self.endpoint}/v1/channels/transactions", headers=self.auth, - json={"payment_request": bolt11}, + json={ + "payment_request": bolt11, + "fee_limit": lnrpcFeeLimit, + }, timeout=180, ) @@ -168,7 +182,8 @@ class LndRestWallet(Wallet): except: continue - payment_hash = base64.b64decode(inv["r_hash"]).hex() + payment_hash = base64.b64decode( + inv["r_hash"]).hex() yield payment_hash except (OSError, httpx.ConnectError, httpx.ReadError): pass From 63546036bcfe9d2aee29ca9226c939f2ae0f6bd0 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Tue, 30 Nov 2021 14:12:01 +0000 Subject: [PATCH 07/46] fix purge --- lnbits/extensions/lnaddress/crud.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/extensions/lnaddress/crud.py b/lnbits/extensions/lnaddress/crud.py index 4cfff2f9e..3bd636f19 100644 --- a/lnbits/extensions/lnaddress/crud.py +++ b/lnbits/extensions/lnaddress/crud.py @@ -176,7 +176,7 @@ async def purge_addresses(domain_id: str): now = datetime.now().timestamp() for row in rows: - r = Addresses(**row)._asdict() + r = Addresses(**row).dict() start = datetime.fromtimestamp(r["time"]) paid = r["paid"] From 5b01ee6879a2fe37b6668e474070eccd8b0ec939 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Tue, 30 Nov 2021 14:20:34 +0000 Subject: [PATCH 08/46] check for missing protocol --- 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 30b8fc5a4..20ec7a964 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -15,6 +15,7 @@ from .crud import get_address, get_address_by_username, get_domain async def lnurl_response(username: str, domain: str, request: Request): + print("LNU", username, domain) address = await get_address_by_username(username, domain) if not address: @@ -54,7 +55,7 @@ async def lnurl_callback(address_id, amount: int = Query(...)): if address.wallet_endpoint.endswith("/") else address.wallet_endpoint ) - + print("BASE", base_url) async with httpx.AsyncClient() as client: try: call = await client.post( From f37af0ddf6102871c4a7bf0bcd061399514db42f Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Tue, 30 Nov 2021 14:41:25 +0000 Subject: [PATCH 09/46] fix request url default --- lnbits/extensions/lnaddress/lnurl.py | 2 +- lnbits/extensions/lnaddress/templates/lnaddress/display.html | 2 +- lnbits/extensions/lnaddress/templates/lnaddress/index.html | 1 + lnbits/extensions/lnaddress/views.py | 5 ++++- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index 20ec7a964..22e54b8a2 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -55,7 +55,7 @@ async def lnurl_callback(address_id, amount: int = Query(...)): if address.wallet_endpoint.endswith("/") else address.wallet_endpoint ) - print("BASE", base_url) + print("BASE", base_url ) async with httpx.AsyncClient() as client: try: call = await client.post( diff --git a/lnbits/extensions/lnaddress/templates/lnaddress/display.html b/lnbits/extensions/lnaddress/templates/lnaddress/display.html index 67745fa85..f820c81f6 100644 --- a/lnbits/extensions/lnaddress/templates/lnaddress/display.html +++ b/lnbits/extensions/lnaddress/templates/lnaddress/display.html @@ -370,7 +370,7 @@ if (data.wallet_endpoint == '') { data.wallet_endpoint = null } - data.wallet_endpoint = data.wallet_endpoint ?? '{{ request.url_root }}' + data.wallet_endpoint = data.wallet_endpoint ?? '{{ root_url }}' data.duration = parseInt(data.duration) console.log('data', data) diff --git a/lnbits/extensions/lnaddress/templates/lnaddress/index.html b/lnbits/extensions/lnaddress/templates/lnaddress/index.html index ef04b5937..3969d6f56 100644 --- a/lnbits/extensions/lnaddress/templates/lnaddress/index.html +++ b/lnbits/extensions/lnaddress/templates/lnaddress/index.html @@ -489,6 +489,7 @@ this.getDomains() this.getAddresses() } + console.log('{{ request.url.path }}') // var self = this // // // axios is available for making requests diff --git a/lnbits/extensions/lnaddress/views.py b/lnbits/extensions/lnaddress/views.py index cec12bf89..ef6d2b766 100644 --- a/lnbits/extensions/lnaddress/views.py +++ b/lnbits/extensions/lnaddress/views.py @@ -1,4 +1,5 @@ from http import HTTPStatus +from urllib.parse import urlparse from fastapi import Request from fastapi.params import Depends @@ -34,7 +35,8 @@ async def display(domain_id, request: Request): await purge_addresses(domain_id) wallet = await get_wallet(domain.wallet) - + url = urlparse(str(request.url)) + return lnaddress_renderer().TemplateResponse( "lnaddress/display.html", { @@ -43,5 +45,6 @@ async def display(domain_id, request: Request): "domain_domain": domain.domain, "domain_cost": domain.cost, "domain_wallet_inkey": wallet.inkey, + "root_url": f"{url.scheme}://{url.netloc}" }, ) From d6f3c2f9c44d620c67b69885206cc5eeea1dfda5 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Tue, 30 Nov 2021 14:46:48 +0000 Subject: [PATCH 10/46] more debub --- 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 22e54b8a2..f233b2911 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -55,7 +55,7 @@ async def lnurl_callback(address_id, amount: int = Query(...)): if address.wallet_endpoint.endswith("/") else address.wallet_endpoint ) - print("BASE", base_url ) + print("BASE", base_url, address ) async with httpx.AsyncClient() as client: try: call = await client.post( From ccd3a12ed34fc41a1453fdd47331991520dfcf40 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Tue, 30 Nov 2021 14:58:03 +0000 Subject: [PATCH 11/46] fix lnbits root url --- lnbits/extensions/lnaddress/lnurl.py | 3 +-- .../lnaddress/templates/lnaddress/display.html | 3 +-- .../lnaddress/templates/lnaddress/index.html | 13 ------------- 3 files changed, 2 insertions(+), 17 deletions(-) diff --git a/lnbits/extensions/lnaddress/lnurl.py b/lnbits/extensions/lnaddress/lnurl.py index f233b2911..30b8fc5a4 100644 --- a/lnbits/extensions/lnaddress/lnurl.py +++ b/lnbits/extensions/lnaddress/lnurl.py @@ -15,7 +15,6 @@ from .crud import get_address, get_address_by_username, get_domain async def lnurl_response(username: str, domain: str, request: Request): - print("LNU", username, domain) address = await get_address_by_username(username, domain) if not address: @@ -55,7 +54,7 @@ async def lnurl_callback(address_id, amount: int = Query(...)): if address.wallet_endpoint.endswith("/") else address.wallet_endpoint ) - print("BASE", base_url, address ) + async with httpx.AsyncClient() as client: try: call = await client.post( diff --git a/lnbits/extensions/lnaddress/templates/lnaddress/display.html b/lnbits/extensions/lnaddress/templates/lnaddress/display.html index f820c81f6..7164752c0 100644 --- a/lnbits/extensions/lnaddress/templates/lnaddress/display.html +++ b/lnbits/extensions/lnaddress/templates/lnaddress/display.html @@ -372,8 +372,7 @@ } data.wallet_endpoint = data.wallet_endpoint ?? '{{ root_url }}' data.duration = parseInt(data.duration) - console.log('data', data) - + axios .post('/lnaddress/api/v1/address/{{ domain_id }}', data) .then(response => { diff --git a/lnbits/extensions/lnaddress/templates/lnaddress/index.html b/lnbits/extensions/lnaddress/templates/lnaddress/index.html index 3969d6f56..54836a430 100644 --- a/lnbits/extensions/lnaddress/templates/lnaddress/index.html +++ b/lnbits/extensions/lnaddress/templates/lnaddress/index.html @@ -489,19 +489,6 @@ this.getDomains() this.getAddresses() } - console.log('{{ request.url.path }}') - // var self = this - // - // // axios is available for making requests - // axios({ - // method: 'GET', - // url: '/example/api/v1/tools', - // headers: { - // 'X-example-header': 'not-used' - // } - // }).then(function (response) { - // self.tools = response.data - // }) } }) From e3360514cd4fb02c73497da51139005bbd47cbee Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Tue, 30 Nov 2021 15:12:13 +0000 Subject: [PATCH 12/46] add documentation reference --- lnbits/extensions/lnaddress/templates/lnaddress/index.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lnbits/extensions/lnaddress/templates/lnaddress/index.html b/lnbits/extensions/lnaddress/templates/lnaddress/index.html index 54836a430..dffef837a 100644 --- a/lnbits/extensions/lnaddress/templates/lnaddress/index.html +++ b/lnbits/extensions/lnaddress/templates/lnaddress/index.html @@ -186,10 +186,14 @@ + Your API key in cloudflare From 290268885d6a3d41abad36d0a5c4dfa9ef2a9afd Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Tue, 30 Nov 2021 15:13:06 +0000 Subject: [PATCH 13/46] fix purge check for missing protocol fix request url default more debub fix lnbits root url add documentation reference --- lnbits/extensions/lnaddress/crud.py | 2 +- .../lnaddress/templates/lnaddress/display.html | 5 ++--- .../lnaddress/templates/lnaddress/index.html | 16 ++++------------ lnbits/extensions/lnaddress/views.py | 5 ++++- 4 files changed, 11 insertions(+), 17 deletions(-) diff --git a/lnbits/extensions/lnaddress/crud.py b/lnbits/extensions/lnaddress/crud.py index 4cfff2f9e..3bd636f19 100644 --- a/lnbits/extensions/lnaddress/crud.py +++ b/lnbits/extensions/lnaddress/crud.py @@ -176,7 +176,7 @@ async def purge_addresses(domain_id: str): now = datetime.now().timestamp() for row in rows: - r = Addresses(**row)._asdict() + r = Addresses(**row).dict() start = datetime.fromtimestamp(r["time"]) paid = r["paid"] diff --git a/lnbits/extensions/lnaddress/templates/lnaddress/display.html b/lnbits/extensions/lnaddress/templates/lnaddress/display.html index 67745fa85..7164752c0 100644 --- a/lnbits/extensions/lnaddress/templates/lnaddress/display.html +++ b/lnbits/extensions/lnaddress/templates/lnaddress/display.html @@ -370,10 +370,9 @@ if (data.wallet_endpoint == '') { data.wallet_endpoint = null } - data.wallet_endpoint = data.wallet_endpoint ?? '{{ request.url_root }}' + data.wallet_endpoint = data.wallet_endpoint ?? '{{ root_url }}' data.duration = parseInt(data.duration) - console.log('data', data) - + axios .post('/lnaddress/api/v1/address/{{ domain_id }}', data) .then(response => { diff --git a/lnbits/extensions/lnaddress/templates/lnaddress/index.html b/lnbits/extensions/lnaddress/templates/lnaddress/index.html index ef04b5937..dffef837a 100644 --- a/lnbits/extensions/lnaddress/templates/lnaddress/index.html +++ b/lnbits/extensions/lnaddress/templates/lnaddress/index.html @@ -186,10 +186,14 @@ + Your API key in cloudflare @@ -489,18 +493,6 @@ this.getDomains() this.getAddresses() } - // var self = this - // - // // axios is available for making requests - // axios({ - // method: 'GET', - // url: '/example/api/v1/tools', - // headers: { - // 'X-example-header': 'not-used' - // } - // }).then(function (response) { - // self.tools = response.data - // }) } }) diff --git a/lnbits/extensions/lnaddress/views.py b/lnbits/extensions/lnaddress/views.py index cec12bf89..ef6d2b766 100644 --- a/lnbits/extensions/lnaddress/views.py +++ b/lnbits/extensions/lnaddress/views.py @@ -1,4 +1,5 @@ from http import HTTPStatus +from urllib.parse import urlparse from fastapi import Request from fastapi.params import Depends @@ -34,7 +35,8 @@ async def display(domain_id, request: Request): await purge_addresses(domain_id) wallet = await get_wallet(domain.wallet) - + url = urlparse(str(request.url)) + return lnaddress_renderer().TemplateResponse( "lnaddress/display.html", { @@ -43,5 +45,6 @@ async def display(domain_id, request: Request): "domain_domain": domain.domain, "domain_cost": domain.cost, "domain_wallet_inkey": wallet.inkey, + "root_url": f"{url.scheme}://{url.netloc}" }, ) From c5d7b7f4113865e487f4a239dd88dd478dd2c4b4 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Tue, 30 Nov 2021 21:19:05 +0000 Subject: [PATCH 14/46] 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 30b8fc5a4..d14490720 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 15/46] 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 d14490720..6d4bd95bf 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 16/46] 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 eb0984572..74161026b 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 17/46] 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 74161026b..65df395de 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 18/46] 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 65df395de..a98d9beab 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 19/46] 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 a98d9beab..bf124c99c 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 20/46] 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 6d4bd95bf..40d36e177 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 21/46] 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 bf124c99c..c2da2af84 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 22/46] ... --- 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 40d36e177..33e90a3ea 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 c2da2af84..857691ee3 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 23/46] .... --- 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 857691ee3..b4d453bdf 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 24/46] 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 b4d453bdf..7922b598d 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 25/46] . --- 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 33e90a3ea..40d36e177 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 26/46] 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 40d36e177..358ac0aff 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 27/46] . --- 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 358ac0aff..d39cd7b43 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 28/46] 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 d39cd7b43..40d36e177 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 7922b598d..268831b38 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 29/46] 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 268831b38..f850271b0 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 30/46] 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 f850271b0..fe92473a9 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 31/46] 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 40d36e177..66ddcba08 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 fe92473a9..330f04fc1 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 32/46] . --- 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 330f04fc1..1c73f30d8 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 33/46] 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 1c73f30d8..6f21278ef 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 34/46] 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 66ddcba08..77eee507a 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 35/46] 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 0f5c74e35..f8b48eccc 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 77eee507a..ba3a53ea5 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 36/46] 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 ba3a53ea5..3f4b99330 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 37/46] . --- 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 3f4b99330..8ddc59f75 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 38/46] 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 8ddc59f75..995da0b43 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 39/46] 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 995da0b43..527898fd8 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 40/46] . --- 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 f8b48eccc..5f8be4e2f 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 527898fd8..22f4f33d6 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 41/46] 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 22f4f33d6..855bfdd2f 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 42/46] . --- 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 855bfdd2f..0e4534354 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 43/46] .. --- 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 0e4534354..855bfdd2f 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 44/46] .. --- 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 855bfdd2f..1277c07ea 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 45/46] 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 1277c07ea..471403153 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 f962f4abb..9702c70b6 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 46/46] 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 0f5c74e35..5f8be4e2f 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 30b8fc5a4..471403153 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 eb0984572..6f21278ef 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 f962f4abb..9702c70b6 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