diff --git a/lnbits/core/crud/extensions.py b/lnbits/core/crud/extensions.py index e4fbd7e80..3a98fa8ed 100644 --- a/lnbits/core/crud/extensions.py +++ b/lnbits/core/crud/extensions.py @@ -1,3 +1,5 @@ +import re + from lnbits.core.db import db from lnbits.core.models.extensions import ( InstallableExtension, @@ -49,7 +51,8 @@ async def drop_extension_db(ext_id: str, conn: Connection | None = None) -> None ) # Check that 'ext_id' is a valid extension id and not a malicious string if not row: - raise Exception(f"Extension '{ext_id}' db version cannot be found") + if not re.fullmatch(r"[a-zA-Z_][a-zA-Z0-9_]*", ext_id): + raise Exception(f"Extension '{ext_id}' db version cannot be found") is_file_based_db = await Database.clean_ext_db_files(ext_id) if is_file_based_db: diff --git a/lnbits/core/models/extensions.py b/lnbits/core/models/extensions.py index 37c99941c..5bbd94c07 100644 --- a/lnbits/core/models/extensions.py +++ b/lnbits/core/models/extensions.py @@ -873,3 +873,6 @@ def icon_to_github_url(source_repo: str, path: str | None) -> str: _, _, *rest = path.split("/") tail = "/".join(rest) return f"https://github.com/{source_repo}/raw/main/{tail}" + + +ExtensionConfig.update_forward_refs(ExtensionPermission=ExtensionPermission) diff --git a/lnbits/core/services/extensions.py b/lnbits/core/services/extensions.py index 02eed304a..58d21f7ba 100644 --- a/lnbits/core/services/extensions.py +++ b/lnbits/core/services/extensions.py @@ -10,6 +10,7 @@ from lnbits.core.crud import ( get_db_version, get_installed_extension, update_installed_extension_state, + update_migration_version, ) from lnbits.core.crud.extensions import ( get_installed_extensions, @@ -53,6 +54,9 @@ async def install_extension( else: await update_installed_extension(ext_info) + if ext_info.meta and ext_info.meta.extension_type == "wasm": + await update_migration_version(None, ext_info.id, 0) + extension = Extension.from_installable_ext(ext_info) if extension.is_upgrade_extension: # call stop while the old routes are still active