mirror of
https://github.com/lnbits/lnbits.git
synced 2025-12-15 07:01:46 +01:00
fix: separate lnbits_deactivated_extensions from lnbits_disabled_extensions`
This commit is contained in:
@@ -135,7 +135,7 @@ async def check_installed_extensions(app: FastAPI):
|
|||||||
installed = check_installed_extension(ext)
|
installed = check_installed_extension(ext)
|
||||||
if not installed:
|
if not installed:
|
||||||
await restore_installed_extension(app, ext)
|
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:
|
except:
|
||||||
logger.warning(f"Failed to re-install extension: {ext.id}")
|
logger.warning(f"Failed to re-install extension: {ext.id}")
|
||||||
|
|
||||||
|
|||||||
@@ -88,4 +88,4 @@ async def db_versions():
|
|||||||
async def load_disabled_extension_list() -> None:
|
async def load_disabled_extension_list() -> None:
|
||||||
"""Update list of extensions that have been explicitly disabled"""
|
"""Update list of extensions that have been explicitly disabled"""
|
||||||
inactive_extensions = await get_inactive_extensions()
|
inactive_extensions = await get_inactive_extensions()
|
||||||
settings.lnbits_disabled_extensions += inactive_extensions
|
settings.lnbits_deactivated_extensions += inactive_extensions
|
||||||
|
|||||||
@@ -90,7 +90,7 @@
|
|||||||
Manage</q-btn
|
Manage</q-btn
|
||||||
>
|
>
|
||||||
<q-toggle
|
<q-toggle
|
||||||
v-if="extension.isAvailable"
|
v-if="extension.isAvailable && extension.isInstalled"
|
||||||
:label="extension.isActive ? 'Activated': 'Deactivated' "
|
:label="extension.isActive ? 'Activated': 'Deactivated' "
|
||||||
color="secodary"
|
color="secodary"
|
||||||
v-model="extension.isActive"
|
v-model="extension.isActive"
|
||||||
|
|||||||
@@ -747,7 +747,8 @@ async def api_install_extension(
|
|||||||
await migrate_extension_database(extension, db_version)
|
await migrate_extension_database(extension, db_version)
|
||||||
|
|
||||||
await add_installed_extension(ext_info)
|
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
|
# mount routes for the new version
|
||||||
core_app_extra.register_new_ext_routes(extension)
|
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
|
# 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(
|
installed_ext = next(
|
||||||
(ext for ext in installable_extensions if ext.id == valid_ext_id), None
|
(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:
|
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:
|
for ext_info in extensions:
|
||||||
ext_info.clean_extension_files()
|
ext_info.clean_extension_files()
|
||||||
|
|||||||
@@ -103,17 +103,19 @@ async def extensions_install(
|
|||||||
try:
|
try:
|
||||||
ext_id = activate or deactivate
|
ext_id = activate or deactivate
|
||||||
if ext_id and user.admin:
|
if ext_id and user.admin:
|
||||||
if deactivate:
|
if deactivate and deactivate not in settings.lnbits_deactivated_extensions:
|
||||||
settings.lnbits_disabled_extensions += [deactivate]
|
settings.lnbits_deactivated_extensions += [deactivate]
|
||||||
elif activate:
|
elif activate:
|
||||||
settings.lnbits_disabled_extensions = list(
|
settings.lnbits_deactivated_extensions = list(
|
||||||
filter(lambda e: e != activate, settings.lnbits_disabled_extensions)
|
filter(
|
||||||
|
lambda e: e != activate, settings.lnbits_deactivated_extensions
|
||||||
|
)
|
||||||
)
|
)
|
||||||
await update_installed_extension_state(
|
await update_installed_extension_state(
|
||||||
ext_id=ext_id, active=activate != None
|
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()
|
inactive_extensions = await get_inactive_extensions()
|
||||||
extensions = list(
|
extensions = list(
|
||||||
map(
|
map(
|
||||||
@@ -402,7 +404,7 @@ async def toggle_extension(extension_to_enable, extension_to_disable, user_id):
|
|||||||
# check if extension exists
|
# check if extension exists
|
||||||
if extension_to_enable or extension_to_disable:
|
if extension_to_enable or extension_to_disable:
|
||||||
ext = 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(
|
raise HTTPException(
|
||||||
HTTPStatus.BAD_REQUEST, f"Extension '{ext}' doesn't exist."
|
HTTPStatus.BAD_REQUEST, f"Extension '{ext}' doesn't exist."
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -53,9 +53,7 @@ class Extension(NamedTuple):
|
|||||||
|
|
||||||
class ExtensionManager:
|
class ExtensionManager:
|
||||||
def __init__(self, include_disabled_exts=False):
|
def __init__(self, include_disabled_exts=False):
|
||||||
self._disabled: List[str] = (
|
self._disabled: List[str] = settings.lnbits_disabled_extensions
|
||||||
[] if include_disabled_exts else settings.lnbits_disabled_extensions
|
|
||||||
)
|
|
||||||
self._admin_only: List[str] = settings.lnbits_admin_extensions
|
self._admin_only: List[str] = settings.lnbits_admin_extensions
|
||||||
self._extension_folders: List[str] = [
|
self._extension_folders: List[str] = [
|
||||||
x[1] for x in os.walk(os.path.join(settings.lnbits_path, "extensions"))
|
x[1] for x in os.walk(os.path.join(settings.lnbits_path, "extensions"))
|
||||||
@@ -420,7 +418,7 @@ class InstalledExtensionMiddleware:
|
|||||||
path_type = None
|
path_type = None
|
||||||
|
|
||||||
# block path for all users if the extension is disabled
|
# 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(
|
response = JSONResponse(
|
||||||
status_code=HTTPStatus.NOT_FOUND,
|
status_code=HTTPStatus.NOT_FOUND,
|
||||||
content={"detail": f"Extension '{path_name}' disabled"},
|
content={"detail": f"Extension '{path_name}' disabled"},
|
||||||
@@ -450,11 +448,9 @@ class CreateExtension(BaseModel):
|
|||||||
source_repo: str
|
source_repo: str
|
||||||
|
|
||||||
|
|
||||||
def get_valid_extensions(include_disabled_exts=False) -> List[Extension]:
|
def get_valid_extensions() -> List[Extension]:
|
||||||
return [
|
return [
|
||||||
extension
|
extension for extension in ExtensionManager().extensions if extension.is_valid
|
||||||
for extension in ExtensionManager(include_disabled_exts).extensions
|
|
||||||
if extension.is_valid
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -108,7 +108,11 @@ def template_renderer(additional_folders: List = []) -> Jinja2Templates:
|
|||||||
t.env.globals["SITE_DESCRIPTION"] = settings.lnbits_site_description
|
t.env.globals["SITE_DESCRIPTION"] = settings.lnbits_site_description
|
||||||
t.env.globals["LNBITS_THEME_OPTIONS"] = settings.lnbits_theme_options
|
t.env.globals["LNBITS_THEME_OPTIONS"] = settings.lnbits_theme_options
|
||||||
t.env.globals["LNBITS_VERSION"] = settings.lnbits_commit
|
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:
|
if settings.lnbits_custom_logo:
|
||||||
t.env.globals["USE_CUSTOM_LOGO"] = settings.lnbits_custom_logo
|
t.env.globals["USE_CUSTOM_LOGO"] = settings.lnbits_custom_logo
|
||||||
|
|
||||||
|
|||||||
@@ -44,10 +44,16 @@ class ExtensionsSettings(LNbitsSettings):
|
|||||||
lnbits_admin_extensions: List[str] = Field(default=[])
|
lnbits_admin_extensions: List[str] = Field(default=[])
|
||||||
lnbits_disabled_extensions: List[str] = Field(default=[])
|
lnbits_disabled_extensions: List[str] = Field(default=[])
|
||||||
lnbits_extensions_manifests: 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_upgraded_extensions: List[str] = Field(default=[])
|
||||||
lnbits_ext_github_token: str = Field(
|
|
||||||
default=""
|
|
||||||
) # required due to GitHUb rate-limit
|
|
||||||
|
|
||||||
|
|
||||||
class ThemesSettings(LNbitsSettings):
|
class ThemesSettings(LNbitsSettings):
|
||||||
@@ -238,7 +244,11 @@ class SuperUserSettings(LNbitsSettings):
|
|||||||
|
|
||||||
|
|
||||||
class ReadOnlySettings(
|
class ReadOnlySettings(
|
||||||
EnvSettings, SaaSSettings, PersistenceSettings, SuperUserSettings
|
EnvSettings,
|
||||||
|
SaaSSettings,
|
||||||
|
PersistenceSettings,
|
||||||
|
SuperUserSettings,
|
||||||
|
InstalledExtensionsSettings,
|
||||||
):
|
):
|
||||||
lnbits_admin_ui: bool = Field(default=False)
|
lnbits_admin_ui: bool = Field(default=False)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user