add superuser and refactor check_admin function, also put it into satspay

This commit is contained in:
dni ⚡
2022-12-05 20:41:23 +01:00
parent 9d67c8e4e5
commit c56a31e6f5
10 changed files with 42 additions and 57 deletions
+4 -1
View File
@@ -40,7 +40,10 @@ async def get_admin_settings() -> AdminSettings:
async def update_admin_settings(data: UpdateSettings) -> Optional[AdminSettings]:
fields = []
for key, value in data.dict().items():
# TODO: issue typens?
# somehow data, is type dict, but should be type UpdateSettings
# for key, value in data.dict().items(): #type: ignore
for key, value in data.items(): # type: ignore
if not key in readonly_variables:
setattr(settings, key, value)
if type(value) == list:
+1
View File
@@ -2,6 +2,7 @@ async def m001_create_admin_settings_table(db):
await db.execute(
"""
CREATE TABLE IF NOT EXISTS admin.settings (
super_user TEXT,
lnbits_admin_users TEXT,
lnbits_allowed_users TEXT,
lnbits_disabled_extensions TEXT,
+1
View File
@@ -76,3 +76,4 @@ class UpdateSettings(BaseModel):
class AdminSettings(UpdateSettings):
lnbits_allowed_funding_sources: Optional[List[str]]
super_user: Optional[str]
+6 -11
View File
@@ -1,18 +1,15 @@
import json
from http import HTTPStatus
from fastapi import Response
from fastapi.param_functions import Depends
from fastapi.templating import Jinja2Templates
from loguru import logger
from starlette.exceptions import HTTPException
from starlette.requests import Request
from starlette.responses import HTMLResponse
from lnbits.core.models import User
from lnbits.decorators import check_user_exists
from lnbits.decorators import check_admin
from lnbits.extensions.satspay.helpers import public_charge
from lnbits.settings import settings
from . import satspay_ext, satspay_renderer
from .crud import get_charge, get_theme
@@ -21,17 +18,15 @@ templates = Jinja2Templates(directory="templates")
@satspay_ext.get("/", response_class=HTMLResponse)
async def index(request: Request, user: User = Depends(check_user_exists)):
admin = False
if settings.lnbits_admin_users and user.id in settings.lnbits_admin_users:
admin = True
async def index(request: Request, user: User = Depends(check_admin)):
return satspay_renderer().TemplateResponse(
"satspay/index.html", {"request": request, "user": user.dict(), "admin": admin}
"satspay/index.html",
{"request": request, "user": user.dict(), "admin": user.admin},
)
@satspay_ext.get("/{charge_id}", response_class=HTMLResponse)
async def display(request: Request, charge_id: str):
async def display_charge(request: Request, charge_id: str):
charge = await get_charge(charge_id)
if not charge:
raise HTTPException(
@@ -50,7 +45,7 @@ async def display(request: Request, charge_id: str):
@satspay_ext.get("/css/{css_id}")
async def display(css_id: str, response: Response):
async def display_css(css_id: str):
theme = await get_theme(css_id)
if theme:
return Response(content=theme.custom_css, media_type="text/css")
+6 -13
View File
@@ -1,19 +1,19 @@
import json
from http import HTTPStatus
from fastapi import Query
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,
check_admin,
get_key_type,
require_admin_key,
require_invoice_key,
)
from lnbits.extensions.satspay import satspay_ext
from lnbits.settings import settings
from .crud import (
check_address_balance,
@@ -138,21 +138,14 @@ async def api_charge_balance(charge_id):
#############################THEMES##########################
@satspay_ext.post("/api/v1/themes")
@satspay_ext.post("/api/v1/themes/{css_id}")
@satspay_ext.post("/api/v1/themes", dependencies=[Depends(check_admin)])
@satspay_ext.post("/api/v1/themes/{css_id}", dependencies=[Depends(check_admin)])
async def api_themes_save(
data: SatsPayThemes,
wallet: WalletTypeInfo = Depends(require_invoice_key),
css_id: str = None,
css_id: str = Query(...),
):
if (
settings.lnbits_admin_users
and wallet.wallet.user not in settings.lnbits_admin_users
):
raise HTTPException(
status_code=HTTPStatus.FORBIDDEN,
detail="Only server admins can create themes.",
)
if css_id:
theme = await save_theme(css_id=css_id, data=data)
else: