From a6c84ceb6117d14a1352cf8861a65e9e4f4c7863 Mon Sep 17 00:00:00 2001 From: benarc Date: Sat, 16 Apr 2022 11:14:34 +0100 Subject: [PATCH 1/5] Geberic QRcode maker Added generic qrcode maker endpoint extensions can use to make embedable qrcodes --- lnbits/core/views/api.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 0e88b5c85..b147c2124 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -7,6 +7,7 @@ from typing import Dict, List, Optional, Union from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse import httpx +import pyqrcode from fastapi import Query, Request, Header from fastapi.exceptions import HTTPException from fastapi.param_functions import Depends @@ -580,3 +581,23 @@ async def api_fiat_as_sats(data: ConversionData): output["sats"] = await fiat_amount_as_satoshis(data.amount, data.from_) output["BTC"] = output["sats"] / 100000000 return output + +@withdraw_ext.get("/api/v1/qrcode/{data}", response_class=StreamingResponse) +async def img(request: Request, data): + qr = pyqrcode.create(data) + stream = BytesIO() + qr.svg(stream, scale=3) + stream.seek(0) + + async def _generator(stream: BytesIO): + yield stream.getvalue() + + return StreamingResponse( + _generator(stream), + headers={ + "Content-Type": "image/svg+xml", + "Cache-Control": "no-cache, no-store, must-revalidate", + "Pragma": "no-cache", + "Expires": "0", + }, + ) From c7322fd071db545e88078d7e1dbc0ca33b68564a Mon Sep 17 00:00:00 2001 From: benarc Date: Sat, 16 Apr 2022 11:15:42 +0100 Subject: [PATCH 2/5] correct route --- lnbits/core/views/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index b147c2124..aca5a4582 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -582,7 +582,7 @@ async def api_fiat_as_sats(data: ConversionData): output["BTC"] = output["sats"] / 100000000 return output -@withdraw_ext.get("/api/v1/qrcode/{data}", response_class=StreamingResponse) +@core_app.get("/api/v1/qrcode/{data}", response_class=StreamingResponse) async def img(request: Request, data): qr = pyqrcode.create(data) stream = BytesIO() From b5703e0dfc43ab9013070a433ca8e41e245ec084 Mon Sep 17 00:00:00 2001 From: benarc Date: Sat, 16 Apr 2022 11:17:03 +0100 Subject: [PATCH 3/5] added dependency --- lnbits/core/views/api.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index aca5a4582..9cb005fef 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -8,6 +8,7 @@ from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse import httpx import pyqrcode +from starlette.responses import HTMLResponse, StreamingResponse from fastapi import Query, Request, Header from fastapi.exceptions import HTTPException from fastapi.param_functions import Depends From 829e220096ed7696d5aa87a7cd37c88c6c1ae01a Mon Sep 17 00:00:00 2001 From: benarc Date: Sat, 16 Apr 2022 11:18:27 +0100 Subject: [PATCH 4/5] another dependency --- lnbits/core/views/api.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 9cb005fef..4123a70b5 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -8,6 +8,7 @@ from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse import httpx import pyqrcode +from io import BytesIO from starlette.responses import HTMLResponse, StreamingResponse from fastapi import Query, Request, Header from fastapi.exceptions import HTTPException From 4199f1bf9842594e64dfd7889d9d63a1a2758219 Mon Sep 17 00:00:00 2001 From: ben Date: Thu, 28 Jul 2022 11:02:49 +0100 Subject: [PATCH 5/5] Make format --- lnbits/core/views/api.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 35806a2b5..52b0837f8 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -3,20 +3,20 @@ import hashlib import json from binascii import unhexlify from http import HTTPStatus +from io import BytesIO from typing import Dict, List, Optional, Tuple, Union from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse import httpx -from fastapi import Depends, Header, Query, Request import pyqrcode -from io import BytesIO -from starlette.responses import HTMLResponse, StreamingResponse +from fastapi import Depends, Header, Query, Request from fastapi.exceptions import HTTPException from fastapi.params import Body from loguru import logger from pydantic import BaseModel from pydantic.fields import Field from sse_starlette.sse import EventSourceResponse +from starlette.responses import HTMLResponse, StreamingResponse from lnbits import bolt11, lnurl from lnbits.core.models import Payment, Wallet @@ -625,6 +625,7 @@ async def api_fiat_as_sats(data: ConversionData): output["BTC"] = output["sats"] / 100000000 return output + @core_app.get("/api/v1/qrcode/{data}", response_class=StreamingResponse) async def img(request: Request, data): qr = pyqrcode.create(data)