feat: add default extension install (LNBITS_EXTENSIONS_DEFAULT_INSTALL)

This commit is contained in:
Vlad Stan
2023-02-16 10:48:12 +02:00
parent ef3beaaccf
commit 61fb44a04e
3 changed files with 33 additions and 4 deletions

View File

@@ -36,6 +36,10 @@ LNBITS_DISABLED_EXTENSIONS="amilk"
# GitHub has rate-limits for its APIs. The limit can be increased specifying a GITHUB_TOKEN # GitHub has rate-limits for its APIs. The limit can be increased specifying a GITHUB_TOKEN
# LNBITS_EXT_GITHUB_TOKEN=github_pat_xxxxxxxxxxxxxxxxxx # LNBITS_EXT_GITHUB_TOKEN=github_pat_xxxxxxxxxxxxxxxxxx
# Extensions to be installed by default. If an extension from this list is uninstalled then it will be re-installed on the next restart.
# The extension must be removed from this list in order to not be re-installed.
LNBITS_EXTENSIONS_DEFAULT_INSTALL="tpos"
# Database: to use SQLite, specify LNBITS_DATA_FOLDER # Database: to use SQLite, specify LNBITS_DATA_FOLDER
# to use PostgreSQL, specify LNBITS_DATABASE_URL=postgres://... # to use PostgreSQL, specify LNBITS_DATABASE_URL=postgres://...
# to use CockroachDB, specify LNBITS_DATABASE_URL=cockroachdb://... # to use CockroachDB, specify LNBITS_DATABASE_URL=cockroachdb://...

View File

@@ -8,7 +8,7 @@ import signal
import sys import sys
import traceback import traceback
from http import HTTPStatus from http import HTTPStatus
from typing import Callable from typing import Callable, List
from fastapi import FastAPI, Request from fastapi import FastAPI, Request
from fastapi.exceptions import HTTPException, RequestValidationError from fastapi.exceptions import HTTPException, RequestValidationError
@@ -24,7 +24,7 @@ from lnbits.core.tasks import register_task_listeners
from lnbits.settings import get_wallet_class, set_wallet_class, settings from lnbits.settings import get_wallet_class, set_wallet_class, settings
from .commands import db_versions, load_disabled_extension_list, migrate_databases from .commands import db_versions, load_disabled_extension_list, migrate_databases
from .core import core_app, core_app_extra from .core import add_installed_extension, core_app, core_app_extra
from .core.services import check_admin_settings from .core.services import check_admin_settings
from .core.views.generic import core_html_routes from .core.views.generic import core_html_routes
from .extension_manager import ( from .extension_manager import (
@@ -129,7 +129,7 @@ async def check_installed_extensions(app: FastAPI):
""" """
shutil.rmtree(os.path.join("lnbits", "upgrades"), True) shutil.rmtree(os.path.join("lnbits", "upgrades"), True)
await load_disabled_extension_list() await load_disabled_extension_list()
installed_extensions = await get_installed_extensions() installed_extensions = await build_all_installed_extensions_list()
for ext in installed_extensions: for ext in installed_extensions:
try: try:
@@ -142,6 +142,31 @@ async def check_installed_extensions(app: FastAPI):
logger.warning(f"Failed to re-install extension: {ext.id}") logger.warning(f"Failed to re-install extension: {ext.id}")
async def build_all_installed_extensions_list() -> List[InstallableExtension]:
"""
Returns a list of all the installed extensions plus the extensions that
MUST be installed by default (see LNBITS_EXTENSIONS_DEFAULT_INSTALL).
"""
installed_extensions = await get_installed_extensions()
installed_extensions_ids = [e.id for e in installed_extensions]
for ext_id in settings.lnbits_extensions_default_install:
if ext_id in installed_extensions_ids:
continue
ext_releases = await InstallableExtension.get_extension_releases(ext_id)
release = ext_releases[0] if len(ext_releases) else None
if release:
ext_info = InstallableExtension(
id=ext_id, name=ext_id, installed_release=release, icon=release.icon
)
installed_extensions.append(ext_info)
await add_installed_extension(ext_info)
return installed_extensions
def check_installed_extension(ext: InstallableExtension) -> bool: def check_installed_extension(ext: InstallableExtension) -> bool:
if ext.has_installed_version: if ext.has_installed_version:
return True return True

View File

@@ -49,7 +49,7 @@ class ExtensionsSettings(LNbitsSettings):
"https://raw.githubusercontent.com/lnbits/lnbits-extensions/main/extensions.json" "https://raw.githubusercontent.com/lnbits/lnbits-extensions/main/extensions.json"
] ]
) )
lnbits_extensions_default_install: List[str] = Field(default=[])
# required due to GitHUb rate-limit # required due to GitHUb rate-limit
lnbits_ext_github_token: str = Field(default="") lnbits_ext_github_token: str = Field(default="")