fix: separate lnbits_deactivated_extensions from lnbits_disabled_extensions`

This commit is contained in:
Vlad Stan 2023-01-20 09:39:27 +02:00
parent dea63ca2db
commit 478d74efc8
8 changed files with 39 additions and 25 deletions

View file

@ -135,7 +135,7 @@ async def check_installed_extensions(app: FastAPI):
installed = check_installed_extension(ext)
if not installed:
await restore_installed_extension(app, ext)
logger.warning(f"✔️ Successfully re-installed extension: {ext.id}")
logger.info(f"✔️ Successfully re-installed extension: {ext.id}")
except:
logger.warning(f"Failed to re-install extension: {ext.id}")

View file

@ -88,4 +88,4 @@ async def db_versions():
async def load_disabled_extension_list() -> None:
"""Update list of extensions that have been explicitly disabled"""
inactive_extensions = await get_inactive_extensions()
settings.lnbits_disabled_extensions += inactive_extensions
settings.lnbits_deactivated_extensions += inactive_extensions

View file

@ -90,7 +90,7 @@
Manage</q-btn
>
<q-toggle
v-if="extension.isAvailable"
v-if="extension.isAvailable && extension.isInstalled"
:label="extension.isActive ? 'Activated': 'Deactivated' "
color="secodary"
v-model="extension.isActive"

View file

@ -747,7 +747,8 @@ async def api_install_extension(
await migrate_extension_database(extension, db_version)
await add_installed_extension(ext_info)
settings.lnbits_disabled_extensions += [data.ext_id]
if data.ext_id not in settings.lnbits_deactivated_extensions:
settings.lnbits_deactivated_extensions += [data.ext_id]
# mount routes for the new version
core_app_extra.register_new_ext_routes(extension)
@ -778,7 +779,7 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin)
)
# check that other extensions do not depend on this one
for valid_ext_id in list(map(lambda e: e.code, get_valid_extensions(True))):
for valid_ext_id in list(map(lambda e: e.code, get_valid_extensions())):
installed_ext = next(
(ext for ext in installable_extensions if ext.id == valid_ext_id), None
)
@ -789,7 +790,8 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin)
)
try:
settings.lnbits_disabled_extensions += [ext_id]
if ext_id not in settings.lnbits_deactivated_extensions:
settings.lnbits_deactivated_extensions += [ext_id]
for ext_info in extensions:
ext_info.clean_extension_files()

View file

@ -103,17 +103,19 @@ async def extensions_install(
try:
ext_id = activate or deactivate
if ext_id and user.admin:
if deactivate:
settings.lnbits_disabled_extensions += [deactivate]
if deactivate and deactivate not in settings.lnbits_deactivated_extensions:
settings.lnbits_deactivated_extensions += [deactivate]
elif activate:
settings.lnbits_disabled_extensions = list(
filter(lambda e: e != activate, settings.lnbits_disabled_extensions)
settings.lnbits_deactivated_extensions = list(
filter(
lambda e: e != activate, settings.lnbits_deactivated_extensions
)
)
await update_installed_extension_state(
ext_id=ext_id, active=activate != None
)
all_extensions = list(map(lambda e: e.code, get_valid_extensions(True)))
all_extensions = list(map(lambda e: e.code, get_valid_extensions()))
inactive_extensions = await get_inactive_extensions()
extensions = list(
map(
@ -402,7 +404,7 @@ async def toggle_extension(extension_to_enable, extension_to_disable, user_id):
# check if extension exists
if extension_to_enable or extension_to_disable:
ext = extension_to_enable or extension_to_disable
if ext not in [e.code for e in get_valid_extensions(True)]:
if ext not in [e.code for e in get_valid_extensions()]:
raise HTTPException(
HTTPStatus.BAD_REQUEST, f"Extension '{ext}' doesn't exist."
)

View file

@ -53,9 +53,7 @@ class Extension(NamedTuple):
class ExtensionManager:
def __init__(self, include_disabled_exts=False):
self._disabled: List[str] = (
[] if include_disabled_exts else settings.lnbits_disabled_extensions
)
self._disabled: List[str] = settings.lnbits_disabled_extensions
self._admin_only: List[str] = settings.lnbits_admin_extensions
self._extension_folders: List[str] = [
x[1] for x in os.walk(os.path.join(settings.lnbits_path, "extensions"))
@ -420,7 +418,7 @@ class InstalledExtensionMiddleware:
path_type = None
# block path for all users if the extension is disabled
if path_name in settings.lnbits_disabled_extensions:
if path_name in settings.lnbits_deactivated_extensions:
response = JSONResponse(
status_code=HTTPStatus.NOT_FOUND,
content={"detail": f"Extension '{path_name}' disabled"},
@ -450,11 +448,9 @@ class CreateExtension(BaseModel):
source_repo: str
def get_valid_extensions(include_disabled_exts=False) -> List[Extension]:
def get_valid_extensions() -> List[Extension]:
return [
extension
for extension in ExtensionManager(include_disabled_exts).extensions
if extension.is_valid
extension for extension in ExtensionManager().extensions if extension.is_valid
]

View file

@ -108,7 +108,11 @@ def template_renderer(additional_folders: List = []) -> Jinja2Templates:
t.env.globals["SITE_DESCRIPTION"] = settings.lnbits_site_description
t.env.globals["LNBITS_THEME_OPTIONS"] = settings.lnbits_theme_options
t.env.globals["LNBITS_VERSION"] = settings.lnbits_commit
t.env.globals["EXTENSIONS"] = get_valid_extensions()
t.env.globals["EXTENSIONS"] = [
e
for e in get_valid_extensions()
if e.code not in settings.lnbits_deactivated_extensions
]
if settings.lnbits_custom_logo:
t.env.globals["USE_CUSTOM_LOGO"] = settings.lnbits_custom_logo

View file

@ -44,10 +44,16 @@ class ExtensionsSettings(LNbitsSettings):
lnbits_admin_extensions: List[str] = Field(default=[])
lnbits_disabled_extensions: List[str] = Field(default=[])
lnbits_extensions_manifests: List[str] = Field(default=[])
# required due to GitHUb rate-limit
lnbits_ext_github_token: str = Field(default="")
class InstalledExtensionsSettings(LNbitsSettings):
# installed extensions that have been deactivated
lnbits_deactivated_extensions: List[str] = Field(default=[])
# upgraded extensions that require API redirects
lnbits_upgraded_extensions: List[str] = Field(default=[])
lnbits_ext_github_token: str = Field(
default=""
) # required due to GitHUb rate-limit
class ThemesSettings(LNbitsSettings):
@ -238,7 +244,11 @@ class SuperUserSettings(LNbitsSettings):
class ReadOnlySettings(
EnvSettings, SaaSSettings, PersistenceSettings, SuperUserSettings
EnvSettings,
SaaSSettings,
PersistenceSettings,
SuperUserSettings,
InstalledExtensionsSettings,
):
lnbits_admin_ui: bool = Field(default=False)