Custom CSS on SatsPay server working!:)

This commit is contained in:
Black Coffee
2022-10-25 10:42:39 +01:00
parent da0db563e2
commit a3baad03e0
7 changed files with 63 additions and 37 deletions
+2 -10
View File
@@ -2,8 +2,6 @@ from typing import List, Optional
import httpx import httpx
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 ..watchonly.crud import get_config, get_fresh_address
from . import db from . import db
from .models import Charges, CreateCharge, SatsPaySettings from .models import Charges, CreateCharge, SatsPaySettings
###############CHARGES########################## ###############CHARGES##########################
@@ -96,14 +93,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:
@@ -158,10 +153,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(
+1
View File
@@ -27,6 +27,7 @@ async def m001_initial(db):
""" """
) )
async def m002_add_settings_table(db): async def m002_add_settings_table(db):
""" """
Settings table Settings table
+1
View File
@@ -55,6 +55,7 @@ class Charges(BaseModel):
else: else:
return False return False
class SatsPaySettings(BaseModel): class SatsPaySettings(BaseModel):
custom_css: str = Query(None) custom_css: str = Query(None)
@@ -289,7 +289,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>
@@ -302,6 +307,7 @@
mixins: [windowMixin], mixins: [windowMixin],
data() { data() {
return { return {
customCss: '',
charge: JSON.parse('{{charge_data | tojson}}'), charge: JSON.parse('{{charge_data | tojson}}'),
mempool_endpoint: '{{mempool_endpoint}}', mempool_endpoint: '{{mempool_endpoint}}',
pendingFunds: 0, 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 () { checkBalances: async function () {
if (this.charge.hasStaleBalance) return if (this.charge.hasStaleBalance) return
try { try {
@@ -428,6 +445,7 @@
} }
}, },
created: async function () { created: async function () {
await this.getCustomCss()
if (this.charge.lnbitswallet) this.payInvoice() if (this.charge.lnbitswallet) this.payInvoice()
else this.payOnchain() else this.payOnchain()
await this.checkBalances() await this.checkBalances()
@@ -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>
@@ -395,7 +397,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
@@ -405,15 +407,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
> >
@@ -533,16 +532,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
}, },
@@ -616,14 +615,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)
@@ -707,7 +706,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',
+17 -1
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.core.models import User
from lnbits.decorators import check_user_exists from lnbits.decorators import check_user_exists
from . import satspay_ext, satspay_renderer 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") templates = Jinja2Templates(directory="templates")
@@ -45,3 +46,18 @@ async def display(request: Request, charge_id: str):
"mempool_endpoint": mempool_endpoint, "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
+6 -7
View File
@@ -1,10 +1,11 @@
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,
@@ -19,9 +20,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 compact_charge from .helpers import compact_charge
from .models import CreateCharge, SatsPaySettings from .models import CreateCharge, SatsPaySettings
@@ -139,6 +140,7 @@ async def api_charge_balance(charge_id):
**{"paid": charge.paid}, **{"paid": charge.paid},
} }
#############################CHARGES########################## #############################CHARGES##########################
@@ -146,18 +148,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 ""