mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2025-02-23 22:47:05 +01:00
fix: separate lnbits_deactivated_extensions
from lnbits_disabled_extensions
`
This commit is contained in:
parent
dea63ca2db
commit
478d74efc8
8 changed files with 39 additions and 25 deletions
|
@ -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}")
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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."
|
||||
)
|
||||
|
|
|
@ -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
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue