From a3baad03e03a0ef234f779d85c117616bb74b544 Mon Sep 17 00:00:00 2001 From: Black Coffee Date: Mon, 24 Oct 2022 16:38:56 +0100 Subject: [PATCH] Custom CSS on SatsPay server working!:) --- lnbits/extensions/satspay/crud.py | 12 ++----- lnbits/extensions/satspay/migrations.py | 1 + lnbits/extensions/satspay/models.py | 3 +- .../satspay/templates/satspay/display.html | 20 ++++++++++- .../satspay/templates/satspay/index.html | 33 +++++++++---------- lnbits/extensions/satspay/views.py | 18 +++++++++- lnbits/extensions/satspay/views_api.py | 13 ++++---- 7 files changed, 63 insertions(+), 37 deletions(-) diff --git a/lnbits/extensions/satspay/crud.py b/lnbits/extensions/satspay/crud.py index a21c73f41..245e4a1a0 100644 --- a/lnbits/extensions/satspay/crud.py +++ b/lnbits/extensions/satspay/crud.py @@ -2,8 +2,6 @@ from typing import List, Optional import httpx -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 @@ -14,7 +12,6 @@ from ..watchonly.crud import get_config, get_fresh_address from . import db from .models import Charges, CreateCharge, SatsPaySettings - ###############CHARGES########################## @@ -96,14 +93,12 @@ async def get_charges(user: str) -> List[Charges]: ) return [Charges.from_row(row) for row in rows] + async def get_settings(user: str) -> SatsPaySettings: row = await db.fetchone( """SELECT * FROM satspay.settings WHERE "user" = ?""", (user,), ) - logger.debug('Settings data') - logger.debug(row) - if row: return SatsPaySettings.from_row(row) else: @@ -158,10 +153,7 @@ async def save_settings(user: str, data: SatsPaySettings): """ UPDATE satspay.settings SET custom_css = ? WHERE user = ? """, - ( - data.custom_css, - user - ), + (data.custom_css, user), ) else: await db.execute( diff --git a/lnbits/extensions/satspay/migrations.py b/lnbits/extensions/satspay/migrations.py index ff4304512..18995438c 100644 --- a/lnbits/extensions/satspay/migrations.py +++ b/lnbits/extensions/satspay/migrations.py @@ -27,6 +27,7 @@ async def m001_initial(db): """ ) + async def m002_add_settings_table(db): """ Settings table diff --git a/lnbits/extensions/satspay/models.py b/lnbits/extensions/satspay/models.py index d5cd48955..942263574 100644 --- a/lnbits/extensions/satspay/models.py +++ b/lnbits/extensions/satspay/models.py @@ -55,9 +55,10 @@ class Charges(BaseModel): else: return False + class SatsPaySettings(BaseModel): custom_css: str = Query(None) @classmethod def from_row(cls, row: Row) -> "SatsPaySettings": - return cls(**dict(row)) \ No newline at end of file + return cls(**dict(row)) diff --git a/lnbits/extensions/satspay/templates/satspay/display.html b/lnbits/extensions/satspay/templates/satspay/display.html index 12288c809..5f9c8287d 100644 --- a/lnbits/extensions/satspay/templates/satspay/display.html +++ b/lnbits/extensions/satspay/templates/satspay/display.html @@ -289,7 +289,12 @@
- +{% endblock %} {% block styles %} + {% endblock %} {% block scripts %} @@ -302,6 +307,7 @@ mixins: [windowMixin], data() { return { + customCss: '', charge: JSON.parse('{{charge_data | tojson}}'), mempool_endpoint: '{{mempool_endpoint}}', pendingFunds: 0, @@ -327,6 +333,17 @@ } ) }, + getCustomCss: async function () { + try { + const {data} = await LNbits.api.request( + 'GET', + `/satspay/api/v1/settings/css/${this.charge.id}` + ) + this.customCss = data + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, checkBalances: async function () { if (this.charge.hasStaleBalance) return try { @@ -428,6 +445,7 @@ } }, created: async function () { + await this.getCustomCss() if (this.charge.lnbitswallet) this.payInvoice() else this.payOnchain() await this.checkBalances() diff --git a/lnbits/extensions/satspay/templates/satspay/index.html b/lnbits/extensions/satspay/templates/satspay/index.html index 944306979..65be3a9e3 100644 --- a/lnbits/extensions/satspay/templates/satspay/index.html +++ b/lnbits/extensions/satspay/templates/satspay/index.html @@ -9,10 +9,12 @@ >New charge - SatsPay settings - @@ -395,7 +397,7 @@ - + - Custom CSS to apply styles to your SatsPay invoice + Custom CSS to apply styles to your SatsPay invoice
- Save Settings + Save Settings Cancel @@ -533,16 +532,16 @@ amount: null } }, - formDialogSettings: { + formDialogSettings: { show: false, data: { - custom_css: '', - } + custom_css: '' + } } } }, methods: { - cancelSettings: function(data) { + cancelSettings: function (data) { this.formDialogCharge.data.custom_css = '' this.formDialogSettings.show = false }, @@ -616,14 +615,14 @@ } }, - getSettings: async function () { + getSettings: async function () { try { const {data} = await LNbits.api.request( 'GET', '/satspay/api/v1/settings', this.g.user.wallets[0].inkey ) - console.log('Settings data', data) + console.log('Settings data', data) this.formDialogSettings.data = data } catch (error) { LNbits.utils.notifyApiError(error) @@ -707,7 +706,7 @@ } }, saveSettings: async function (wallet, data) { - console.log('wallet', wallet) + console.log('wallet', wallet) try { const resp = await LNbits.api.request( 'POST', diff --git a/lnbits/extensions/satspay/views.py b/lnbits/extensions/satspay/views.py index b789bf8fe..6b14c2788 100644 --- a/lnbits/extensions/satspay/views.py +++ b/lnbits/extensions/satspay/views.py @@ -1,5 +1,6 @@ from http import HTTPStatus +from fastapi import Response from fastapi.param_functions import Depends from fastapi.templating import Jinja2Templates from starlette.exceptions import HTTPException @@ -11,7 +12,7 @@ from lnbits.core.models import User from lnbits.decorators import check_user_exists from . import satspay_ext, satspay_renderer -from .crud import get_charge, get_charge_config +from .crud import get_charge, get_charge_config, get_settings templates = Jinja2Templates(directory="templates") @@ -45,3 +46,18 @@ async def display(request: Request, charge_id: str): "mempool_endpoint": mempool_endpoint, }, ) + + +@satspay_ext.get("/css/{charge_id}") +async def display(charge_id: str, response: Response): + charge = await get_charge(charge_id) + if not charge: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, detail="Charge link does not exist." + ) + wallet = await get_wallet(charge.lnbitswallet) + settings = await get_settings(wallet.user) + if settings: + return Response(content=settings.custom_css, media_type="text/css") + + return None diff --git a/lnbits/extensions/satspay/views_api.py b/lnbits/extensions/satspay/views_api.py index 986762f70..9ac266ed8 100644 --- a/lnbits/extensions/satspay/views_api.py +++ b/lnbits/extensions/satspay/views_api.py @@ -1,10 +1,11 @@ from http import HTTPStatus -from loguru import logger import httpx from fastapi.params import Depends +from loguru import logger from starlette.exceptions import HTTPException +from lnbits.core.crud import get_wallet from lnbits.decorators import ( WalletTypeInfo, get_key_type, @@ -19,9 +20,9 @@ from .crud import ( delete_charge, get_charge, get_charges, - update_charge, - save_settings, get_settings, + save_settings, + update_charge, ) from .helpers import compact_charge from .models import CreateCharge, SatsPaySettings @@ -139,6 +140,7 @@ async def api_charge_balance(charge_id): **{"paid": charge.paid}, } + #############################CHARGES########################## @@ -146,18 +148,15 @@ async def api_charge_balance(charge_id): async def api_settings_save( data: SatsPaySettings, wallet: WalletTypeInfo = Depends(require_invoice_key) ): - logger.debug("wallet.wallet.user") - logger.debug(wallet.wallet.user) await save_settings(user=wallet.wallet.user, data=data) return True @satspay_ext.get("/api/v1/settings") async def api_settings_retrieve(wallet: WalletTypeInfo = Depends(get_key_type)): - logger.debug('HERHEHRHEHRHEHR') try: return await get_settings(wallet.wallet.user) except HTTPException: - logger.error('Error loading satspay settings') + logger.error("Error loading satspay settings") logger.error(HTTPException) return ""