diff --git a/.env.example b/.env.example index 28e52698..0a3f8f14 100644 --- a/.env.example +++ b/.env.example @@ -6,15 +6,16 @@ PORT=5000 DEBUG=false -# User IDs seperated by comma +# Allow users and admins by user IDs (comma separated list) +LNBITS_ALLOWED_USERS="" LNBITS_ADMIN_USERS="" # Extensions only admin can access -LNBITS_ADMIN_EXTENSIONS="ngrok, admin" +LNBITS_ADMIN_EXTENSIONS="ngrok, admin" # Enable Admin GUI, available for the first user in LNBITS_ADMIN_USERS if available -LNBITS_ADMIN_UI=false +LNBITS_ADMIN_UI=false # Restricts access, User IDs seperated by comma -LNBITS_ALLOWED_USERS="" +LNBITS_ALLOWED_USERS="" LNBITS_DEFAULT_WALLET_NAME="LNbits wallet" @@ -110,6 +111,6 @@ LNTIPS_API_KEY=LNTIPS_ADMIN_KEY LNTIPS_API_ENDPOINT=https://ln.tips # Cashu Mint -# Use a long-enough random (!) private key. +# Use a long-enough random (!) private key. # Once set, you cannot change this key as for now. CASHU_PRIVATE_KEY="SuperSecretPrivateKey" diff --git a/lnbits/db.py b/lnbits/db.py index bd42272d..00bf849b 100644 --- a/lnbits/db.py +++ b/lnbits/db.py @@ -86,7 +86,8 @@ class Connection(Compat): return raw_html # tuple to list and back to tuple - values = tuple([cleanhtml(l) for l in list(values)]) + value_list = [values] if isinstance(values, str) else list(values) + values = tuple([cleanhtml(l) for l in value_list]) return values async def fetchall(self, query: str, values: tuple = ()) -> list: diff --git a/lnbits/extensions/satspay/crud.py b/lnbits/extensions/satspay/crud.py index 7e34f6f8..bc364323 100644 --- a/lnbits/extensions/satspay/crud.py +++ b/lnbits/extensions/satspay/crud.py @@ -16,6 +16,7 @@ from .models import Charges, CreateCharge, SatsPayThemes async def create_charge(user: str, data: CreateCharge) -> Charges: + data = CreateCharge(**data.dict()) charge_id = urlsafe_short_hash() if data.onchainwallet: config = await get_config(user) diff --git a/lnbits/extensions/satspay/models.py b/lnbits/extensions/satspay/models.py index cfb3c7ac..4d30f915 100644 --- a/lnbits/extensions/satspay/models.py +++ b/lnbits/extensions/satspay/models.py @@ -6,6 +6,10 @@ from typing import Optional from fastapi.param_functions import Query from pydantic import BaseModel +DEFAULT_MEMPOOL_CONFIG = ( + '{"mempool_endpoint": "https://mempool.space", "network": "Mainnet"}' +) + class CreateCharge(BaseModel): onchainwallet: str = Query(None) @@ -17,7 +21,7 @@ class CreateCharge(BaseModel): custom_css: Optional[str] time: int = Query(..., ge=1) amount: int = Query(..., ge=1) - extra: str = "{}" + extra: str = DEFAULT_MEMPOOL_CONFIG class ChargeConfig(BaseModel): @@ -38,8 +42,13 @@ class Charges(BaseModel): webhook: Optional[str] completelink: Optional[str] completelinktext: Optional[str] = "Back to Merchant" +<<<<<<< HEAD extra: str = "{}" custom_css: Optional[str] +======= + custom_css: Optional[str] + extra: str = DEFAULT_MEMPOOL_CONFIG +>>>>>>> main time: int amount: int balance: int diff --git a/lnbits/extensions/satspay/views_api.py b/lnbits/extensions/satspay/views_api.py index 3836356a..21b4149d 100644 --- a/lnbits/extensions/satspay/views_api.py +++ b/lnbits/extensions/satspay/views_api.py @@ -5,6 +5,7 @@ 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, diff --git a/lnbits/extensions/watchonly/crud.py b/lnbits/extensions/watchonly/crud.py index c4a1df72..61e47cfe 100644 --- a/lnbits/extensions/watchonly/crud.py +++ b/lnbits/extensions/watchonly/crud.py @@ -203,7 +203,7 @@ async def update_address(id: str, **kwargs) -> Optional[Address]: f"""UPDATE watchonly.addresses SET {q} WHERE id = ? """, (*kwargs.values(), id), ) - row = await db.fetchone("SELECT * FROM watchonly.addresses WHERE id = ?", (id)) + row = await db.fetchone("SELECT * FROM watchonly.addresses WHERE id = ?", (id,)) return Address.from_row(row) if row else None