feat: complete use of LNBITS_EXTENSIONS_DEACTIVATE_ALL (#2341)

- add to admin ui
- move to `ExtensionsSettings`
- hide left navbar when disabled
- do not register extension routes on startup
- do not check for installed extensions on startup
- reafctor into register_all_ext_routes
This commit is contained in:
dni ⚡ 2024-03-26 11:44:33 +01:00 committed by GitHub
parent 86821f4606
commit b9f0af0e79
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 36 additions and 19 deletions

View File

@ -285,17 +285,6 @@ async def restore_installed_extension(app: FastAPI, ext: InstallableExtension):
ext.nofiy_upgrade()
def register_routes(app: FastAPI) -> None:
"""Register FastAPI routes / LNbits extensions."""
init_core_routers(app)
for ext in get_valid_extensions(False):
try:
register_ext_routes(app, ext)
except Exception as e:
logger.error(f"Could not load extension `{ext.code}`: {str(e)}")
def register_custom_extensions_path():
if settings.has_default_extension_path:
return
@ -371,6 +360,14 @@ def register_ext_routes(app: FastAPI, ext: Extension) -> None:
app.include_router(router=ext_route, prefix=prefix)
def register_all_ext_routes(app: FastAPI):
for ext in get_valid_extensions(False):
try:
register_ext_routes(app, ext)
except Exception as e:
logger.error(f"Could not load extension `{ext.code}`: {str(e)}")
def register_startup(app: FastAPI):
@app.on_event("startup")
async def lnbits_startup():
@ -396,11 +393,12 @@ def register_startup(app: FastAPI):
# initialize funding source
await check_funding_source()
# check extensions after restart
await check_installed_extensions(app)
init_core_routers(app)
# register core and extension routes
register_routes(app)
# check extensions after restart
if not settings.lnbits_extensions_deactivate_all:
await check_installed_extensions(app)
register_all_ext_routes(app)
if settings.lnbits_admin_ui:
initialize_server_logger()

View File

@ -60,6 +60,21 @@
</div>
<div class="col-12 col-md-6">
<p>Miscellaneous</p>
<q-item tag="label" v-ripple>
<q-item-section>
<q-item-label>Disable Extensions</q-item-label>
<q-item-label caption>Disables all extensions</q-item-label>
</q-item-section>
<q-item-section avatar>
<q-toggle
size="md"
v-model="formData.lnbits_extensions_deactivate_all"
checked-icon="check"
color="green"
unchecked-icon="clear"
/>
</q-item-section>
</q-item>
<q-item tag="label" v-ripple>
<q-item-section>
<q-item-label>Hide API</q-item-label>

View File

@ -64,6 +64,9 @@ def template_renderer(additional_folders: Optional[List] = None) -> Jinja2Templa
t.env.globals["LNBITS_NEW_ACCOUNTS_ALLOWED"] = settings.new_accounts_allowed
t.env.globals["LNBITS_AUTH_METHODS"] = settings.auth_allowed_methods
t.env.globals["LNBITS_ADMIN_UI"] = settings.lnbits_admin_ui
t.env.globals["LNBITS_EXTENSIONS_DEACTIVATE_ALL"] = (
settings.lnbits_extensions_deactivate_all
)
t.env.globals["LNBITS_SERVICE_FEE"] = settings.lnbits_service_fee
t.env.globals["LNBITS_SERVICE_FEE_MAX"] = settings.lnbits_service_fee_max
t.env.globals["LNBITS_SERVICE_FEE_WALLET"] = settings.lnbits_service_fee_wallet

View File

@ -47,6 +47,7 @@ class UsersSettings(LNbitsSettings):
class ExtensionsSettings(LNbitsSettings):
lnbits_admin_extensions: List[str] = Field(default=[])
lnbits_extensions_deactivate_all: bool = Field(default=False)
lnbits_extensions_manifests: List[str] = Field(
default=[
"https://raw.githubusercontent.com/lnbits/lnbits-extensions/main/extensions.json"
@ -375,7 +376,6 @@ class EnvSettings(LNbitsSettings):
log_rotation: str = Field(default="100 MB")
log_retention: str = Field(default="3 months")
server_startup_time: int = Field(default=time())
lnbits_extensions_deactivate_all: bool = Field(default=False)
cleanup_wallets_days: int = Field(default=90)
@property

File diff suppressed because one or more lines are too long

View File

@ -170,7 +170,7 @@ Vue.component('lnbits-extension-list', {
})
Vue.component('lnbits-manage', {
props: ['showAdmin', 'showNode'],
props: ['showAdmin', 'showNode', 'showExtensions'],
data: function () {
return {
extensions: [],
@ -198,7 +198,7 @@ Vue.component('lnbits-manage', {
</q-item-section>
</q-item>
</div>
<q-item clickable tag="a" href="/extensions">
<q-item v-if="showExtensions" clickable tag="a" href="/extensions">
<q-item-section side>
<q-icon name="extension" color="grey-5" size="md"></q-icon>
</q-item-section>

View File

@ -173,6 +173,7 @@
<lnbits-manage
:show-admin="'{{LNBITS_ADMIN_UI}}' == 'True'"
:show-node="'{{LNBITS_NODE_UI}}' == 'True'"
:show-extensions="'{{LNBITS_EXTENSIONS_DEACTIVATE_ALL}}' == 'True'"
></lnbits-manage>
<lnbits-extension-list class="q-pb-xl"></lnbits-extension-list>
</q-drawer>