From 60cc0ca11ab8c1e53913dac9ee1676e32793d72f Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Fri, 25 Nov 2022 14:53:03 +0100 Subject: [PATCH 01/44] strip html --- lnbits/db.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lnbits/db.py b/lnbits/db.py index f52b03914..7d15a3042 100644 --- a/lnbits/db.py +++ b/lnbits/db.py @@ -1,6 +1,7 @@ import asyncio import datetime import os +import re import time from contextlib import asynccontextmanager from typing import Optional @@ -71,6 +72,16 @@ class Connection(Compat): if self.type in {POSTGRES, COCKROACH}: query = query.replace("%", "%%") query = query.replace("?", "%s") + + # strip html + CLEANR = re.compile("<.*?>|&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});") + + def cleanhtml(raw_html): + cleantext = re.sub(CLEANR, "", raw_html) + return cleantext + + query = cleanhtml(query) + return query async def fetchall(self, query: str, values: tuple = ()) -> list: From b970f0cb0c6799b75f94df19814d6b1fe79f1d73 Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Fri, 25 Nov 2022 15:11:58 +0100 Subject: [PATCH 02/44] rewrite values in db --- lnbits/db.py | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/lnbits/db.py b/lnbits/db.py index 7d15a3042..e67cc22ec 100644 --- a/lnbits/db.py +++ b/lnbits/db.py @@ -72,30 +72,41 @@ class Connection(Compat): if self.type in {POSTGRES, COCKROACH}: query = query.replace("%", "%%") query = query.replace("?", "%s") - - # strip html - CLEANR = re.compile("<.*?>|&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});") - - def cleanhtml(raw_html): - cleantext = re.sub(CLEANR, "", raw_html) - return cleantext - - query = cleanhtml(query) - return query + def rewrite_values(self, values): + # strip html + CLEANR = re.compile("<.*?>|&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});") + + def cleanhtml(raw_html): + if type(raw_html) == str: + cleantext = re.sub(CLEANR, "", raw_html) + return cleantext + else: + return raw_html + + # tuple to list and back to tuple + values = tuple([cleanhtml(l) for l in list(values)]) + return values + async def fetchall(self, query: str, values: tuple = ()) -> list: - result = await self.conn.execute(self.rewrite_query(query), values) + result = await self.conn.execute( + self.rewrite_query(query), self.rewrite_values(values) + ) return await result.fetchall() async def fetchone(self, query: str, values: tuple = ()): - result = await self.conn.execute(self.rewrite_query(query), values) + result = await self.conn.execute( + self.rewrite_query(query), self.rewrite_values(values) + ) row = await result.fetchone() await result.close() return row async def execute(self, query: str, values: tuple = ()): - return await self.conn.execute(self.rewrite_query(query), values) + return await self.conn.execute( + self.rewrite_query(query), self.rewrite_values(values) + ) class Database(Compat): From aa0fbde54185f87a399478d90c321677245a3d5c Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Fri, 25 Nov 2022 15:20:39 +0100 Subject: [PATCH 03/44] use isinstance, not type --- lnbits/db.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/db.py b/lnbits/db.py index e67cc22ec..321b23d0a 100644 --- a/lnbits/db.py +++ b/lnbits/db.py @@ -79,7 +79,7 @@ class Connection(Compat): CLEANR = re.compile("<.*?>|&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});") def cleanhtml(raw_html): - if type(raw_html) == str: + if isinstance(raw_html, str): cleantext = re.sub(CLEANR, "", raw_html) return cleantext else: From 00cb7a8d21f8b11e572a711331ae0bb07d6ba8bf Mon Sep 17 00:00:00 2001 From: Black Coffee Date: Mon, 24 Oct 2022 14:05:30 +0100 Subject: [PATCH 04/44] Added satspay settings migration --- lnbits/extensions/satspay/migrations.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lnbits/extensions/satspay/migrations.py b/lnbits/extensions/satspay/migrations.py index 2579961f5..47129dd96 100644 --- a/lnbits/extensions/satspay/migrations.py +++ b/lnbits/extensions/satspay/migrations.py @@ -37,3 +37,18 @@ async def m002_add_charge_extra_data(db): ADD COLUMN extra TEXT DEFAULT '{"mempool_endpoint": "https://mempool.space", "network": "Mainnet"}'; """ ) + +async def m002_add_settings_table(db): + """ + Settings table + """ + + await db.execute( + """ + CREATE TABLE satspay.settings ( + id TEXT NOT NULL PRIMARY KEY, + "user" TEXT, + custom_css TEXT + ); + """ + ) From 4e9132ec04974575037c1a28828dcbb999dfebec Mon Sep 17 00:00:00 2001 From: Black Coffee Date: Mon, 24 Oct 2022 15:33:49 +0100 Subject: [PATCH 05/44] SatsPay server save custom css settings now working --- lnbits/extensions/satspay/crud.py | 38 ++++++++++- lnbits/extensions/satspay/migrations.py | 1 - lnbits/extensions/satspay/models.py | 2 + .../satspay/templates/satspay/index.html | 65 +++++++++++++++++++ lnbits/extensions/satspay/views_api.py | 29 ++++++++- 5 files changed, 132 insertions(+), 3 deletions(-) diff --git a/lnbits/extensions/satspay/crud.py b/lnbits/extensions/satspay/crud.py index 968c9ab01..3e45f773f 100644 --- a/lnbits/extensions/satspay/crud.py +++ b/lnbits/extensions/satspay/crud.py @@ -3,6 +3,8 @@ from typing import List, Optional from loguru import logger +from loguru import logger + from lnbits.core.services import create_invoice from lnbits.core.views.api import api_payment from lnbits.helpers import urlsafe_short_hash @@ -10,7 +12,8 @@ from lnbits.helpers import urlsafe_short_hash from ..watchonly.crud import get_config, get_fresh_address from . import db from .helpers import fetch_onchain_balance -from .models import Charges, CreateCharge +from .models import Charges, CreateCharge, SatsPaySettings + ###############CHARGES########################## @@ -121,3 +124,36 @@ async def check_address_balance(charge_id: str) -> Optional[Charges]: if invoice_status["paid"]: return await update_charge(charge_id=charge_id, balance=charge.amount) return await get_charge(charge_id) + + +################## SETTINGS ################### +async def save_settings(user: str, data: SatsPaySettings): + # insert or update + row = await db.fetchone( + """SELECT user FROM satspay.settings WHERE user = ?""", (user,) + ) + if row: + await db.execute( + """ + UPDATE satspay.settings SET custom_css = ? WHERE user = ? + """, + ( + data.custom_css, + user + ), + ) + else: + await db.execute( + """ + INSERT INTO satspay.settings ( + user, + custom_css + ) + VALUES (?, ?) + """, + ( + user, + data.custom_css, + ), + ) + return True diff --git a/lnbits/extensions/satspay/migrations.py b/lnbits/extensions/satspay/migrations.py index 47129dd96..4a4b54603 100644 --- a/lnbits/extensions/satspay/migrations.py +++ b/lnbits/extensions/satspay/migrations.py @@ -46,7 +46,6 @@ async def m002_add_settings_table(db): await db.execute( """ CREATE TABLE satspay.settings ( - id TEXT NOT NULL PRIMARY KEY, "user" TEXT, custom_css TEXT ); diff --git a/lnbits/extensions/satspay/models.py b/lnbits/extensions/satspay/models.py index 1e7c95c99..2c391f1ff 100644 --- a/lnbits/extensions/satspay/models.py +++ b/lnbits/extensions/satspay/models.py @@ -72,3 +72,5 @@ class Charges(BaseModel): def must_call_webhook(self): return self.webhook and self.paid and self.config.webhook_success == False +class SatsPaySettings(BaseModel): + custom_css: str = Query(None) diff --git a/lnbits/extensions/satspay/templates/satspay/index.html b/lnbits/extensions/satspay/templates/satspay/index.html index 60c4d5199..648da73f8 100644 --- a/lnbits/extensions/satspay/templates/satspay/index.html +++ b/lnbits/extensions/satspay/templates/satspay/index.html @@ -8,6 +8,11 @@ New charge + + SatsPay settings + + @@ -394,6 +399,33 @@ + + + + + + Custom CSS to apply styles to your SatsPay invoice + +
+ Save Settings + Cancel +
+
+
+
{% endblock %} {% block scripts %} {{ window_vars(user) }}