From 1b675f295bd2ec1a69ae972cce9b70f0371eefdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Fri, 21 Oct 2022 11:13:40 +0200 Subject: [PATCH] add get settings endpoint with only values you can also save --- lnbits/app.py | 6 +---- lnbits/extensions/admin/crud.py | 12 +++++++++- lnbits/extensions/admin/models.py | 6 ++++- .../admin/templates/admin/index.html | 22 +++++++++++++++---- lnbits/extensions/admin/views_api.py | 7 +++++- lnbits/server.py | 1 + 6 files changed, 42 insertions(+), 12 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index 49ad8d77d..959a81689 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -62,10 +62,6 @@ def create_app() -> FastAPI: CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"] ) - # TODO: why those 2? - g().config = settings - g().base_url = f"http://{settings.host}:{settings.port}" - app.add_middleware(GZipMiddleware, minimum_size=1000) register_startup(app) @@ -174,7 +170,7 @@ def register_assets(app: FastAPI): @app.on_event("startup") async def vendored_assets_variable(): - if g().config.debug: + if settings.debug: g().VENDORED_JS = map(url_for_vendored, get_js_vendored()) g().VENDORED_CSS = map(url_for_vendored, get_css_vendored()) else: diff --git a/lnbits/extensions/admin/crud.py b/lnbits/extensions/admin/crud.py index cc937b5e9..2ce916127 100644 --- a/lnbits/extensions/admin/crud.py +++ b/lnbits/extensions/admin/crud.py @@ -6,7 +6,7 @@ from lnbits.settings import Settings, read_only_variables from lnbits.tasks import internal_invoice_queue from . import db -from .models import UpdateSettings +from .models import AdminSettings, UpdateSettings async def update_wallet_balance(wallet_id: str, amount: int) -> str: @@ -26,6 +26,16 @@ async def update_wallet_balance(wallet_id: str, amount: int) -> str: await internal_invoice_queue.put(internal_id) +async def get_settings() -> AdminSettings: + row = await db.fetchone("SELECT * FROM admin.settings") + all_settings = Settings(**row) + settings = AdminSettings() + for key, value in row.items(): + if hasattr(settings, key): + setattr(settings, key, getattr(all_settings, key)) + return settings + + async def update_settings(data: UpdateSettings) -> Settings: fields = [] for key, value in data.dict(exclude_none=True).items(): diff --git a/lnbits/extensions/admin/models.py b/lnbits/extensions/admin/models.py index d9d2b22ff..318116594 100644 --- a/lnbits/extensions/admin/models.py +++ b/lnbits/extensions/admin/models.py @@ -1,4 +1,4 @@ -from typing import List +from typing import List, Optional from fastapi import Query from pydantic import BaseModel @@ -55,3 +55,7 @@ class UpdateSettings(BaseModel): opennode_key: str = Query(None) spark_url: str = Query(None) spark_token: str = Query(None) + + +class AdminSettings(UpdateSettings): + lnbits_allowed_funding_sources: Optional[List[str]] diff --git a/lnbits/extensions/admin/templates/admin/index.html b/lnbits/extensions/admin/templates/admin/index.html index 7d268301b..103912615 100644 --- a/lnbits/extensions/admin/templates/admin/index.html +++ b/lnbits/extensions/admin/templates/admin/index.html @@ -314,11 +314,8 @@ } }, created: function () { - this.settings = JSON.parse('{{ settings|tojson|safe }}') //DB data + this.getSettings() this.balance = +'{{ balance|safe }}' - this.formData = _.clone(this.settings) //model - this.updateFundingData() - console.log(this.settings) }, computed: { checkChanges() { @@ -416,6 +413,23 @@ }) }) }, + getSettings() { + LNbits.api + .request( + 'GET', + '/admin/api/v1/settings/?usr=' + this.g.user.id, + this.g.user.wallets[0].adminkey + ) + .then(response => { + this.settings = response.data + this.formData = _.clone(this.settings) + this.updateFundingData() + console.log(this.settings) + }) + .catch(function (error) { + LNbits.utils.notifyApiError(error) + }) + }, updateSettings() { let data = { ...this.formData diff --git a/lnbits/extensions/admin/views_api.py b/lnbits/extensions/admin/views_api.py index 63ed5b3ca..57d62ed49 100644 --- a/lnbits/extensions/admin/views_api.py +++ b/lnbits/extensions/admin/views_api.py @@ -10,7 +10,7 @@ from lnbits.extensions.admin import admin_ext from lnbits.extensions.admin.models import UpdateSettings from lnbits.server import server_restart -from .crud import delete_settings, update_settings, update_wallet_balance +from .crud import delete_settings, get_settings, update_settings, update_wallet_balance @admin_ext.get( @@ -21,6 +21,11 @@ async def api_restart_server() -> dict[str, str]: return {"status": "Success"} +@admin_ext.get("/api/v1/settings/", dependencies=[Depends(check_admin)]) +async def api_get_settings() -> UpdateSettings: + return await get_settings() + + @admin_ext.put( "/api/v1/topup/", status_code=HTTPStatus.OK, dependencies=[Depends(check_admin)] ) diff --git a/lnbits/server.py b/lnbits/server.py index eb7c12b16..ecf7ff62c 100644 --- a/lnbits/server.py +++ b/lnbits/server.py @@ -1,4 +1,5 @@ import uvloop + uvloop.install() import multiprocessing as mp