This commit is contained in:
Arc
2026-05-01 12:28:43 +01:00
parent 4341c329fd
commit ef47f1660d
4 changed files with 21 additions and 19 deletions
+3 -7
View File
@@ -597,9 +597,7 @@ class InstallableExtension(BaseModel):
)
source_repo = f"{github_release.organisation}/{github_release.repository}"
admin_only = github_release.admin_only or config.admin_only
super_user_only = (
github_release.super_user_only or config.super_user_only
)
super_user_only = github_release.super_user_only or config.super_user_only
latest_extension_release = ExtensionRelease.from_github_release(
source_repo, latest_release
)
@@ -672,10 +670,8 @@ class InstallableExtension(BaseModel):
min_lnbits_version=config_json.get("min_lnbits_version"),
max_lnbits_version=config_json.get("max_lnbits_version"),
admin_only=config_json.get("admin_only", False),
super_user_only=config_json.get(
"super_user_only", False
),
)
super_user_only=config_json.get("super_user_only", False),
),
),
)
+14 -8
View File
@@ -180,6 +180,19 @@ async def api_update_pay_to_enable(
)
def _check_enable_extension_access(
ext_id: str, ext: InstallableExtension, account_id: AccountId
) -> None:
if ext.is_super_user_only and not settings.is_super_user(account_id.id):
raise HTTPException(
HTTPStatus.FORBIDDEN, f"User not authorized for extension '{ext_id}'."
)
if ext.is_admin_only and not settings.is_admin_user(account_id.id):
raise HTTPException(
HTTPStatus.FORBIDDEN, f"User not authorized for extension '{ext_id}'."
)
@extension_router.put("/{ext_id}/enable")
async def api_enable_extension(
ext_id: str, account_id: AccountId = Depends(check_account_id_exists)
@@ -195,14 +208,7 @@ async def api_enable_extension(
raise ValueError(f"Extension '{ext_id}' is not installed.")
if not ext.active:
raise ValueError(f"Extension '{ext_id}' is not activated.")
if ext.is_super_user_only and not settings.is_super_user(account_id.id):
raise HTTPException(
HTTPStatus.FORBIDDEN, f"User not authorized for extension '{ext_id}'."
)
if ext.is_admin_only and not settings.is_admin_user(account_id.id):
raise HTTPException(
HTTPStatus.FORBIDDEN, f"User not authorized for extension '{ext_id}'."
)
_check_enable_extension_access(ext_id, ext, account_id)
user_ext = await get_user_extension(account_id.id, ext_id)
if not user_ext:
+1 -3
View File
@@ -306,9 +306,7 @@
@click="disableExtension(extension)"
:label="$t('disable')"
></q-btn>
<q-badge
v-if="extension.isSuperUserOnly && !g.user.super_user"
>
<q-badge v-if="extension.isSuperUserOnly && !g.user.super_user">
Super User Only
</q-badge>
+3 -1
View File
@@ -250,7 +250,9 @@ async def test_check_user_extension_access_honors_extension_metadata(
admin_status = await check_user_extension_access(admin_user.id, admin_only_ext)
assert admin_status.success is True
admin_super_status = await check_user_extension_access(admin_user.id, super_only_ext)
admin_super_status = await check_user_extension_access(
admin_user.id, super_only_ext
)
assert admin_super_status.success is False
previous_super_user = settings.super_user