From 3cbbe2a93d546e4e64c36a6a79e3c2355ced648b Mon Sep 17 00:00:00 2001 From: ChuckNorrison <2964146+ChuckNorrison@users.noreply.github.com> Date: Thu, 17 Nov 2022 15:44:59 +0100 Subject: [PATCH 01/54] fix integer to bigint for extensions Some more INTEGER to BIGINT conversion for postgresql database --- lnbits/extensions/lnurlp/migrations.py | 2 +- lnbits/extensions/offlineshop/migrations.py | 2 +- lnbits/extensions/paywall/migrations.py | 4 ++-- lnbits/extensions/satsdice/migrations.py | 6 +++--- lnbits/extensions/satspay/migrations.py | 4 ++-- lnbits/extensions/watchonly/migrations.py | 4 ++-- lnbits/extensions/withdraw/migrations.py | 8 ++++---- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/lnbits/extensions/lnurlp/migrations.py b/lnbits/extensions/lnurlp/migrations.py index 81dd62f8..83a99c2c 100644 --- a/lnbits/extensions/lnurlp/migrations.py +++ b/lnbits/extensions/lnurlp/migrations.py @@ -8,7 +8,7 @@ async def m001_initial(db): id {db.serial_primary_key}, wallet TEXT NOT NULL, description TEXT NOT NULL, - amount INTEGER NOT NULL, + amount {db.big_int} NOT NULL, served_meta INTEGER NOT NULL, served_pr INTEGER NOT NULL ); diff --git a/lnbits/extensions/offlineshop/migrations.py b/lnbits/extensions/offlineshop/migrations.py index 84aea27e..4e668668 100644 --- a/lnbits/extensions/offlineshop/migrations.py +++ b/lnbits/extensions/offlineshop/migrations.py @@ -22,7 +22,7 @@ async def m001_initial(db): description TEXT NOT NULL, image TEXT, -- image/png;base64,... enabled BOOLEAN NOT NULL DEFAULT true, - price INTEGER NOT NULL, + price {db.big_int} NOT NULL, unit TEXT NOT NULL DEFAULT 'sat' ); """ diff --git a/lnbits/extensions/paywall/migrations.py b/lnbits/extensions/paywall/migrations.py index fa91e409..bef954f6 100644 --- a/lnbits/extensions/paywall/migrations.py +++ b/lnbits/extensions/paywall/migrations.py @@ -10,7 +10,7 @@ async def m001_initial(db): secret TEXT NOT NULL, url TEXT NOT NULL, memo TEXT NOT NULL, - amount INTEGER NOT NULL, + amount {db.big_int} NOT NULL, time TIMESTAMP NOT NULL DEFAULT """ + db.timestamp_now + """ @@ -32,7 +32,7 @@ async def m002_redux(db): url TEXT NOT NULL, memo TEXT NOT NULL, description TEXT NULL, - amount INTEGER DEFAULT 0, + amount {db.big_int} DEFAULT 0, time TIMESTAMP NOT NULL DEFAULT """ + db.timestamp_now + """, diff --git a/lnbits/extensions/satsdice/migrations.py b/lnbits/extensions/satsdice/migrations.py index 61298241..990123f2 100644 --- a/lnbits/extensions/satsdice/migrations.py +++ b/lnbits/extensions/satsdice/migrations.py @@ -10,7 +10,7 @@ async def m001_initial(db): title TEXT, min_bet INTEGER, max_bet INTEGER, - amount INTEGER DEFAULT 0, + amount {db.big_int} DEFAULT 0, served_meta INTEGER NOT NULL, served_pr INTEGER NOT NULL, multiplier FLOAT, @@ -32,7 +32,7 @@ async def m002_initial(db): CREATE TABLE satsdice.satsdice_withdraw ( id TEXT PRIMARY KEY, satsdice_pay TEXT, - value INTEGER DEFAULT 1, + value {db.big_int} DEFAULT 1, unique_hash TEXT UNIQUE, k1 TEXT, open_time INTEGER, @@ -51,7 +51,7 @@ async def m003_initial(db): CREATE TABLE satsdice.satsdice_payment ( payment_hash TEXT PRIMARY KEY, satsdice_pay TEXT, - value INTEGER, + value {db.big_int}, paid BOOL DEFAULT FALSE, lost BOOL DEFAULT FALSE ); diff --git a/lnbits/extensions/satspay/migrations.py b/lnbits/extensions/satspay/migrations.py index 87446c80..a9d61418 100644 --- a/lnbits/extensions/satspay/migrations.py +++ b/lnbits/extensions/satspay/migrations.py @@ -18,8 +18,8 @@ async def m001_initial(db): completelink TEXT, completelinktext TEXT, time INTEGER, - amount INTEGER, - balance INTEGER DEFAULT 0, + amount {db.big_int}, + balance {db.big_int} DEFAULT 0, timestamp TIMESTAMP NOT NULL DEFAULT """ + db.timestamp_now + """ diff --git a/lnbits/extensions/watchonly/migrations.py b/lnbits/extensions/watchonly/migrations.py index 76f7f951..dbe0c1a2 100644 --- a/lnbits/extensions/watchonly/migrations.py +++ b/lnbits/extensions/watchonly/migrations.py @@ -10,7 +10,7 @@ async def m001_initial(db): masterpub TEXT NOT NULL, title TEXT NOT NULL, address_no INTEGER NOT NULL DEFAULT 0, - balance INTEGER NOT NULL + balance {db.big_int} NOT NULL ); """ ) @@ -21,7 +21,7 @@ async def m001_initial(db): id TEXT NOT NULL PRIMARY KEY, address TEXT NOT NULL, wallet TEXT NOT NULL, - amount INTEGER NOT NULL + amount {db.big_int} NOT NULL ); """ ) diff --git a/lnbits/extensions/withdraw/migrations.py b/lnbits/extensions/withdraw/migrations.py index 5484277a..e30f88d0 100644 --- a/lnbits/extensions/withdraw/migrations.py +++ b/lnbits/extensions/withdraw/migrations.py @@ -8,8 +8,8 @@ async def m001_initial(db): id TEXT PRIMARY KEY, wallet TEXT, title TEXT, - min_withdrawable INTEGER DEFAULT 1, - max_withdrawable INTEGER DEFAULT 1, + min_withdrawable {db.big_int} DEFAULT 1, + max_withdrawable {db.big_int} DEFAULT 1, uses INTEGER DEFAULT 1, wait_time INTEGER, is_unique INTEGER DEFAULT 0, @@ -33,8 +33,8 @@ async def m002_change_withdraw_table(db): id TEXT PRIMARY KEY, wallet TEXT, title TEXT, - min_withdrawable INTEGER DEFAULT 1, - max_withdrawable INTEGER DEFAULT 1, + min_withdrawable {db.big_int} DEFAULT 1, + max_withdrawable {db.big_int} DEFAULT 1, uses INTEGER DEFAULT 1, wait_time INTEGER, is_unique INTEGER DEFAULT 0, From 4b408c1f0a02b461ef84d869efacfe95f56e9aa0 Mon Sep 17 00:00:00 2001 From: calle <93376500+callebtc@users.noreply.github.com> Date: Sat, 19 Nov 2022 14:32:17 -0600 Subject: [PATCH 02/54] Update migrations.py f string --- lnbits/extensions/paywall/migrations.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lnbits/extensions/paywall/migrations.py b/lnbits/extensions/paywall/migrations.py index bef954f6..9b3341fd 100644 --- a/lnbits/extensions/paywall/migrations.py +++ b/lnbits/extensions/paywall/migrations.py @@ -3,7 +3,7 @@ async def m001_initial(db): Initial paywalls table. """ await db.execute( - """ + f""" CREATE TABLE paywall.paywalls ( id TEXT PRIMARY KEY, wallet TEXT NOT NULL, @@ -25,7 +25,7 @@ async def m002_redux(db): """ await db.execute("ALTER TABLE paywall.paywalls RENAME TO paywalls_old") await db.execute( - """ + f""" CREATE TABLE paywall.paywalls ( id TEXT PRIMARY KEY, wallet TEXT NOT NULL, From 066015c05cc616824de0101cbe9aabd71cf82097 Mon Sep 17 00:00:00 2001 From: calle <93376500+callebtc@users.noreply.github.com> Date: Sat, 19 Nov 2022 14:33:18 -0600 Subject: [PATCH 03/54] Update migrations.py f string --- lnbits/extensions/satsdice/migrations.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lnbits/extensions/satsdice/migrations.py b/lnbits/extensions/satsdice/migrations.py index 990123f2..82ab35ba 100644 --- a/lnbits/extensions/satsdice/migrations.py +++ b/lnbits/extensions/satsdice/migrations.py @@ -3,7 +3,7 @@ async def m001_initial(db): Creates an improved satsdice table and migrates the existing data. """ await db.execute( - """ + f""" CREATE TABLE satsdice.satsdice_pay ( id TEXT PRIMARY KEY, wallet TEXT, @@ -28,7 +28,7 @@ async def m002_initial(db): Creates an improved satsdice table and migrates the existing data. """ await db.execute( - """ + f""" CREATE TABLE satsdice.satsdice_withdraw ( id TEXT PRIMARY KEY, satsdice_pay TEXT, @@ -47,7 +47,7 @@ async def m003_initial(db): Creates an improved satsdice table and migrates the existing data. """ await db.execute( - """ + f""" CREATE TABLE satsdice.satsdice_payment ( payment_hash TEXT PRIMARY KEY, satsdice_pay TEXT, From f70d30bfa62f7b27f7a4e8f20736047810b3a4d9 Mon Sep 17 00:00:00 2001 From: calle <93376500+callebtc@users.noreply.github.com> Date: Sat, 19 Nov 2022 14:34:13 -0600 Subject: [PATCH 04/54] Update migrations.py --- lnbits/extensions/withdraw/migrations.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lnbits/extensions/withdraw/migrations.py b/lnbits/extensions/withdraw/migrations.py index e30f88d0..0c6ed4fc 100644 --- a/lnbits/extensions/withdraw/migrations.py +++ b/lnbits/extensions/withdraw/migrations.py @@ -3,7 +3,7 @@ async def m001_initial(db): Creates an improved withdraw table and migrates the existing data. """ await db.execute( - """ + f""" CREATE TABLE withdraw.withdraw_links ( id TEXT PRIMARY KEY, wallet TEXT, @@ -28,7 +28,7 @@ async def m002_change_withdraw_table(db): Creates an improved withdraw table and migrates the existing data. """ await db.execute( - """ + f""" CREATE TABLE withdraw.withdraw_link ( id TEXT PRIMARY KEY, wallet TEXT, 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 05/54] strip html --- lnbits/db.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lnbits/db.py b/lnbits/db.py index f52b0391..7d15a304 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 06/54] 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 7d15a304..e67cc22e 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 07/54] 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 e67cc22e..321b23d0 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 08/54] 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 2579961f..47129dd9 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 09/54] 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 968c9ab0..3e45f773 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 47129dd9..4a4b5460 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 1e7c95c9..2c391f1f 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 60c4d519..648da73f 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) }}