diff --git a/lnbits/core/models/extensions.py b/lnbits/core/models/extensions.py index 44c014b7e..c482cbd61 100644 --- a/lnbits/core/models/extensions.py +++ b/lnbits/core/models/extensions.py @@ -7,6 +7,7 @@ import os import shutil import zipfile from asyncio.tasks import create_task +from collections.abc import Mapping from pathlib import Path from typing import Any @@ -83,6 +84,14 @@ class ExtensionPermission(BaseModel): description: str | None = None policy: dict[str, Any] | None = None + @staticmethod + def list_from_config(config_json: Mapping[str, Any]) -> list[ExtensionPermission]: + return [ + ExtensionPermission.parse_obj(permission) + for permission in config_json.get("permissions") or [] + if isinstance(permission, dict) and permission.get("id") + ] + class ExtensionConfig(BaseModel): name: str @@ -642,11 +651,7 @@ class InstallableExtension(BaseModel): version=version, short_description=config_json.get("short_description"), icon=config_json.get("tile"), - permissions=[ - ExtensionPermission.parse_obj(permission) - for permission in config_json.get("permissions") or [] - if isinstance(permission, dict) and permission.get("id") - ], + permissions=ExtensionPermission.list_from_config(config_json), meta=ExtensionMeta( installed_release=ExtensionRelease( name=ext_id, diff --git a/lnbits/core/services/extensions.py b/lnbits/core/services/extensions.py index d327b2aca..86c904f4d 100644 --- a/lnbits/core/services/extensions.py +++ b/lnbits/core/services/extensions.py @@ -121,11 +121,7 @@ def _validate_extension_permissions( requested_permissions = validate_extension_permissions( ext_info.id, - [ - ExtensionPermission.parse_obj(permission) - for permission in extension_config.get("permissions") or [] - if isinstance(permission, dict) and permission.get("id") - ], + ExtensionPermission.list_from_config(extension_config), ) if not requested_permissions: return []