mirror of
https://github.com/lnbits/lnbits.git
synced 2025-10-11 04:52:34 +02:00
feat: disable ext builder option
This commit is contained in:
@@ -84,6 +84,27 @@
|
|||||||
/>
|
/>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
|
<q-item tag="label" v-ripple>
|
||||||
|
<q-item-section>
|
||||||
|
<q-item-label>
|
||||||
|
<span v-text="$t('misc_disable_extensions_builder')"></span>
|
||||||
|
</q-item-label>
|
||||||
|
<q-item-label caption>
|
||||||
|
<span
|
||||||
|
v-text="$t('misc_disable_extensions_builder_label')"
|
||||||
|
></span>
|
||||||
|
</q-item-label>
|
||||||
|
</q-item-section>
|
||||||
|
<q-item-section avatar>
|
||||||
|
<q-toggle
|
||||||
|
size="md"
|
||||||
|
v-model="formData.lnbits_extensions_builder_deactivate_non_admins"
|
||||||
|
checked-icon="check"
|
||||||
|
color="green"
|
||||||
|
unchecked-icon="clear"
|
||||||
|
/>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
<q-item tag="label" v-ripple>
|
<q-item tag="label" v-ripple>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label>
|
<q-item-label>
|
||||||
|
@@ -54,9 +54,11 @@
|
|||||||
v-text="$t('new_version') + ` (${updatableExtensions?.length})`"
|
v-text="$t('new_version') + ` (${updatableExtensions?.length})`"
|
||||||
></span>
|
></span>
|
||||||
</q-badge>
|
</q-badge>
|
||||||
|
{% if extension_builder_enabled %}
|
||||||
<q-btn flat no-caps icon="architecture" to="/extensions/builder"
|
<q-btn flat no-caps icon="architecture" to="/extensions/builder"
|
||||||
><span v-text="$t('create_extension')"></span
|
><span v-text="$t('create_extension')"></span
|
||||||
></q-btn>
|
></q-btn>
|
||||||
|
{% endif %}
|
||||||
<q-btn
|
<q-btn
|
||||||
v-if="g.user.admin"
|
v-if="g.user.admin"
|
||||||
flat
|
flat
|
||||||
|
@@ -46,6 +46,7 @@ from lnbits.decorators import (
|
|||||||
check_admin,
|
check_admin,
|
||||||
check_user_exists,
|
check_user_exists,
|
||||||
)
|
)
|
||||||
|
from lnbits.settings import settings
|
||||||
|
|
||||||
from ..crud import (
|
from ..crud import (
|
||||||
create_user_extension,
|
create_user_extension,
|
||||||
@@ -127,12 +128,16 @@ async def api_install_extension(data: CreateExtension):
|
|||||||
description="""
|
description="""
|
||||||
This endpoint generates a zip file for the extension based on the provided data.
|
This endpoint generates a zip file for the extension based on the provided data.
|
||||||
""",
|
""",
|
||||||
dependencies=[Depends(check_user_exists)],
|
|
||||||
response_model=None,
|
|
||||||
)
|
)
|
||||||
async def api_build_extension(
|
async def api_build_extension(
|
||||||
data: ExtensionData,
|
data: ExtensionData,
|
||||||
|
user: User = Depends(check_user_exists),
|
||||||
) -> FileResponse:
|
) -> FileResponse:
|
||||||
|
if settings.lnbits_extensions_builder_deactivate_non_admins and not user.admin:
|
||||||
|
raise HTTPException(
|
||||||
|
HTTPStatus.FORBIDDEN,
|
||||||
|
"Extension Builder is disabled for non admin users.",
|
||||||
|
)
|
||||||
stub_ext_id = "extension_builder_stub" # todo: do not hardcode, fetch from manifest
|
stub_ext_id = "extension_builder_stub" # todo: do not hardcode, fetch from manifest
|
||||||
release, build_dir = await build_extension_from_data(data, stub_ext_id)
|
release, build_dir = await build_extension_from_data(data, stub_ext_id)
|
||||||
|
|
||||||
@@ -212,6 +217,11 @@ async def api_preview_extension(
|
|||||||
data: ExtensionData,
|
data: ExtensionData,
|
||||||
user: User = Depends(check_user_exists),
|
user: User = Depends(check_user_exists),
|
||||||
) -> SimpleStatus:
|
) -> SimpleStatus:
|
||||||
|
if settings.lnbits_extensions_builder_deactivate_non_admins and not user.admin:
|
||||||
|
raise HTTPException(
|
||||||
|
HTTPStatus.FORBIDDEN,
|
||||||
|
"Extension Builder is disabled for non admin users.",
|
||||||
|
)
|
||||||
stub_ext_id = "extension_builder_stub"
|
stub_ext_id = "extension_builder_stub"
|
||||||
working_dir_name = "preview_" + sha256(user.id.encode("utf-8")).hexdigest()
|
working_dir_name = "preview_" + sha256(user.id.encode("utf-8")).hexdigest()
|
||||||
await build_extension_from_data(data, stub_ext_id, working_dir_name)
|
await build_extension_from_data(data, stub_ext_id, working_dir_name)
|
||||||
|
@@ -151,6 +151,8 @@ async def extensions(request: Request, user: User = Depends(check_user_exists)):
|
|||||||
{
|
{
|
||||||
"user": user.json(),
|
"user": user.json(),
|
||||||
"extension_data": extension_data,
|
"extension_data": extension_data,
|
||||||
|
"extension_builder_enabled": user.admin
|
||||||
|
or not settings.lnbits_extensions_builder_deactivate_non_admins,
|
||||||
"ajax": _is_ajax_request(request),
|
"ajax": _is_ajax_request(request),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@@ -160,6 +162,11 @@ async def extensions(request: Request, user: User = Depends(check_user_exists)):
|
|||||||
"/extensions/builder", name="extensions builder", response_class=HTMLResponse
|
"/extensions/builder", name="extensions builder", response_class=HTMLResponse
|
||||||
)
|
)
|
||||||
async def extensions_builder(request: Request, user: User = Depends(check_user_exists)):
|
async def extensions_builder(request: Request, user: User = Depends(check_user_exists)):
|
||||||
|
if settings.lnbits_extensions_builder_deactivate_non_admins and not user.admin:
|
||||||
|
raise HTTPException(
|
||||||
|
HTTPStatus.FORBIDDEN,
|
||||||
|
"Extension Builder is disabled for non admin users.",
|
||||||
|
)
|
||||||
return template_renderer().TemplateResponse(
|
return template_renderer().TemplateResponse(
|
||||||
request,
|
request,
|
||||||
"core/extensions_builder.html",
|
"core/extensions_builder.html",
|
||||||
@@ -181,6 +188,11 @@ async def extensions_builder_preview(
|
|||||||
page_name: str | None = None,
|
page_name: str | None = None,
|
||||||
user: User = Depends(check_user_exists),
|
user: User = Depends(check_user_exists),
|
||||||
):
|
):
|
||||||
|
if settings.lnbits_extensions_builder_deactivate_non_admins and not user.admin:
|
||||||
|
raise HTTPException(
|
||||||
|
HTTPStatus.FORBIDDEN,
|
||||||
|
"Extension Builder is disabled for non admin users.",
|
||||||
|
)
|
||||||
working_dir_name = "preview_" + sha256(user.id.encode("utf-8")).hexdigest()
|
working_dir_name = "preview_" + sha256(user.id.encode("utf-8")).hexdigest()
|
||||||
html_file_name = "index.html"
|
html_file_name = "index.html"
|
||||||
if page_name == "public_page":
|
if page_name == "public_page":
|
||||||
|
@@ -51,6 +51,7 @@ class ExtensionsSettings(LNbitsSettings):
|
|||||||
lnbits_admin_extensions: list[str] = Field(default=[])
|
lnbits_admin_extensions: list[str] = Field(default=[])
|
||||||
lnbits_user_default_extensions: list[str] = Field(default=[])
|
lnbits_user_default_extensions: list[str] = Field(default=[])
|
||||||
lnbits_extensions_deactivate_all: bool = Field(default=False)
|
lnbits_extensions_deactivate_all: bool = Field(default=False)
|
||||||
|
lnbits_extensions_builder_deactivate_non_admins: bool = Field(default=False)
|
||||||
lnbits_extensions_manifests: list[str] = Field(
|
lnbits_extensions_manifests: list[str] = Field(
|
||||||
default=[
|
default=[
|
||||||
"https://raw.githubusercontent.com/lnbits/lnbits-extensions/main/extensions.json"
|
"https://raw.githubusercontent.com/lnbits/lnbits-extensions/main/extensions.json"
|
||||||
|
2
lnbits/static/bundle.min.js
vendored
2
lnbits/static/bundle.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -497,6 +497,9 @@ window.localisation.en = {
|
|||||||
miscellanous: 'Miscellanous',
|
miscellanous: 'Miscellanous',
|
||||||
misc_disable_extensions: 'Disable Extensions',
|
misc_disable_extensions: 'Disable Extensions',
|
||||||
misc_disable_extensions_label: 'Disable all extensions',
|
misc_disable_extensions_label: 'Disable all extensions',
|
||||||
|
misc_disable_extensions_builder: 'Disable Extensions Builder',
|
||||||
|
misc_disable_extensions_builder_label:
|
||||||
|
'Disable Extensions Builder for non admin users.',
|
||||||
misc_hide_api: 'Hide API',
|
misc_hide_api: 'Hide API',
|
||||||
misc_hide_api_label: 'Hides wallet api, extensions can choose to honor',
|
misc_hide_api_label: 'Hides wallet api, extensions can choose to honor',
|
||||||
wallets_management: 'Wallets Management',
|
wallets_management: 'Wallets Management',
|
||||||
|
Reference in New Issue
Block a user