diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 5715ee62..ba7ed2a9 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -34,7 +34,7 @@ from genericpath import isfile from loguru import logger from pydantic import BaseModel from pydantic.fields import Field -from sse_starlette.sse import EventSourceResponse +from sse_starlette.sse import EventSourceResponse, ServerSentEvent from starlette.responses import StreamingResponse from lnbits import bolt11, lnurl @@ -800,7 +800,13 @@ async def api_install_extension( # todo: is admin only # lnbits/extensions/satspay/upgrade/111/satspay/__init__.py - ext = Extension(code=extension.id, is_valid=True, is_admin_only=False, name=extension.name, version="111") + ext = Extension( + code=extension.id, + is_valid=True, + is_admin_only=False, + name=extension.name, + version="111", + ) # current_versions = await get_dbversions() # current_version = current_versions.get(ext.code, 0) @@ -809,6 +815,7 @@ async def api_install_extension( # disable by default await update_user_extension(user_id=USER_ID_ALL, extension=ext_id, active=False) settings.lnbits_disabled_extensions += [ext_id] + settings.LNBITS_UPGRADED_EXTENSIONS += [f"{ext.version}/{ext.code}"] #todo: re-visit # mount routes at the very end core_app_extra.register_new_ext_routes(ext) diff --git a/lnbits/helpers.py b/lnbits/helpers.py index 346ebc1b..9dec9566 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -94,6 +94,17 @@ class EnabledExtensionMiddleware: await response(scope, receive, send) return + # re-route trafic if the extension has been upgraded + upgraded_extensions = list( + filter( + lambda ext: ext.endswith(f"/{pathname}"), g().config.LNBITS_UPGRADED_EXTENSIONS) + ) + if len(upgraded_extensions) != 0: + upgrade_path = upgraded_extensions[0] + tail = "/".join(rest) + scope["path"] = f"/upgrades/{upgrade_path}/{tail}" + + await self.app(scope, receive, send) diff --git a/lnbits/settings.py b/lnbits/settings.py index d00d038d..44113d32 100644 --- a/lnbits/settings.py +++ b/lnbits/settings.py @@ -41,7 +41,7 @@ class UsersSettings(LNbitsSettings): lnbits_admin_extensions: List[str] = Field(default=[]) lnbits_disabled_extensions: List[str] = Field(default=[]) lnbits_extensions_manifests: List[str] = Field(default=[]) - + # LNBITS_UPGRADED_EXTENSIONS: List[str] = [] # todo: class ThemesSettings(LNbitsSettings): lnbits_site_title: str = Field(default="LNbits")