Custom CSS on SatsPay server working!:)

This commit is contained in:
Black Coffee
2022-10-24 16:38:56 +01:00
committed by Vlad Stan
parent 220dc699cf
commit 7106dee2ce
6 changed files with 71 additions and 36 deletions

View File

@@ -3,8 +3,6 @@ from typing import List, Optional
from loguru import logger from loguru import logger
from loguru import logger
from lnbits.core.services import create_invoice from lnbits.core.services import create_invoice
from lnbits.core.views.api import api_payment from lnbits.core.views.api import api_payment
from lnbits.helpers import urlsafe_short_hash from lnbits.helpers import urlsafe_short_hash
@@ -14,7 +12,6 @@ from . import db
from .helpers import fetch_onchain_balance from .helpers import fetch_onchain_balance
from .models import Charges, CreateCharge, SatsPaySettings from .models import Charges, CreateCharge, SatsPaySettings
###############CHARGES########################## ###############CHARGES##########################
@@ -102,14 +99,12 @@ async def get_charges(user: str) -> List[Charges]:
) )
return [Charges.from_row(row) for row in rows] return [Charges.from_row(row) for row in rows]
async def get_settings(user: str) -> SatsPaySettings: async def get_settings(user: str) -> SatsPaySettings:
row = await db.fetchone( row = await db.fetchone(
"""SELECT * FROM satspay.settings WHERE "user" = ?""", """SELECT * FROM satspay.settings WHERE "user" = ?""",
(user,), (user,),
) )
logger.debug('Settings data')
logger.debug(row)
if row: if row:
return SatsPaySettings.from_row(row) return SatsPaySettings.from_row(row)
else: else:
@@ -150,10 +145,7 @@ async def save_settings(user: str, data: SatsPaySettings):
""" """
UPDATE satspay.settings SET custom_css = ? WHERE user = ? UPDATE satspay.settings SET custom_css = ? WHERE user = ?
""", """,
( (data.custom_css, user),
data.custom_css,
user
),
) )
else: else:
await db.execute( await db.execute(

View File

@@ -72,6 +72,7 @@ class Charges(BaseModel):
def must_call_webhook(self): def must_call_webhook(self):
return self.webhook and self.paid and self.config.webhook_success == False return self.webhook and self.paid and self.config.webhook_success == False
class SatsPaySettings(BaseModel): class SatsPaySettings(BaseModel):
custom_css: str = Query(None) custom_css: str = Query(None)

View File

@@ -297,7 +297,12 @@
</div> </div>
<div class="col-lg- 4 col-md-3 col-sm-1"></div> <div class="col-lg- 4 col-md-3 col-sm-1"></div>
</div> </div>
{% endblock %} {% block styles %}
<link
href="/satspay/css/{{ charge_data.id }}"
rel="stylesheet"
type="text/css"
/>
{% endblock %} {% block scripts %} {% endblock %} {% block scripts %}
<script src="https://mempool.space/mempool.js"></script> <script src="https://mempool.space/mempool.js"></script>
@@ -310,6 +315,7 @@
mixins: [windowMixin], mixins: [windowMixin],
data() { data() {
return { return {
customCss: '',
charge: JSON.parse('{{charge_data | tojson}}'), charge: JSON.parse('{{charge_data | tojson}}'),
mempoolEndpoint: '{{mempool_endpoint}}', mempoolEndpoint: '{{mempool_endpoint}}',
network: '{{network}}', network: '{{network}}',
@@ -335,6 +341,27 @@
} }
}, },
methods: { methods: {
startPaymentNotifier() {
this.cancelListener()
if (!this.lnbitswallet) return
this.cancelListener = LNbits.events.onInvoicePaid(
this.wallet,
payment => {
this.checkInvoiceBalance()
}
)
},
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 () { checkBalances: async function () {
if (!this.charge.payment_request && this.charge.hasOnchainStaleBalance) if (!this.charge.payment_request && this.charge.hasOnchainStaleBalance)
return return
@@ -438,6 +465,7 @@
} }
}, },
created: async function () { created: async function () {
await this.getCustomCss()
if (this.charge.payment_request) this.payInvoice() if (this.charge.payment_request) this.payInvoice()
else this.payOnchain() else this.payOnchain()

View File

@@ -9,10 +9,12 @@
>New charge >New charge
</q-btn> </q-btn>
<q-btn unelevated color="primary" @click="getSettings();formDialogSettings.show = true" <q-btn
unelevated
color="primary"
@click="getSettings();formDialogSettings.show = true"
>SatsPay settings >SatsPay settings
</q-btn> </q-btn>
</q-card-section> </q-card-section>
</q-card> </q-card>
@@ -400,7 +402,7 @@
</q-card> </q-card>
</q-dialog> </q-dialog>
<q-dialog v-model="formDialogSettings.show" position="top"> <q-dialog v-model="formDialogSettings.show" position="top">
<q-card class="q-pa-lg q-pt-xl lnbits__dialog-card"> <q-card class="q-pa-lg q-pt-xl lnbits__dialog-card">
<q-form @submit="sendFormDataSettings" class="q-gutter-md"> <q-form @submit="sendFormDataSettings" class="q-gutter-md">
<q-input <q-input
@@ -410,15 +412,12 @@
type="textarea" type="textarea"
label="Custom CSS" label="Custom CSS"
> >
<q-tooltip>Custom CSS to apply styles to your SatsPay invoice</q-tooltip> <q-tooltip
>Custom CSS to apply styles to your SatsPay invoice</q-tooltip
>
</q-input> </q-input>
<div class="row q-mt-lg"> <div class="row q-mt-lg">
<q-btn <q-btn unelevated color="primary" type="submit">Save Settings</q-btn>
unelevated
color="primary"
type="submit"
>Save Settings</q-btn
>
<q-btn @click="cancelSettings" flat color="grey" class="q-ml-auto" <q-btn @click="cancelSettings" flat color="grey" class="q-ml-auto"
>Cancel</q-btn >Cancel</q-btn
> >
@@ -539,16 +538,16 @@
amount: null amount: null
} }
}, },
formDialogSettings: { formDialogSettings: {
show: false, show: false,
data: { data: {
custom_css: '', custom_css: ''
} }
} }
} }
}, },
methods: { methods: {
cancelSettings: function(data) { cancelSettings: function (data) {
this.formDialogCharge.data.custom_css = '' this.formDialogCharge.data.custom_css = ''
this.formDialogSettings.show = false this.formDialogSettings.show = false
}, },
@@ -624,14 +623,14 @@
} }
}, },
getSettings: async function () { getSettings: async function () {
try { try {
const {data} = await LNbits.api.request( const {data} = await LNbits.api.request(
'GET', 'GET',
'/satspay/api/v1/settings', '/satspay/api/v1/settings',
this.g.user.wallets[0].inkey this.g.user.wallets[0].inkey
) )
console.log('Settings data', data) console.log('Settings data', data)
this.formDialogSettings.data = data this.formDialogSettings.data = data
} catch (error) { } catch (error) {
LNbits.utils.notifyApiError(error) LNbits.utils.notifyApiError(error)
@@ -716,7 +715,7 @@
} }
}, },
saveSettings: async function (wallet, data) { saveSettings: async function (wallet, data) {
console.log('wallet', wallet) console.log('wallet', wallet)
try { try {
const resp = await LNbits.api.request( const resp = await LNbits.api.request(
'POST', 'POST',

View File

@@ -1,5 +1,6 @@
from http import HTTPStatus from http import HTTPStatus
from fastapi import Response
from fastapi.param_functions import Depends from fastapi.param_functions import Depends
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
from starlette.exceptions import HTTPException from starlette.exceptions import HTTPException
@@ -11,7 +12,7 @@ from lnbits.decorators import check_user_exists
from lnbits.extensions.satspay.helpers import public_charge from lnbits.extensions.satspay.helpers import public_charge
from . import satspay_ext, satspay_renderer from . import satspay_ext, satspay_renderer
from .crud import get_charge from .crud import get_charge, get_charge_config, get_settings
templates = Jinja2Templates(directory="templates") templates = Jinja2Templates(directory="templates")
@@ -40,3 +41,18 @@ async def display(request: Request, charge_id: str):
"network": charge.config.network, "network": charge.config.network,
}, },
) )
@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

View File

@@ -1,11 +1,12 @@
import json import json
from http import HTTPStatus from http import HTTPStatus
from loguru import logger
import httpx import httpx
from fastapi.params import Depends from fastapi.params import Depends
from loguru import logger
from starlette.exceptions import HTTPException from starlette.exceptions import HTTPException
from lnbits.core.crud import get_wallet
from lnbits.decorators import ( from lnbits.decorators import (
WalletTypeInfo, WalletTypeInfo,
get_key_type, get_key_type,
@@ -20,9 +21,9 @@ from .crud import (
delete_charge, delete_charge,
get_charge, get_charge,
get_charges, get_charges,
update_charge,
save_settings,
get_settings, get_settings,
save_settings,
update_charge,
) )
from .helpers import call_webhook, public_charge from .helpers import call_webhook, public_charge
from .helpers import compact_charge from .helpers import compact_charge
@@ -143,6 +144,7 @@ async def api_charge_balance(charge_id):
return {**public_charge(charge)} return {**public_charge(charge)}
#############################CHARGES########################## #############################CHARGES##########################
@@ -150,18 +152,15 @@ async def api_charge_balance(charge_id):
async def api_settings_save( async def api_settings_save(
data: SatsPaySettings, wallet: WalletTypeInfo = Depends(require_invoice_key) 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) await save_settings(user=wallet.wallet.user, data=data)
return True return True
@satspay_ext.get("/api/v1/settings") @satspay_ext.get("/api/v1/settings")
async def api_settings_retrieve(wallet: WalletTypeInfo = Depends(get_key_type)): async def api_settings_retrieve(wallet: WalletTypeInfo = Depends(get_key_type)):
logger.debug('HERHEHRHEHRHEHR')
try: try:
return await get_settings(wallet.wallet.user) return await get_settings(wallet.wallet.user)
except HTTPException: except HTTPException:
logger.error('Error loading satspay settings') logger.error("Error loading satspay settings")
logger.error(HTTPException) logger.error(HTTPException)
return "" return ""