Merges extensions into one page (#1656)
* Merged extensions into one page * Bundle files updated * Fixed install bug * feat: client side version compatibility check * fix: hide `Activated/Deactivated` toggle for non-admins * feat: translate labels to `EN` * feat: add other language translations * chore: update bundle for i18n * feat: check extension version server-side * feat: show warning message * refactor: nicer mapping Co-authored-by: dni ⚡ <office@dnilabs.com> * chore: code format * chore: extra log * feat: check_latest_version of ext * feat: show tooltip for new version * chore: `make bundle` * chore: `mypy` * chore: code clean-up * feat: show version in badge (spacing is fine) * chore: make bundle * feat: check `min_lnbits_version` and `warning` in `config.json` * chore: code formatting * chore: downgrade log level * fix: extract `ExtensionsInstallSettings` as readonly * fix: do not show installed and deactivated extensions * chore: format * fix: `Enable` button tooltip * fix: set installed release after installation * fix: hide deactivated extensions from regular users * bundle fundle * bundle fundle --------- Co-authored-by: Vlad Stan <stan.v.vlad@gmail.com> Co-authored-by: dni ⚡ <office@dnilabs.com>
This commit is contained in:
@@ -48,6 +48,7 @@ from lnbits.extension_manager import (
|
||||
Extension,
|
||||
ExtensionRelease,
|
||||
InstallableExtension,
|
||||
fetch_github_release_config,
|
||||
get_valid_extensions,
|
||||
)
|
||||
from lnbits.helpers import generate_filter_params_openapi, url_for
|
||||
@@ -779,6 +780,11 @@ async def api_install_extension(
|
||||
status_code=HTTPStatus.NOT_FOUND, detail="Release not found"
|
||||
)
|
||||
|
||||
if not release.is_version_compatible:
|
||||
raise HTTPException(
|
||||
status_code=HTTPStatus.BAD_REQUEST, detail="Incompatible extension version"
|
||||
)
|
||||
|
||||
ext_info = InstallableExtension(
|
||||
id=data.ext_id, name=data.ext_id, installed_release=release, icon=release.icon
|
||||
)
|
||||
@@ -851,6 +857,7 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin)
|
||||
ext_info.clean_extension_files()
|
||||
await delete_installed_extension(ext_id=ext_info.id)
|
||||
|
||||
logger.success(f"Extension '{ext_id}' uninstalled.")
|
||||
except Exception as ex:
|
||||
raise HTTPException(
|
||||
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex)
|
||||
@@ -874,6 +881,27 @@ async def get_extension_releases(ext_id: str):
|
||||
)
|
||||
|
||||
|
||||
@core_app.get(
|
||||
"/api/v1/extension/release/{org}/{repo}/{tag_name}",
|
||||
dependencies=[Depends(check_admin)],
|
||||
)
|
||||
async def get_extension_release(org: str, repo: str, tag_name: str):
|
||||
try:
|
||||
config = await fetch_github_release_config(org, repo, tag_name)
|
||||
if not config:
|
||||
return {}
|
||||
|
||||
return {
|
||||
"min_lnbits_version": config.min_lnbits_version,
|
||||
"is_version_compatible": config.is_version_compatible(),
|
||||
"warning": config.warning,
|
||||
}
|
||||
except Exception as ex:
|
||||
raise HTTPException(
|
||||
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex)
|
||||
)
|
||||
|
||||
|
||||
# TINYURL
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user