From 1f4f4d93ca50fc51d772487228d61c814bdfc299 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 22 Dec 2022 15:16:53 +0200 Subject: [PATCH 001/168] feat: add `LNBITS_EXTENSIONS_MANIFESTS` env var --- .env.example | 1 + 1 file changed, 1 insertion(+) diff --git a/.env.example b/.env.example index 56943c4d..f91e1e67 100644 --- a/.env.example +++ b/.env.example @@ -30,6 +30,7 @@ LNBITS_HIDE_API=false # Disable extensions for all users, use "all" to disable all extensions LNBITS_DISABLED_EXTENSIONS="amilk" +LNBITS_EXTENSIONS_MANIFESTS="https://raw.githubusercontent.com/lnbits/lnbits-extensions/main/extensions.json,https://raw.githubusercontent.com/lnbits/lnbits-extensions/main/extensions-trial.json" # Database: to use SQLite, specify LNBITS_DATA_FOLDER # to use PostgreSQL, specify LNBITS_DATABASE_URL=postgres://... From 331e93195dd9a521eb6636cfe3f21a2006f69ce2 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 22 Dec 2022 15:17:42 +0200 Subject: [PATCH 002/168] chore: ignore the `data` dir --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c2a305e7..6f5ee023 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ tests/data/*.sqlite3 .venv venv +data *.sqlite3 .pyre* From 66c908e60061e1865e2d2c6796e6e75c36c793b7 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 22 Dec 2022 16:30:37 +0200 Subject: [PATCH 003/168] chore: migrate after major changes on main --- lnbits/app.py | 71 +++-- lnbits/commands.py | 57 +--- lnbits/core/__init__.py | 3 + lnbits/core/crud.py | 31 +++ lnbits/core/helpers.py | 93 +++++++ lnbits/core/models.py | 6 +- lnbits/core/templates/core/extensions.html | 9 + lnbits/core/templates/core/install.html | 286 +++++++++++++++++++++ lnbits/core/views/api.py | 214 ++++++++++++++- lnbits/core/views/generic.py | 126 ++++++--- lnbits/helpers.py | 46 +++- lnbits/settings.py | 1 + lnbits/static/js/base.js | 3 +- 13 files changed, 847 insertions(+), 99 deletions(-) create mode 100644 lnbits/core/helpers.py create mode 100644 lnbits/core/templates/core/install.html diff --git a/lnbits/app.py b/lnbits/app.py index 1b1292ce..9fb388c0 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -1,10 +1,15 @@ import asyncio +import glob import importlib import logging +import os import signal import sys import traceback +import zipfile from http import HTTPStatus +from pathlib import Path +from typing import Callable from fastapi import FastAPI, Request from fastapi.exceptions import HTTPException, RequestValidationError @@ -18,10 +23,12 @@ from lnbits.core.tasks import register_task_listeners from lnbits.settings import get_wallet_class, set_wallet_class, settings from .commands import migrate_databases -from .core import core_app +from .core import core_app, core_app_extra from .core.services import check_admin_settings from .core.views.generic import core_html_routes from .helpers import ( + EnabledExtensionMiddleware, + Extension, get_css_vendored, get_js_vendored, get_valid_extensions, @@ -65,6 +72,7 @@ def create_app() -> FastAPI: ) app.add_middleware(GZipMiddleware, minimum_size=1000) + app.add_middleware(EnabledExtensionMiddleware) register_startup(app) register_assets(app) @@ -72,6 +80,8 @@ def create_app() -> FastAPI: register_async_tasks(app) register_exception_handlers(app) + setattr(core_app_extra, "register_new_ext_routes", register_new_ext_routes(app)) + return app @@ -105,6 +115,22 @@ async def check_funding_source() -> None: ) +def check_installed_extensions(): + """ + Check extensions that have been installed, but for some reason no longer present in the 'lnbits/extensions' directory. + One reason might be a docker-container that was re-created. + The 'data' directory (where the '.zip' files live) is expected to persist state. + """ + extensions_data_dir = os.path.join(settings.lnbits_data_folder, "extensions") + + zip_files = glob.glob(f"{extensions_data_dir}/*.zip") + for zip_file in zip_files: + ext_name = Path(zip_file).stem + if not Path(f"lnbits/extensions/{ext_name}").is_dir(): + with zipfile.ZipFile(zip_file, "r") as zip_ref: + zip_ref.extractall("lnbits/extensions/") + + def register_routes(app: FastAPI) -> None: """Register FastAPI routes / LNbits extensions.""" app.include_router(core_app) @@ -112,20 +138,7 @@ def register_routes(app: FastAPI) -> None: for ext in get_valid_extensions(): try: - ext_module = importlib.import_module(f"lnbits.extensions.{ext.code}") - ext_route = getattr(ext_module, f"{ext.code}_ext") - - if hasattr(ext_module, f"{ext.code}_start"): - ext_start_func = getattr(ext_module, f"{ext.code}_start") - ext_start_func() - - if hasattr(ext_module, f"{ext.code}_static_files"): - ext_statics = getattr(ext_module, f"{ext.code}_static_files") - for s in ext_statics: - app.mount(s["path"], s["app"], s["name"]) - - logger.trace(f"adding route for extension {ext_module}") - app.include_router(ext_route) + register_ext_routes(app, ext) except Exception as e: logger.error(str(e)) raise ImportError( @@ -133,6 +146,31 @@ def register_routes(app: FastAPI) -> None: ) +def register_new_ext_routes(app: FastAPI) -> Callable: + def register_new_ext_routes_fn(ext: Extension): + register_ext_routes(app, ext) + + return register_new_ext_routes_fn + + +def register_ext_routes(app: FastAPI, ext: Extension) -> None: + """Register FastAPI routes for extension.""" + ext_module = importlib.import_module(f"lnbits.extensions.{ext.code}") + ext_route = getattr(ext_module, f"{ext.code}_ext") + + if hasattr(ext_module, f"{ext.code}_start"): + ext_start_func = getattr(ext_module, f"{ext.code}_start") + ext_start_func() + + if hasattr(ext_module, f"{ext.code}_static_files"): + ext_statics = getattr(ext_module, f"{ext.code}_static_files") + for s in ext_statics: + app.mount(s["path"], s["app"], s["name"]) + + logger.trace(f"adding route for extension {ext_module}") + app.include_router(ext_route) + + def register_startup(app: FastAPI): @app.on_event("startup") async def lnbits_startup(): @@ -151,6 +189,9 @@ def register_startup(app: FastAPI): # 4. initialize funding source await check_funding_source() + + # 5. check extensions in `data` directory + await check_installed_extensions() except Exception as e: logger.error(str(e)) raise ImportError("Failed to run 'startup' event.") diff --git a/lnbits/commands.py b/lnbits/commands.py index 82ea1430..66b45b93 100644 --- a/lnbits/commands.py +++ b/lnbits/commands.py @@ -11,6 +11,8 @@ from lnbits.settings import settings from .core import db as core_db from .core import migrations as core_migrations +from .core.crud import USER_ID_ALL, get_dbversions, get_inactive_extensions +from .core.helpers import migrate_extension_database, run_migration from .db import COCKROACH, POSTGRES, SQLITE from .helpers import ( get_css_vendored, @@ -59,30 +61,6 @@ def bundle_vendored(): async def migrate_databases(): """Creates the necessary databases if they don't exist already; or migrates them.""" - async def set_migration_version(conn, db_name, version): - await conn.execute( - """ - INSERT INTO dbversions (db, version) VALUES (?, ?) - ON CONFLICT (db) DO UPDATE SET version = ? - """, - (db_name, version, version), - ) - - async def run_migration(db, migrations_module, db_name): - for key, migrate in migrations_module.__dict__.items(): - match = match = matcher.match(key) - if match: - version = int(match.group(1)) - if version > current_versions.get(db_name, 0): - logger.debug(f"running migration {db_name}.{version}") - await migrate(db) - - if db.schema == None: - await set_migration_version(db, db_name, version) - else: - async with core_db.connect() as conn: - await set_migration_version(conn, db_name, version) - async with core_db.connect() as conn: if conn.type == SQLITE: exists = await conn.fetchone( @@ -96,27 +74,18 @@ async def migrate_databases(): if not exists: await core_migrations.m000_create_migrations_table(conn) - rows = await (await conn.execute("SELECT * FROM dbversions")).fetchall() - current_versions = {row["db"]: row["version"] for row in rows} - matcher = re.compile(r"^m(\d\d\d)_") - db_name = core_migrations.__name__.split(".")[-2] - await run_migration(conn, core_migrations, db_name) + current_versions = await get_dbversions(conn) + core_version = current_versions.get("core", 0) + await run_migration(conn, core_migrations, core_version) for ext in get_valid_extensions(): - try: - - module_str = ( - ext.migration_module or f"lnbits.extensions.{ext.code}.migrations" - ) - ext_migrations = importlib.import_module(module_str) - ext_db = importlib.import_module(f"lnbits.extensions.{ext.code}").db - db_name = ext.db_name or module_str.split(".")[-2] - except ImportError: - raise ImportError( - f"Please make sure that the extension `{ext.code}` has a migrations file." - ) - - async with ext_db.connect() as ext_conn: - await run_migration(ext_conn, ext_migrations, db_name) + current_version = current_versions.get(ext.code, 0) + await migrate_extension_database(ext, current_version) logger.info("✔️ All migrations done.") + + +async def load_disabled_extension_list() -> None: + """Update list of extensions that have been explicitly disabled""" + inactive_extensions = await get_inactive_extensions(user_id=USER_ID_ALL) + settings.lnbits_disabled_extensions += inactive_extensions diff --git a/lnbits/core/__init__.py b/lnbits/core/__init__.py index dec15d78..75b6d587 100644 --- a/lnbits/core/__init__.py +++ b/lnbits/core/__init__.py @@ -1,11 +1,14 @@ from fastapi.routing import APIRouter +from lnbits.core.models import CoreAppExtra from lnbits.db import Database db = Database("database") core_app: APIRouter = APIRouter() +core_app_extra: CoreAppExtra = CoreAppExtra() + from .views.admin_api import * # noqa from .views.api import * # noqa from .views.generic import * # noqa diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index a80fadf2..1289c33a 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -11,6 +11,8 @@ from lnbits.settings import AdminSettings, EditableSettings, SuperSettings, sett from . import db from .models import BalanceCheck, Payment, User, Wallet +USER_ID_ALL = "all" + # accounts # -------- @@ -78,6 +80,18 @@ async def update_user_extension( ) +async def get_inactive_extensions( + *, user_id: str, conn: Optional[Connection] = None +) -> List[str]: + inactive_extensions = await (conn or db).fetchall( + """SELECT extension FROM extensions WHERE "user" = ? AND NOT active""", + (user_id,), + ) + return ( + [ext[0] for ext in inactive_extensions] if len(inactive_extensions) != 0 else [] + ) + + # wallets # ------- @@ -620,3 +634,20 @@ async def create_admin_settings(super_user: str, new_settings: dict): sql = f"INSERT INTO settings (super_user, editable_settings) VALUES (?, ?)" await db.execute(sql, (super_user, json.dumps(new_settings))) return await get_super_settings() + + +# db versions +# -------------- +async def get_dbversions(conn: Optional[Connection] = None): + rows = await (conn or db).fetchall("SELECT * FROM dbversions") + return {row["db"]: row["version"] for row in rows} + + +async def update_migration_version(conn, db_name, version): + await (conn or db).execute( + """ + INSERT INTO dbversions (db, version) VALUES (?, ?) + ON CONFLICT (db) DO UPDATE SET version = ? + """, + (db_name, version, version), + ) diff --git a/lnbits/core/helpers.py b/lnbits/core/helpers.py new file mode 100644 index 00000000..3675d438 --- /dev/null +++ b/lnbits/core/helpers.py @@ -0,0 +1,93 @@ +import hashlib +import importlib +import re +import urllib.request +from typing import List + +import httpx +from fastapi.exceptions import HTTPException +from loguru import logger + +from lnbits.helpers import InstallableExtension +from lnbits.settings import settings + +from . import db as core_db +from .crud import update_migration_version + + +async def migrate_extension_database(ext, current_version): + try: + ext_migrations = importlib.import_module( + f"lnbits.extensions.{ext.code}.migrations" + ) + ext_db = importlib.import_module(f"lnbits.extensions.{ext.code}").db + except ImportError: + raise ImportError( + f"Please make sure that the extension `{ext.code}` has a migrations file." + ) + + async with ext_db.connect() as ext_conn: + await run_migration(ext_conn, ext_migrations, current_version) + + +async def run_migration(db, migrations_module, current_version): + matcher = re.compile(r"^m(\d\d\d)_") + db_name = migrations_module.__name__.split(".")[-2] + for key, migrate in migrations_module.__dict__.items(): + match = match = matcher.match(key) + if match: + version = int(match.group(1)) + if version > current_version: + logger.debug(f"running migration {db_name}.{version}") + print(f"running migration {db_name}.{version}") + await migrate(db) + + if db.schema == None: + await update_migration_version(db, db_name, version) + else: + async with core_db.connect() as conn: + await update_migration_version(conn, db_name, version) + + +async def get_installable_extensions() -> List[InstallableExtension]: + extension_list: List[InstallableExtension] = [] + + async with httpx.AsyncClient() as client: + for url in settings.lnbits_extensions_manifests: + resp = await client.get(url) + if resp.status_code != 200: + raise HTTPException( + status_code=404, + detail=f"Unable to fetch extension list for repository: {url}", + ) + for e in resp.json()["extensions"]: + extension_list += [ + InstallableExtension( + id=e["id"], + name=e["name"], + archive=e["archive"], + hash=e["hash"], + short_description=e["shortDescription"], + details=e["details"] if "details" in e else "", + icon=e["icon"], + dependencies=e["dependencies"] if "dependencies" in e else [], + ) + ] + + return extension_list + + +def download_url(url, save_path): + with urllib.request.urlopen(url) as dl_file: + with open(save_path, "wb") as out_file: + out_file.write(dl_file.read()) + + +def file_hash(filename): + h = hashlib.sha256() + b = bytearray(128 * 1024) + mv = memoryview(b) + with open(filename, "rb", buffering=0) as f: + while n := f.readinto(mv): + h.update(mv[:n]) + return h.hexdigest() diff --git a/lnbits/core/models.py b/lnbits/core/models.py index eca1bf50..7b147208 100644 --- a/lnbits/core/models.py +++ b/lnbits/core/models.py @@ -4,7 +4,7 @@ import hmac import json import time from sqlite3 import Row -from typing import Dict, List, Optional +from typing import Callable, Dict, List, Optional from ecdsa import SECP256k1, SigningKey from fastapi import Query @@ -213,3 +213,7 @@ class BalanceCheck(BaseModel): @classmethod def from_row(cls, row: Row): return cls(wallet=row["wallet"], service=row["service"], url=row["url"]) + + +class CoreAppExtra: + register_new_ext_routes: Callable diff --git a/lnbits/core/templates/core/extensions.html b/lnbits/core/templates/core/extensions.html index 88e50269..dc0037e2 100644 --- a/lnbits/core/templates/core/extensions.html +++ b/lnbits/core/templates/core/extensions.html @@ -4,6 +4,15 @@ {% endblock %} {% block page %}
+
+ Add or Remove Extensions +
+
+ Back +
+
+ +
+ +
+ + + +
+
+ +
+
+ + +
+
+ + +
+
+ + More + +
+
+ + {% raw %} +
{{ extension.name}}
+ {{ extension.shortDescription }} +
+ Depends on: +   + + + +
+ {% endraw %} +
+ + +
+
+ + Uninstall + +
+
+ + + Install +
+
+ +
+ + + + + + + +
+
+
+
+ + +
Warning
+

+ You are about to remove the extension for all users.
+ Are you sure you want to continue? +

+ +
+ Yes, Uninstall + Cancel +
+
+
+ + {%raw%} + + +
{{selectedExtension.name}}
+
+ +
+ Done +
+
+
+ {%endraw%} +
+{% endblock %} {% block scripts %} {{ window_vars(user) }} + +{% endblock %} diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index d545df9a..7e552e8a 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -1,11 +1,18 @@ import asyncio import hashlib +import importlib +import inspect import json +import os +import shutil +import sys import time import uuid +import zipfile from http import HTTPStatus from io import BytesIO -from typing import Dict, Optional, Tuple, Union +from pathlib import Path +from typing import Dict, List, Optional, Tuple, Union from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse import async_timeout @@ -22,6 +29,8 @@ from fastapi import ( WebSocketDisconnect, ) from fastapi.exceptions import HTTPException +from fastapi.params import Body +from genericpath import isfile from loguru import logger from pydantic import BaseModel from pydantic.fields import Field @@ -29,15 +38,27 @@ from sse_starlette.sse import EventSourceResponse from starlette.responses import StreamingResponse from lnbits import bolt11, lnurl -from lnbits.core.models import Payment, Wallet +from lnbits.core.helpers import ( + download_url, + file_hash, + get_installable_extensions, + migrate_extension_database, +) +from lnbits.core.models import Payment, User, Wallet from lnbits.decorators import ( WalletTypeInfo, check_admin, + check_user_exists, get_key_type, require_admin_key, require_invoice_key, ) -from lnbits.helpers import url_for +from lnbits.helpers import ( + Extension, + InstallableExtension, + get_valid_extensions, + url_for, +) from lnbits.settings import get_wallet_class, settings from lnbits.utils.exchange_rates import ( currencies, @@ -45,13 +66,16 @@ from lnbits.utils.exchange_rates import ( satoshis_amount_as_fiat, ) -from .. import core_app, db +from .. import core_app, core_app_extra, db from ..crud import ( + USER_ID_ALL, + get_dbversions, get_payments, get_standalone_payment, get_total_balance, get_wallet_for_key, save_balance_check, + update_user_extension, update_wallet, ) from ..services import ( @@ -706,3 +730,185 @@ async def websocket_update_get(item_id: str, data: str): return {"sent": True, "data": data} except: return {"sent": False, "data": data} + + +@core_app.post("/api/v1/extension/{ext_id}/{hash}") +async def api_install_extension( + ext_id: str, hash: str, user: User = Depends(check_user_exists) +): + if not user.admin: + raise HTTPException( + status_code=HTTPStatus.UNAUTHORIZED, detail="Only for admin users" + ) + + try: + extension_list: List[InstallableExtension] = await get_installable_extensions() + except Exception as ex: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail="Cannot fetch installable extension list", + ) + + extensions = [e for e in extension_list if e.id == ext_id and e.hash == hash] + if len(extensions) == 0: + raise HTTPException( + status_code=HTTPStatus.BAD_REQUEST, + detail=f"Unknown extension id: {ext_id}", + ) + extension = extensions[0] + + # check that all dependecies are installed + installed_extensions = list(map(lambda e: e.code, get_valid_extensions(True))) + if not set(extension.dependencies).issubset(installed_extensions): + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Not all dependencies are installed: {extension.dependencies}", + ) + + # move files to the right location + extensions_data_dir = os.path.join(settings.lnbits_data_folder, "extensions") + os.makedirs(extensions_data_dir, exist_ok=True) + ext_data_dir = os.path.join(extensions_data_dir, ext_id) + shutil.rmtree(ext_data_dir, True) + ext_zip_file = os.path.join(extensions_data_dir, f"{ext_id}.zip") + if os.path.isfile(ext_zip_file): + os.remove(ext_zip_file) + + try: + download_url(extension.archive, ext_zip_file) + except Exception as ex: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail="Cannot fetch extension archive file", + ) + + archive_hash = file_hash(ext_zip_file) + if extension.hash != archive_hash: + # remove downloaded archive + if os.path.isfile(ext_zip_file): + os.remove(ext_zip_file) + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail="File hash missmatch. Will not install.", + ) + + try: + ext_dir = os.path.join("lnbits/extensions", ext_id) + shutil.rmtree(ext_dir, True) + with zipfile.ZipFile(ext_zip_file, "r") as zip_ref: + zip_ref.extractall("lnbits/extensions") + + # todo: is admin only + ext = Extension(extension.id, True, extension.is_admin_only, extension.name) + + current_versions = await get_dbversions() + current_version = current_versions.get(ext.code, 0) + + module_name = f"lnbits.extensions.{ext.code}" + # if module_name in sys.modules: + # importlib.reload(sys.modules[module_name]) + ext_module = importlib.import_module(module_name) + # sys.modules[module_name] = importlib.reload(ext_module) + + modules_to_reload = list_modules_for_extension(ext_id) + print("### modules_to_reload", modules_to_reload) + for m in modules_to_reload: + importlib.reload(sys.modules[m]) + + await migrate_extension_database(ext, current_version) + + # disable by default + await update_user_extension(user_id=USER_ID_ALL, extension=ext_id, active=False) + settings.lnbits_disabled_extensions += [ext_id] + + # mount routes at the very end + core_app_extra.register_new_ext_routes(ext) + except Exception as ex: + logger.warning(ex) + # remove downloaded archive + if os.path.isfile(ext_zip_file): + os.remove(ext_zip_file) + + # remove module from extensions + shutil.rmtree(ext_dir, True) + raise HTTPException( + status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex) + ) + + +@core_app.delete("/api/v1/extension/{ext_id}") +async def api_uninstall_extension(ext_id: str, user: User = Depends(check_user_exists)): + if not user.admin: + raise HTTPException( + status_code=HTTPStatus.UNAUTHORIZED, detail="Only for admin users" + ) + + try: + extension_list: List[InstallableExtension] = await get_installable_extensions() + except Exception as ex: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail="Cannot fetch installable extension list", + ) + + extensions = [e for e in extension_list if e.id == ext_id] + if len(extensions) == 0: + raise HTTPException( + status_code=HTTPStatus.BAD_REQUEST, + detail=f"Unknown extension id: {ext_id}", + ) + + # check that other extensions do not depend on this one + for active_ext_id in list(map(lambda e: e.code, get_valid_extensions(True))): + active_ext = next( + (ext for ext in extension_list if ext.id == active_ext_id), None + ) + if active_ext and ext_id in active_ext.dependencies: + raise HTTPException( + status_code=HTTPStatus.BAD_REQUEST, + detail=f"Cannot uninstall. Extension '{active_ext.name}' depends on this one.", + ) + + try: + settings.lnbits_disabled_extensions += [ext_id] + + # remove downloaded archive + ext_zip_file = os.path.join( + settings.lnbits_data_folder, "extensions", f"{ext_id}.zip" + ) + if os.path.isfile(ext_zip_file): + os.remove(ext_zip_file) + + # module_name = f"lnbits.extensions.{ext_id}" + + # modules_to_delete = list_modules_for_extension(ext_id) + # print('### modules_to_delete', modules_to_delete) + # for m in modules_to_delete: + # module = sys.modules[m] + # del sys.modules[m] + # del module + + # remove module from extensions + ext_dir = os.path.join("lnbits/extensions", ext_id) + shutil.rmtree(ext_dir, True) + except Exception as ex: + raise HTTPException( + status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex) + ) + + +def list_modules_for_extension(ext_id: str) -> List[str]: + modules_for_extension = [] + for key in sys.modules.keys(): + try: + module = sys.modules[key] + moduleFilePath = inspect.getfile(module).lower() + + dir_name = str(Path(moduleFilePath).parent.absolute()) + if dir_name.endswith(f"lnbits/extensions/{ext_id}"): + print("## moduleFilePath", moduleFilePath) + modules_for_extension += [key] + + except: + pass # built in modules throw if queried + return modules_for_extension diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index ab19feb8..d14a43f6 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -1,6 +1,6 @@ import asyncio from http import HTTPStatus -from typing import Optional +from typing import List, Optional from fastapi import Depends, Query, Request, status from fastapi.exceptions import HTTPException @@ -11,17 +11,20 @@ from pydantic.types import UUID4 from starlette.responses import HTMLResponse, JSONResponse from lnbits.core import db +from lnbits.core.helpers import get_installable_extensions from lnbits.core.models import User from lnbits.decorators import check_admin, check_user_exists from lnbits.helpers import template_renderer, url_for from lnbits.settings import get_wallet_class, settings -from ...helpers import get_valid_extensions +from ...helpers import InstallableExtension, get_valid_extensions from ..crud import ( + USER_ID_ALL, create_account, create_wallet, delete_wallet, get_balance_check, + get_inactive_extensions, get_user, save_balance_notify, update_user_extension, @@ -52,35 +55,10 @@ async def extensions( enable: str = Query(None), disable: str = Query(None), ): - extension_to_enable = enable - extension_to_disable = disable - - if extension_to_enable and extension_to_disable: - raise HTTPException( - HTTPStatus.BAD_REQUEST, "You can either `enable` or `disable` an extension." - ) - - # check if extension exists - if extension_to_enable or extension_to_disable: - ext = extension_to_enable or extension_to_disable - if ext not in [e.code for e in get_valid_extensions()]: - raise HTTPException( - HTTPStatus.BAD_REQUEST, f"Extension '{ext}' doesn't exist." - ) - - if extension_to_enable: - logger.info(f"Enabling extension: {extension_to_enable} for user {user.id}") - await update_user_extension( - user_id=user.id, extension=extension_to_enable, active=True - ) - elif extension_to_disable: - logger.info(f"Disabling extension: {extension_to_disable} for user {user.id}") - await update_user_extension( - user_id=user.id, extension=extension_to_disable, active=False - ) + await toggle_extension(enable, disable, user.id) # Update user as his extensions have been updated - if extension_to_enable or extension_to_disable: + if enable or disable: user = await get_user(user.id) # type: ignore return template_renderer().TemplateResponse( @@ -88,6 +66,70 @@ async def extensions( ) +@core_html_routes.get( + "/install", name="install.extensions", response_class=HTMLResponse +) +async def extensions_install( + request: Request, + user: User = Depends(check_user_exists), # type: ignore + activate: str = Query(None), # type: ignore + deactivate: str = Query(None), # type: ignore +): + if not user.admin: + raise HTTPException( + status_code=HTTPStatus.UNAUTHORIZED, detail="Only for admin users" + ) + + try: + extension_list: List[InstallableExtension] = await get_installable_extensions() + except Exception as ex: + logger.warning(ex) + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail="Cannot fetch installable extension list", + ) + + try: + if deactivate: + settings.lnbits_disabled_extensions += [deactivate] + elif activate: + settings.lnbits_disabled_extensions = list( + filter(lambda e: e != activate, settings.lnbits_disabled_extensions) + ) + await toggle_extension(activate, deactivate, USER_ID_ALL) + + installed_extensions = list(map(lambda e: e.code, get_valid_extensions(True))) + inactive_extensions = await get_inactive_extensions(user_id=USER_ID_ALL) + extensions = list( + map( + lambda ext: { + "id": ext.id, + "name": ext.name, + "hash": ext.hash, + "icon": ext.icon, + "shortDescription": ext.short_description, + "details": ext.details, + "dependencies": ext.dependencies, + "isInstalled": ext.id in installed_extensions, + "isActive": not ext.id in inactive_extensions, + }, + extension_list, + ) + ) + + return template_renderer().TemplateResponse( + "core/install.html", + { + "request": request, + "user": user.dict(), + "extensions": extensions, + }, + ) + except Exception as e: + logger.warning(e) + raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(e)) + + @core_html_routes.get( "/wallet", response_class=HTMLResponse, @@ -327,3 +369,29 @@ async def index(request: Request, user: User = Depends(check_admin)): "balance": balance, }, ) + + +async def toggle_extension(extension_to_enable, extension_to_disable, user_id): + if extension_to_enable and extension_to_disable: + raise HTTPException( + HTTPStatus.BAD_REQUEST, "You can either `enable` or `disable` an extension." + ) + + # check if extension exists + if extension_to_enable or extension_to_disable: + ext = extension_to_enable or extension_to_disable + if ext not in [e.code for e in get_valid_extensions(True)]: + raise HTTPException( + HTTPStatus.BAD_REQUEST, f"Extension '{ext}' doesn't exist." + ) + + if extension_to_enable: + logger.info(f"Enabling extension: {extension_to_enable} for user {user_id}") + await update_user_extension( + user_id=user_id, extension=extension_to_enable, active=True + ) + elif extension_to_disable: + logger.info(f"Disabling extension: {extension_to_disable} for user {user_id}") + await update_user_extension( + user_id=user_id, extension=extension_to_disable, active=False + ) diff --git a/lnbits/helpers.py b/lnbits/helpers.py index 4804bdea..52a7f6ab 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -1,10 +1,13 @@ import glob import json import os +from http import HTTPStatus from typing import Any, List, NamedTuple, Optional import jinja2 -import shortuuid +import shortuuid # type: ignore +from fastapi.responses import JSONResponse +from starlette.types import ASGIApp, Receive, Scope, Send from lnbits.jinja2_templating import Jinja2Templates from lnbits.requestvars import g @@ -25,8 +28,10 @@ class Extension(NamedTuple): class ExtensionManager: - def __init__(self): - self._disabled: List[str] = settings.lnbits_disabled_extensions + def __init__(self, include_disabled_exts=False): + self._disabled: List[str] = ( + [] if include_disabled_exts else settings.lnbits_disabled_extensions + ) self._admin_only: List[str] = settings.lnbits_admin_extensions self._extension_folders: List[str] = [ x[1] for x in os.walk(os.path.join(settings.lnbits_path, "extensions")) @@ -74,9 +79,40 @@ class ExtensionManager: return output -def get_valid_extensions() -> List[Extension]: +class EnabledExtensionMiddleware: + def __init__(self, app: ASGIApp) -> None: + self.app = app + + async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: + pathname = scope["path"].split("/")[1] + if pathname in settings.lnbits_disabled_extensions: + response = JSONResponse( + status_code=HTTPStatus.NOT_FOUND, + content={"detail": f"Extension '{pathname}' disabled"}, + ) + await response(scope, receive, send) + return + + await self.app(scope, receive, send) + + +class InstallableExtension(NamedTuple): + id: str + name: str + archive: str + hash: str + short_description: Optional[str] = None + details: Optional[str] = None + icon: Optional[str] = None + dependencies: List[str] = [] + is_admin_only: bool = False + + +def get_valid_extensions(include_disabled_exts=False) -> List[Extension]: return [ - extension for extension in ExtensionManager().extensions if extension.is_valid + extension + for extension in ExtensionManager(include_disabled_exts).extensions + if extension.is_valid ] diff --git a/lnbits/settings.py b/lnbits/settings.py index 6ec4db0c..d00d038d 100644 --- a/lnbits/settings.py +++ b/lnbits/settings.py @@ -40,6 +40,7 @@ class UsersSettings(LNbitsSettings): lnbits_allowed_users: List[str] = Field(default=[]) lnbits_admin_extensions: List[str] = Field(default=[]) lnbits_disabled_extensions: List[str] = Field(default=[]) + lnbits_extensions_manifests: List[str] = Field(default=[]) class ThemesSettings(LNbitsSettings): diff --git a/lnbits/static/js/base.js b/lnbits/static/js/base.js index 32b075b7..d424d563 100644 --- a/lnbits/static/js/base.js +++ b/lnbits/static/js/base.js @@ -141,7 +141,8 @@ window.LNbits = { admin: data.admin, email: data.email, extensions: data.extensions, - wallets: data.wallets + wallets: data.wallets, + admin: data.admin } var mapWallet = this.wallet obj.wallets = obj.wallets From 2d3ba2c457e2022844d206c2943f2175ead16876 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 22 Dec 2022 16:45:20 +0200 Subject: [PATCH 004/168] fix: UI position --- lnbits/core/templates/core/extensions.html | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lnbits/core/templates/core/extensions.html b/lnbits/core/templates/core/extensions.html index dc0037e2..cfe25894 100644 --- a/lnbits/core/templates/core/extensions.html +++ b/lnbits/core/templates/core/extensions.html @@ -3,16 +3,16 @@ {% endblock %} {% block page %}
+
+ Add or Remove Extensions +
-
- Add or Remove Extensions -
Date: Tue, 29 Nov 2022 14:21:49 +0200 Subject: [PATCH 005/168] chore: remove test code --- lnbits/core/views/api.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 7e552e8a..36e8648f 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -803,18 +803,6 @@ async def api_install_extension( current_versions = await get_dbversions() current_version = current_versions.get(ext.code, 0) - - module_name = f"lnbits.extensions.{ext.code}" - # if module_name in sys.modules: - # importlib.reload(sys.modules[module_name]) - ext_module = importlib.import_module(module_name) - # sys.modules[module_name] = importlib.reload(ext_module) - - modules_to_reload = list_modules_for_extension(ext_id) - print("### modules_to_reload", modules_to_reload) - for m in modules_to_reload: - importlib.reload(sys.modules[m]) - await migrate_extension_database(ext, current_version) # disable by default From 6c41ac841b59dc449083f5105559cf200a3484dd Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 29 Nov 2022 17:03:46 +0200 Subject: [PATCH 006/168] feat: temporary fix for upgrades --- lnbits/app.py | 14 +++++++++++++- lnbits/core/views/api.py | 17 +++++++++-------- lnbits/helpers.py | 1 + 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index 9fb388c0..b1312fd8 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -156,6 +156,14 @@ def register_new_ext_routes(app: FastAPI) -> Callable: def register_ext_routes(app: FastAPI, ext: Extension) -> None: """Register FastAPI routes for extension.""" ext_module = importlib.import_module(f"lnbits.extensions.{ext.code}") + if ext.version != "": + if f"lnbits.extensions.{ext.code}" in sys.modules: + del sys.modules[f"lnbits.extensions.{ext.code}"] + del ext_module + ext_module = importlib.import_module(f"lnbits.upgrades.{ext.version}.{ext.code}-{ext.version}") + # else: + # ext_module = importlib.import_module(f"lnbits.extensions.{ext.code}") + ext_route = getattr(ext_module, f"{ext.code}_ext") if hasattr(ext_module, f"{ext.code}_start"): @@ -168,7 +176,11 @@ def register_ext_routes(app: FastAPI, ext: Extension) -> None: app.mount(s["path"], s["app"], s["name"]) logger.trace(f"adding route for extension {ext_module}") - app.include_router(ext_route) + if ext.version != "": + # ext_route.prefix = "/sss" + app.include_router(router=ext_route, prefix="/sss") + else: + app.include_router(router=ext_route) def register_startup(app: FastAPI): diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 36e8648f..5715ee62 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -794,16 +794,17 @@ async def api_install_extension( try: ext_dir = os.path.join("lnbits/extensions", ext_id) - shutil.rmtree(ext_dir, True) - with zipfile.ZipFile(ext_zip_file, "r") as zip_ref: - zip_ref.extractall("lnbits/extensions") + # shutil.rmtree(ext_dir, True) + # with zipfile.ZipFile(ext_zip_file, "r") as zip_ref: + # zip_ref.extractall("lnbits/extensions") # todo: is admin only - ext = Extension(extension.id, True, extension.is_admin_only, extension.name) + # 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") - current_versions = await get_dbversions() - current_version = current_versions.get(ext.code, 0) - await migrate_extension_database(ext, current_version) + # current_versions = await get_dbversions() + # current_version = current_versions.get(ext.code, 0) + # await migrate_extension_database(ext, current_version) # todo: test # disable by default await update_user_extension(user_id=USER_ID_ALL, extension=ext_id, active=False) @@ -818,7 +819,7 @@ async def api_install_extension( os.remove(ext_zip_file) # remove module from extensions - shutil.rmtree(ext_dir, True) + # shutil.rmtree(ext_dir, True) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex) ) diff --git a/lnbits/helpers.py b/lnbits/helpers.py index 52a7f6ab..346ebc1b 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -25,6 +25,7 @@ class Extension(NamedTuple): hidden: bool = False migration_module: Optional[str] = None db_name: Optional[str] = None + version: Optional[str] = "" class ExtensionManager: From 3fbac927e96c9e308c92cb0d0e778ecf0a64567f Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 29 Nov 2022 18:14:53 +0200 Subject: [PATCH 007/168] chore: clean-up --- lnbits/app.py | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index b1312fd8..8cf44469 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -155,14 +155,7 @@ def register_new_ext_routes(app: FastAPI) -> Callable: def register_ext_routes(app: FastAPI, ext: Extension) -> None: """Register FastAPI routes for extension.""" - ext_module = importlib.import_module(f"lnbits.extensions.{ext.code}") - if ext.version != "": - if f"lnbits.extensions.{ext.code}" in sys.modules: - del sys.modules[f"lnbits.extensions.{ext.code}"] - del ext_module - ext_module = importlib.import_module(f"lnbits.upgrades.{ext.version}.{ext.code}-{ext.version}") - # else: - # ext_module = importlib.import_module(f"lnbits.extensions.{ext.code}") + ext_module = importlib.import_module(ext.module_name) ext_route = getattr(ext_module, f"{ext.code}_ext") @@ -176,11 +169,9 @@ def register_ext_routes(app: FastAPI, ext: Extension) -> None: app.mount(s["path"], s["app"], s["name"]) logger.trace(f"adding route for extension {ext_module}") - if ext.version != "": - # ext_route.prefix = "/sss" - app.include_router(router=ext_route, prefix="/sss") - else: - app.include_router(router=ext_route) + + prefix = f"/upgrades/{ext.version}" if ext.version != "" else "" + app.include_router(router=ext_route, prefix=prefix) def register_startup(app: FastAPI): From 598d2a69392818ebfd0225431bf207383e29bb96 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 29 Nov 2022 18:16:28 +0200 Subject: [PATCH 008/168] feat: re-route trafic when an extension is upgraded --- lnbits/core/views/api.py | 11 +++++++++-- lnbits/helpers.py | 11 +++++++++++ lnbits/settings.py | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) 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") From 8f8ebbeeaab450205fa018ea381b0ba58b1f7321 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 29 Nov 2022 18:19:33 +0200 Subject: [PATCH 009/168] refactor: class rename and code format --- lnbits/app.py | 4 ++-- lnbits/helpers.py | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index 8cf44469..e559e2b8 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -27,8 +27,8 @@ from .core import core_app, core_app_extra from .core.services import check_admin_settings from .core.views.generic import core_html_routes from .helpers import ( - EnabledExtensionMiddleware, Extension, + InstalledExtensionMiddleware, get_css_vendored, get_js_vendored, get_valid_extensions, @@ -72,7 +72,7 @@ def create_app() -> FastAPI: ) app.add_middleware(GZipMiddleware, minimum_size=1000) - app.add_middleware(EnabledExtensionMiddleware) + app.add_middleware(InstalledExtensionMiddleware) register_startup(app) register_assets(app) diff --git a/lnbits/helpers.py b/lnbits/helpers.py index 9dec9566..ecb895f4 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -80,7 +80,7 @@ class ExtensionManager: return output -class EnabledExtensionMiddleware: +class InstalledExtensionMiddleware: def __init__(self, app: ASGIApp) -> None: self.app = app @@ -97,14 +97,15 @@ class EnabledExtensionMiddleware: # re-route trafic if the extension has been upgraded upgraded_extensions = list( filter( - lambda ext: ext.endswith(f"/{pathname}"), g().config.LNBITS_UPGRADED_EXTENSIONS) + 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) From a6e3b5e049bcad2a0ed084b6770bd1af06f69e24 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 29 Nov 2022 18:48:11 +0200 Subject: [PATCH 010/168] feat: use hash for unique extension id --- lnbits/app.py | 2 +- lnbits/core/views/api.py | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index e559e2b8..d70c6e8a 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -170,7 +170,7 @@ def register_ext_routes(app: FastAPI, ext: Extension) -> None: logger.trace(f"adding route for extension {ext_module}") - prefix = f"/upgrades/{ext.version}" if ext.version != "" else "" + prefix = f"/upgrades/{ext.hash}" if ext.hash != "" else "" app.include_router(router=ext_route, prefix=prefix) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index ba7ed2a9..349be809 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -794,23 +794,28 @@ async def api_install_extension( try: ext_dir = os.path.join("lnbits/extensions", ext_id) - # shutil.rmtree(ext_dir, True) - # with zipfile.ZipFile(ext_zip_file, "r") as zip_ref: - # zip_ref.extractall("lnbits/extensions") + shutil.rmtree(ext_dir, True) + with zipfile.ZipFile(ext_zip_file, "r") as zip_ref: + zip_ref.extractall("lnbits/extensions") + + ext_upgrade_dir = os.path.join("lnbits/upgrades", f"{extension.id}-{extension.hash}") + os.makedirs("lnbits/upgrades", exist_ok=True) + shutil.rmtree(ext_upgrade_dir, True) + with zipfile.ZipFile(ext_zip_file, "r") as zip_ref: + zip_ref.extractall(ext_upgrade_dir) # 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", + hash=extension.hash, ) - # current_versions = await get_dbversions() - # current_version = current_versions.get(ext.code, 0) - # await migrate_extension_database(ext, current_version) # todo: test + current_versions = await get_dbversions() + current_version = current_versions.get(ext.code, 0) + await migrate_extension_database(ext, current_version) # todo: use new module # disable by default await update_user_extension(user_id=USER_ID_ALL, extension=ext_id, active=False) @@ -826,7 +831,7 @@ async def api_install_extension( os.remove(ext_zip_file) # remove module from extensions - # shutil.rmtree(ext_dir, True) + shutil.rmtree(ext_dir, True) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex) ) From 08be621529f3929b0328ac7b5055360454c33e62 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 30 Nov 2022 10:56:23 +0200 Subject: [PATCH 011/168] fix: migration module name --- lnbits/core/helpers.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lnbits/core/helpers.py b/lnbits/core/helpers.py index 3675d438..d67756d0 100644 --- a/lnbits/core/helpers.py +++ b/lnbits/core/helpers.py @@ -17,10 +17,8 @@ from .crud import update_migration_version async def migrate_extension_database(ext, current_version): try: - ext_migrations = importlib.import_module( - f"lnbits.extensions.{ext.code}.migrations" - ) - ext_db = importlib.import_module(f"lnbits.extensions.{ext.code}").db + ext_migrations = importlib.import_module(f"{ext.module_name}.migrations") + ext_db = importlib.import_module(ext.module_name).db except ImportError: raise ImportError( f"Please make sure that the extension `{ext.code}` has a migrations file." From a2d35f65c90dfa6a49119f78dd22e1f1eaf0c8be Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 30 Nov 2022 10:56:48 +0200 Subject: [PATCH 012/168] fix: enforce unique key in `v-for` --- lnbits/core/templates/core/install.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index a331fe14..d1484cd9 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -34,7 +34,7 @@
From 0d61db13ec37feffc3b9625c1f9ce639abb19e2b Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 30 Nov 2022 10:58:33 +0200 Subject: [PATCH 013/168] fix: handle first time install different than subsequent updates --- lnbits/core/views/api.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 349be809..9acfa9cd 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -798,19 +798,23 @@ async def api_install_extension( with zipfile.ZipFile(ext_zip_file, "r") as zip_ref: zip_ref.extractall("lnbits/extensions") - ext_upgrade_dir = os.path.join("lnbits/upgrades", f"{extension.id}-{extension.hash}") + ext_upgrade_dir = os.path.join( + "lnbits/upgrades", f"{extension.id}-{extension.hash}" + ) os.makedirs("lnbits/upgrades", exist_ok=True) shutil.rmtree(ext_upgrade_dir, True) with zipfile.ZipFile(ext_zip_file, "r") as zip_ref: zip_ref.extractall(ext_upgrade_dir) + module_name = f"lnbits.extensions.{ext_id}" + module_installed = module_name in sys.modules # todo: is admin only ext = Extension( code=extension.id, is_valid=True, is_admin_only=False, name=extension.name, - hash=extension.hash, + hash=extension.hash if module_installed else "", ) current_versions = await get_dbversions() From 691e1753707bc5f51c6b2eeaae019970525bb2e5 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 30 Nov 2022 10:59:01 +0200 Subject: [PATCH 014/168] feat: add re-routing for upgraded extension APIs --- lnbits/helpers.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/lnbits/helpers.py b/lnbits/helpers.py index ecb895f4..766fbcd2 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -87,24 +87,34 @@ class InstalledExtensionMiddleware: async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: pathname = scope["path"].split("/")[1] if pathname in settings.lnbits_disabled_extensions: + path_elements = scope["path"].split("/") + if len(path_elements) > 2: + _, path_name, path_type, *rest = path_elements + else: + _, path_name = path_elements + path_type = None + + # block path for all users if the extension is disabled + if path_name in settings.LNBITS_DISABLED_EXTENSIONS: response = JSONResponse( status_code=HTTPStatus.NOT_FOUND, - content={"detail": f"Extension '{pathname}' disabled"}, + content={"detail": f"Extension '{path_name}' disabled"}, ) 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, + # re-route API trafic if the extension has been upgraded + if path_type == "api": + upgraded_extensions = list( + filter( + lambda ext: ext.endswith(f"/{path_name}"), + 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}" + if len(upgraded_extensions) != 0: + upgrade_path = upgraded_extensions[0] + tail = "/".join(rest) + scope["path"] = f"/upgrades/{upgrade_path}/{path_type}/{tail}" await self.app(scope, receive, send) From bdee9f46e352cd70fbb8c7513f5e3589c4275c6f Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 30 Nov 2022 11:16:10 +0200 Subject: [PATCH 015/168] refactor: put classes together --- lnbits/helpers.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/lnbits/helpers.py b/lnbits/helpers.py index 766fbcd2..72b72e2a 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -27,6 +27,17 @@ class Extension(NamedTuple): db_name: Optional[str] = None version: Optional[str] = "" +class InstallableExtension(NamedTuple): + id: str + name: str + archive: str + hash: str + short_description: Optional[str] = None + details: Optional[str] = None + icon: Optional[str] = None + dependencies: List[str] = [] + is_admin_only: bool = False + version: Optional[int] = 0 class ExtensionManager: def __init__(self, include_disabled_exts=False): @@ -119,18 +130,6 @@ class InstalledExtensionMiddleware: await self.app(scope, receive, send) -class InstallableExtension(NamedTuple): - id: str - name: str - archive: str - hash: str - short_description: Optional[str] = None - details: Optional[str] = None - icon: Optional[str] = None - dependencies: List[str] = [] - is_admin_only: bool = False - - def get_valid_extensions(include_disabled_exts=False) -> List[Extension]: return [ extension From 76cfaf93adb200d095fba8949b66d97515a609fe Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 22 Dec 2022 16:56:30 +0200 Subject: [PATCH 016/168] fix: merge issue --- lnbits/helpers.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lnbits/helpers.py b/lnbits/helpers.py index 72b72e2a..26eb6bd8 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -96,14 +96,12 @@ class InstalledExtensionMiddleware: self.app = app async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: - pathname = scope["path"].split("/")[1] - if pathname in settings.lnbits_disabled_extensions: - path_elements = scope["path"].split("/") - if len(path_elements) > 2: - _, path_name, path_type, *rest = path_elements - else: - _, path_name = path_elements - path_type = None + path_elements = scope["path"].split("/") + if len(path_elements) > 2: + _, path_name, path_type, *rest = path_elements + else: + _, path_name = path_elements + path_type = None # block path for all users if the extension is disabled if path_name in settings.LNBITS_DISABLED_EXTENSIONS: From 9dfeef15fd85b12bf76971f10203304eb703a48e Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 22 Dec 2022 16:59:14 +0200 Subject: [PATCH 017/168] fix: merge issue --- lnbits/core/views/api.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 9acfa9cd..d04d07c0 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -824,7 +824,18 @@ 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 + + + if module_installed: + # update upgraded extensions list if module already installed + ext_temp_path = f"{ext.hash}/{ext.code}" + clean_upgraded_exts = list( + filter( + lambda old_ext: old_ext.endswith(ext_temp_path), + settings.LNBITS_UPGRADED_EXTENSIONS, + ) + ) + settings.LNBITS_UPGRADED_EXTENSIONS = clean_upgraded_exts + [ext_temp_path] # mount routes at the very end core_app_extra.register_new_ext_routes(ext) @@ -878,9 +889,7 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_user_e settings.lnbits_disabled_extensions += [ext_id] # remove downloaded archive - ext_zip_file = os.path.join( - settings.lnbits_data_folder, "extensions", f"{ext_id}.zip" - ) + ext_zip_file = os.path.join(settings.lnbits_data_folder, "extensions", f"{ext_id}.zip") if os.path.isfile(ext_zip_file): os.remove(ext_zip_file) From 8c1479427d3381c2efa5475e52b3b221b8fe6210 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 22 Dec 2022 17:03:26 +0200 Subject: [PATCH 018/168] fix: merge issues --- lnbits/core/views/api.py | 4 ++-- lnbits/helpers.py | 5 +++-- lnbits/settings.py | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index d04d07c0..373c7bd5 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -832,10 +832,10 @@ async def api_install_extension( clean_upgraded_exts = list( filter( lambda old_ext: old_ext.endswith(ext_temp_path), - settings.LNBITS_UPGRADED_EXTENSIONS, + settings.lnbits_upgraded_extensions, ) ) - settings.LNBITS_UPGRADED_EXTENSIONS = clean_upgraded_exts + [ext_temp_path] + settings.lnbits_upgraded_extensions = clean_upgraded_exts + [ext_temp_path] # 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 26eb6bd8..6810d383 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -26,6 +26,7 @@ class Extension(NamedTuple): migration_module: Optional[str] = None db_name: Optional[str] = None version: Optional[str] = "" + hash: Optional[str] = "" class InstallableExtension(NamedTuple): id: str @@ -104,7 +105,7 @@ class InstalledExtensionMiddleware: path_type = None # block path for all users if the extension is disabled - if path_name in settings.LNBITS_DISABLED_EXTENSIONS: + if path_name in settings.lnbits_disabled_extensions: response = JSONResponse( status_code=HTTPStatus.NOT_FOUND, content={"detail": f"Extension '{path_name}' disabled"}, @@ -117,7 +118,7 @@ class InstalledExtensionMiddleware: upgraded_extensions = list( filter( lambda ext: ext.endswith(f"/{path_name}"), - g().config.LNBITS_UPGRADED_EXTENSIONS, + settings.lnbits_upgraded_extensions, ) ) if len(upgraded_extensions) != 0: diff --git a/lnbits/settings.py b/lnbits/settings.py index 44113d32..80680d5f 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: + lnbits_upgraded_extensions: List[str] = Field(default=[]) class ThemesSettings(LNbitsSettings): lnbits_site_title: str = Field(default="LNbits") From 6ec1a668ae1055c55873486cd12f089333d200c4 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 22 Dec 2022 17:07:27 +0200 Subject: [PATCH 019/168] chore: code format --- lnbits/core/views/api.py | 5 +++-- lnbits/settings.py | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 373c7bd5..6d6c3735 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -825,7 +825,6 @@ async def api_install_extension( await update_user_extension(user_id=USER_ID_ALL, extension=ext_id, active=False) settings.lnbits_disabled_extensions += [ext_id] - if module_installed: # update upgraded extensions list if module already installed ext_temp_path = f"{ext.hash}/{ext.code}" @@ -889,7 +888,9 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_user_e settings.lnbits_disabled_extensions += [ext_id] # remove downloaded archive - ext_zip_file = os.path.join(settings.lnbits_data_folder, "extensions", f"{ext_id}.zip") + ext_zip_file = os.path.join( + settings.lnbits_data_folder, "extensions", f"{ext_id}.zip" + ) if os.path.isfile(ext_zip_file): os.remove(ext_zip_file) diff --git a/lnbits/settings.py b/lnbits/settings.py index 80680d5f..a48bfc54 100644 --- a/lnbits/settings.py +++ b/lnbits/settings.py @@ -43,6 +43,7 @@ class UsersSettings(LNbitsSettings): lnbits_extensions_manifests: List[str] = Field(default=[]) lnbits_upgraded_extensions: List[str] = Field(default=[]) + class ThemesSettings(LNbitsSettings): lnbits_site_title: str = Field(default="LNbits") lnbits_site_tagline: str = Field(default="free and open-source lightning wallet") From 51c8e183d1312b24b2a78f4aeb661bd1a7077ab0 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 22 Dec 2022 17:07:41 +0200 Subject: [PATCH 020/168] fix: add `module_name` property --- lnbits/helpers.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lnbits/helpers.py b/lnbits/helpers.py index 6810d383..86cf8a92 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -25,9 +25,17 @@ class Extension(NamedTuple): hidden: bool = False migration_module: Optional[str] = None db_name: Optional[str] = None - version: Optional[str] = "" hash: Optional[str] = "" + @property + def module_name(self): + return ( + f"lnbits.extensions.{self.code}" + if self.hash == "" + else f"lnbits.upgrades.{self.code}-{self.hash}.{self.code}" + ) + + class InstallableExtension(NamedTuple): id: str name: str @@ -40,6 +48,7 @@ class InstallableExtension(NamedTuple): is_admin_only: bool = False version: Optional[int] = 0 + class ExtensionManager: def __init__(self, include_disabled_exts=False): self._disabled: List[str] = ( From a2201c9d31fa2e96256250d18bad516137372af7 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 22 Dec 2022 17:18:53 +0200 Subject: [PATCH 021/168] chore: add extra log --- lnbits/core/helpers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lnbits/core/helpers.py b/lnbits/core/helpers.py index d67756d0..7ff72d32 100644 --- a/lnbits/core/helpers.py +++ b/lnbits/core/helpers.py @@ -19,7 +19,8 @@ async def migrate_extension_database(ext, current_version): try: ext_migrations = importlib.import_module(f"{ext.module_name}.migrations") ext_db = importlib.import_module(ext.module_name).db - except ImportError: + except ImportError as e: + logger.error(e) raise ImportError( f"Please make sure that the extension `{ext.code}` has a migrations file." ) From cb24a6a4f9b4cd0505eba3b6998b60988c5165a0 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 10 Jan 2023 14:30:56 +0200 Subject: [PATCH 022/168] fix: rating star size --- lnbits/core/templates/core/install.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index d1484cd9..7ca22e15 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -110,7 +110,7 @@ Date: Tue, 10 Jan 2023 16:49:18 +0200 Subject: [PATCH 023/168] fix: avoid conflicts with `dbversions` table from `cashu` schema --- lnbits/commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/commands.py b/lnbits/commands.py index 66b45b93..0de584c4 100644 --- a/lnbits/commands.py +++ b/lnbits/commands.py @@ -68,7 +68,7 @@ async def migrate_databases(): ) elif conn.type in {POSTGRES, COCKROACH}: exists = await conn.fetchone( - "SELECT * FROM information_schema.tables WHERE table_name = 'dbversions'" + "SELECT * FROM information_schema.tables WHERE table_schema= 'public' AND table_name = 'dbversions'" ) if not exists: From 8f77c3f7bf6e289eb1cea7170374ad790011137e Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 10 Jan 2023 16:49:36 +0200 Subject: [PATCH 024/168] fix: handle no-path scenario --- lnbits/helpers.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lnbits/helpers.py b/lnbits/helpers.py index 86cf8a92..a9e583a7 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -106,6 +106,10 @@ class InstalledExtensionMiddleware: self.app = app async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: + if not "path" in scope: + await self.app(scope, receive, send) + return + path_elements = scope["path"].split("/") if len(path_elements) > 2: _, path_name, path_type, *rest = path_elements From ece7a82b3dec83fc8aae0b38717b385c55d72162 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 10 Jan 2023 16:49:55 +0200 Subject: [PATCH 025/168] fix: make function async --- lnbits/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/app.py b/lnbits/app.py index d70c6e8a..92c4105f 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -115,7 +115,7 @@ async def check_funding_source() -> None: ) -def check_installed_extensions(): +async def check_installed_extensions(): """ Check extensions that have been installed, but for some reason no longer present in the 'lnbits/extensions' directory. One reason might be a docker-container that was re-created. From cae71faf3768d397c57ced6c2f88f3a4daaf9d4c Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 10 Jan 2023 17:51:04 +0200 Subject: [PATCH 026/168] refactor: use the new `check_admin` --- lnbits/core/views/api.py | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 6d6c3735..690a3a7e 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -734,13 +734,8 @@ async def websocket_update_get(item_id: str, data: str): @core_app.post("/api/v1/extension/{ext_id}/{hash}") async def api_install_extension( - ext_id: str, hash: str, user: User = Depends(check_user_exists) + ext_id: str, hash: str, user: User = Depends(check_admin) ): - if not user.admin: - raise HTTPException( - status_code=HTTPStatus.UNAUTHORIZED, detail="Only for admin users" - ) - try: extension_list: List[InstallableExtension] = await get_installable_extensions() except Exception as ex: @@ -852,12 +847,7 @@ async def api_install_extension( @core_app.delete("/api/v1/extension/{ext_id}") -async def api_uninstall_extension(ext_id: str, user: User = Depends(check_user_exists)): - if not user.admin: - raise HTTPException( - status_code=HTTPStatus.UNAUTHORIZED, detail="Only for admin users" - ) - +async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin)): try: extension_list: List[InstallableExtension] = await get_installable_extensions() except Exception as ex: From cb6349fd7649c2bfae3258d3345a7f6c02230f0a Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 09:15:35 +0200 Subject: [PATCH 027/168] refactor: extract dome methods to helpers --- lnbits/core/helpers.py | 54 ++++++++++++++++++++++++++++++- lnbits/core/views/api.py | 69 +++++++--------------------------------- lnbits/helpers.py | 8 +++++ 3 files changed, 73 insertions(+), 58 deletions(-) diff --git a/lnbits/core/helpers.py b/lnbits/core/helpers.py index 7ff72d32..1dac5955 100644 --- a/lnbits/core/helpers.py +++ b/lnbits/core/helpers.py @@ -1,14 +1,16 @@ import hashlib import importlib +import os import re import urllib.request +from http import HTTPStatus from typing import List import httpx from fastapi.exceptions import HTTPException from loguru import logger -from lnbits.helpers import InstallableExtension +from lnbits.helpers import InstallableExtension, get_valid_extensions from lnbits.settings import settings from . import db as core_db @@ -76,6 +78,56 @@ async def get_installable_extensions() -> List[InstallableExtension]: return extension_list +async def get_installable_extension_meta( + ext_id: str, hash: str +) -> InstallableExtension: + installable_extensions: List[ + InstallableExtension + ] = await get_installable_extensions() + + valid_extensions = [ + e for e in installable_extensions if e.id == ext_id and e.hash == hash + ] + if len(valid_extensions) == 0: + raise HTTPException( + status_code=HTTPStatus.BAD_REQUEST, + detail=f"Unknown extension id: {ext_id}", + ) + extension = valid_extensions[0] + + # check that all dependecies are installed + installed_extensions = list(map(lambda e: e.code, get_valid_extensions(True))) + if not set(extension.dependencies).issubset(installed_extensions): + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Not all dependencies are installed: {extension.dependencies}", + ) + + return extension + + +def download_extension_archive(archive: str, ext_zip_file: str, hash: str): + if os.path.isfile(ext_zip_file): + os.remove(ext_zip_file) + try: + download_url(archive, ext_zip_file) + except Exception as ex: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail="Cannot fetch extension archive file", + ) + + archive_hash = file_hash(ext_zip_file) + if hash != archive_hash: + # remove downloaded archive + if os.path.isfile(ext_zip_file): + os.remove(ext_zip_file) + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail="File hash missmatch. Will not install.", + ) + + def download_url(url, save_path): with urllib.request.urlopen(url) as dl_file: with open(save_path, "wb") as out_file: diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 690a3a7e..b22ca838 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -39,8 +39,9 @@ from starlette.responses import StreamingResponse from lnbits import bolt11, lnurl from lnbits.core.helpers import ( - download_url, + download_extension_archive, file_hash, + get_installable_extension_meta, get_installable_extensions, migrate_extension_database, ) @@ -736,80 +737,34 @@ async def websocket_update_get(item_id: str, data: str): async def api_install_extension( ext_id: str, hash: str, user: User = Depends(check_admin) ): - try: - extension_list: List[InstallableExtension] = await get_installable_extensions() - except Exception as ex: - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail="Cannot fetch installable extension list", - ) - extensions = [e for e in extension_list if e.id == ext_id and e.hash == hash] - if len(extensions) == 0: - raise HTTPException( - status_code=HTTPStatus.BAD_REQUEST, - detail=f"Unknown extension id: {ext_id}", - ) - extension = extensions[0] + ext_meta: InstallableExtension = await get_installable_extension_meta(ext_id, hash) - # check that all dependecies are installed - installed_extensions = list(map(lambda e: e.code, get_valid_extensions(True))) - if not set(extension.dependencies).issubset(installed_extensions): - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail=f"Not all dependencies are installed: {extension.dependencies}", - ) - - # move files to the right location - extensions_data_dir = os.path.join(settings.lnbits_data_folder, "extensions") - os.makedirs(extensions_data_dir, exist_ok=True) - ext_data_dir = os.path.join(extensions_data_dir, ext_id) - shutil.rmtree(ext_data_dir, True) - ext_zip_file = os.path.join(extensions_data_dir, f"{ext_id}.zip") - if os.path.isfile(ext_zip_file): - os.remove(ext_zip_file) - - try: - download_url(extension.archive, ext_zip_file) - except Exception as ex: - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail="Cannot fetch extension archive file", - ) - - archive_hash = file_hash(ext_zip_file) - if extension.hash != archive_hash: - # remove downloaded archive - if os.path.isfile(ext_zip_file): - os.remove(ext_zip_file) - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail="File hash missmatch. Will not install.", - ) + download_extension_archive(ext_meta.archive, ext_meta.zip_path, ext_meta.hash) try: ext_dir = os.path.join("lnbits/extensions", ext_id) shutil.rmtree(ext_dir, True) - with zipfile.ZipFile(ext_zip_file, "r") as zip_ref: + with zipfile.ZipFile(ext_meta.zip_path, "r") as zip_ref: zip_ref.extractall("lnbits/extensions") ext_upgrade_dir = os.path.join( - "lnbits/upgrades", f"{extension.id}-{extension.hash}" + "lnbits/upgrades", f"{ext_meta.id}-{ext_meta.hash}" ) os.makedirs("lnbits/upgrades", exist_ok=True) shutil.rmtree(ext_upgrade_dir, True) - with zipfile.ZipFile(ext_zip_file, "r") as zip_ref: + with zipfile.ZipFile(ext_meta.zip_path, "r") as zip_ref: zip_ref.extractall(ext_upgrade_dir) module_name = f"lnbits.extensions.{ext_id}" module_installed = module_name in sys.modules # todo: is admin only ext = Extension( - code=extension.id, + code=ext_meta.id, is_valid=True, is_admin_only=False, - name=extension.name, - hash=extension.hash if module_installed else "", + name=ext_meta.name, + hash=ext_meta.hash if module_installed else "", ) current_versions = await get_dbversions() @@ -836,8 +791,8 @@ async def api_install_extension( except Exception as ex: logger.warning(ex) # remove downloaded archive - if os.path.isfile(ext_zip_file): - os.remove(ext_zip_file) + if os.path.isfile(ext_meta.zip_path): + os.remove(ext_meta.zip_path) # remove module from extensions shutil.rmtree(ext_dir, True) diff --git a/lnbits/helpers.py b/lnbits/helpers.py index a9e583a7..522e9b00 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -48,6 +48,14 @@ class InstallableExtension(NamedTuple): is_admin_only: bool = False version: Optional[int] = 0 + @property + def zip_path(self): + extensions_data_dir = os.path.join(settings.lnbits_data_folder, "extensions") + os.makedirs(extensions_data_dir, exist_ok=True) + ext_data_dir = os.path.join(extensions_data_dir, self.id) + shutil.rmtree(ext_data_dir, True) + return os.path.join(extensions_data_dir, f"{self.id}.zip") + class ExtensionManager: def __init__(self, include_disabled_exts=False): From 3ed2b3cdeb471526255cf7a1e9712a485f4272c4 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 10:25:09 +0200 Subject: [PATCH 028/168] refactor: move more logic to `InstallableExtension` --- lnbits/core/helpers.py | 104 ----------------------------------- lnbits/core/views/api.py | 41 ++++++-------- lnbits/core/views/generic.py | 5 +- lnbits/helpers.py | 103 +++++++++++++++++++++++++++++++++- 4 files changed, 121 insertions(+), 132 deletions(-) diff --git a/lnbits/core/helpers.py b/lnbits/core/helpers.py index 1dac5955..9c198b2b 100644 --- a/lnbits/core/helpers.py +++ b/lnbits/core/helpers.py @@ -1,18 +1,8 @@ -import hashlib import importlib -import os import re -import urllib.request -from http import HTTPStatus -from typing import List -import httpx -from fastapi.exceptions import HTTPException from loguru import logger -from lnbits.helpers import InstallableExtension, get_valid_extensions -from lnbits.settings import settings - from . import db as core_db from .crud import update_migration_version @@ -48,97 +38,3 @@ async def run_migration(db, migrations_module, current_version): else: async with core_db.connect() as conn: await update_migration_version(conn, db_name, version) - - -async def get_installable_extensions() -> List[InstallableExtension]: - extension_list: List[InstallableExtension] = [] - - async with httpx.AsyncClient() as client: - for url in settings.lnbits_extensions_manifests: - resp = await client.get(url) - if resp.status_code != 200: - raise HTTPException( - status_code=404, - detail=f"Unable to fetch extension list for repository: {url}", - ) - for e in resp.json()["extensions"]: - extension_list += [ - InstallableExtension( - id=e["id"], - name=e["name"], - archive=e["archive"], - hash=e["hash"], - short_description=e["shortDescription"], - details=e["details"] if "details" in e else "", - icon=e["icon"], - dependencies=e["dependencies"] if "dependencies" in e else [], - ) - ] - - return extension_list - - -async def get_installable_extension_meta( - ext_id: str, hash: str -) -> InstallableExtension: - installable_extensions: List[ - InstallableExtension - ] = await get_installable_extensions() - - valid_extensions = [ - e for e in installable_extensions if e.id == ext_id and e.hash == hash - ] - if len(valid_extensions) == 0: - raise HTTPException( - status_code=HTTPStatus.BAD_REQUEST, - detail=f"Unknown extension id: {ext_id}", - ) - extension = valid_extensions[0] - - # check that all dependecies are installed - installed_extensions = list(map(lambda e: e.code, get_valid_extensions(True))) - if not set(extension.dependencies).issubset(installed_extensions): - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail=f"Not all dependencies are installed: {extension.dependencies}", - ) - - return extension - - -def download_extension_archive(archive: str, ext_zip_file: str, hash: str): - if os.path.isfile(ext_zip_file): - os.remove(ext_zip_file) - try: - download_url(archive, ext_zip_file) - except Exception as ex: - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail="Cannot fetch extension archive file", - ) - - archive_hash = file_hash(ext_zip_file) - if hash != archive_hash: - # remove downloaded archive - if os.path.isfile(ext_zip_file): - os.remove(ext_zip_file) - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail="File hash missmatch. Will not install.", - ) - - -def download_url(url, save_path): - with urllib.request.urlopen(url) as dl_file: - with open(save_path, "wb") as out_file: - out_file.write(dl_file.read()) - - -def file_hash(filename): - h = hashlib.sha256() - b = bytearray(128 * 1024) - mv = memoryview(b) - with open(filename, "rb", buffering=0) as f: - while n := f.readinto(mv): - h.update(mv[:n]) - return h.hexdigest() diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index b22ca838..fde40275 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -1,6 +1,5 @@ import asyncio import hashlib -import importlib import inspect import json import os @@ -30,26 +29,18 @@ from fastapi import ( ) from fastapi.exceptions import HTTPException from fastapi.params import Body -from genericpath import isfile from loguru import logger from pydantic import BaseModel from pydantic.fields import Field -from sse_starlette.sse import EventSourceResponse, ServerSentEvent +from sse_starlette.sse import EventSourceResponse from starlette.responses import StreamingResponse from lnbits import bolt11, lnurl -from lnbits.core.helpers import ( - download_extension_archive, - file_hash, - get_installable_extension_meta, - get_installable_extensions, - migrate_extension_database, -) +from lnbits.core.helpers import migrate_extension_database from lnbits.core.models import Payment, User, Wallet from lnbits.decorators import ( WalletTypeInfo, check_admin, - check_user_exists, get_key_type, require_admin_key, require_invoice_key, @@ -737,34 +728,34 @@ async def websocket_update_get(item_id: str, data: str): async def api_install_extension( ext_id: str, hash: str, user: User = Depends(check_admin) ): - - ext_meta: InstallableExtension = await get_installable_extension_meta(ext_id, hash) - - download_extension_archive(ext_meta.archive, ext_meta.zip_path, ext_meta.hash) + ext_info: InstallableExtension = await InstallableExtension.get_extension_info( + ext_id, hash + ) + ext_info.download_archive() try: ext_dir = os.path.join("lnbits/extensions", ext_id) shutil.rmtree(ext_dir, True) - with zipfile.ZipFile(ext_meta.zip_path, "r") as zip_ref: + with zipfile.ZipFile(ext_info.zip_path, "r") as zip_ref: zip_ref.extractall("lnbits/extensions") ext_upgrade_dir = os.path.join( - "lnbits/upgrades", f"{ext_meta.id}-{ext_meta.hash}" + "lnbits/upgrades", f"{ext_info.id}-{ext_info.hash}" ) os.makedirs("lnbits/upgrades", exist_ok=True) shutil.rmtree(ext_upgrade_dir, True) - with zipfile.ZipFile(ext_meta.zip_path, "r") as zip_ref: + with zipfile.ZipFile(ext_info.zip_path, "r") as zip_ref: zip_ref.extractall(ext_upgrade_dir) module_name = f"lnbits.extensions.{ext_id}" module_installed = module_name in sys.modules # todo: is admin only ext = Extension( - code=ext_meta.id, + code=ext_info.id, is_valid=True, is_admin_only=False, - name=ext_meta.name, - hash=ext_meta.hash if module_installed else "", + name=ext_info.name, + hash=ext_info.hash if module_installed else "", ) current_versions = await get_dbversions() @@ -791,8 +782,8 @@ async def api_install_extension( except Exception as ex: logger.warning(ex) # remove downloaded archive - if os.path.isfile(ext_meta.zip_path): - os.remove(ext_meta.zip_path) + if os.path.isfile(ext_info.zip_path): + os.remove(ext_info.zip_path) # remove module from extensions shutil.rmtree(ext_dir, True) @@ -804,7 +795,9 @@ async def api_install_extension( @core_app.delete("/api/v1/extension/{ext_id}") async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin)): try: - extension_list: List[InstallableExtension] = await get_installable_extensions() + extension_list: List[ + InstallableExtension + ] = await InstallableExtension.get_installable_extensions() except Exception as ex: raise HTTPException( status_code=HTTPStatus.NOT_FOUND, diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index d14a43f6..04862e62 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -11,7 +11,6 @@ from pydantic.types import UUID4 from starlette.responses import HTMLResponse, JSONResponse from lnbits.core import db -from lnbits.core.helpers import get_installable_extensions from lnbits.core.models import User from lnbits.decorators import check_admin, check_user_exists from lnbits.helpers import template_renderer, url_for @@ -81,7 +80,9 @@ async def extensions_install( ) try: - extension_list: List[InstallableExtension] = await get_installable_extensions() + extension_list: List[ + InstallableExtension + ] = await InstallableExtension.get_installable_extensions() except Exception as ex: logger.warning(ex) raise HTTPException( diff --git a/lnbits/helpers.py b/lnbits/helpers.py index 522e9b00..cece852d 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -1,12 +1,18 @@ import glob +import hashlib import json import os +import shutil +import urllib.request from http import HTTPStatus from typing import Any, List, NamedTuple, Optional +import httpx import jinja2 import shortuuid # type: ignore +from fastapi.exceptions import HTTPException from fastapi.responses import JSONResponse +from loguru import logger from starlette.types import ASGIApp, Receive, Scope, Send from lnbits.jinja2_templating import Jinja2Templates @@ -52,10 +58,87 @@ class InstallableExtension(NamedTuple): def zip_path(self): extensions_data_dir = os.path.join(settings.lnbits_data_folder, "extensions") os.makedirs(extensions_data_dir, exist_ok=True) - ext_data_dir = os.path.join(extensions_data_dir, self.id) - shutil.rmtree(ext_data_dir, True) return os.path.join(extensions_data_dir, f"{self.id}.zip") + def download_archive(self): + ext_zip_file = self.zip_path + if os.path.isfile(ext_zip_file): + os.remove(ext_zip_file) + try: + download_url(self.archive, ext_zip_file) + except Exception as ex: + logger.warning(ex) + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail="Cannot fetch extension archive file", + ) + + archive_hash = file_hash(ext_zip_file) + if self.hash != archive_hash: + # remove downloaded archive + if os.path.isfile(ext_zip_file): + os.remove(ext_zip_file) + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail="File hash missmatch. Will not install.", + ) + + @classmethod + async def get_extension_info(cls, ext_id: str, hash: str) -> "InstallableExtension": + installable_extensions: List[ + InstallableExtension + ] = await InstallableExtension.get_installable_extensions() + + valid_extensions = [ + e for e in installable_extensions if e.id == ext_id and e.hash == hash + ] + if len(valid_extensions) == 0: + raise HTTPException( + status_code=HTTPStatus.BAD_REQUEST, + detail=f"Unknown extension id: {ext_id}", + ) + extension = valid_extensions[0] + + # check that all dependecies are installed + installed_extensions = list(map(lambda e: e.code, get_valid_extensions(True))) + if not set(extension.dependencies).issubset(installed_extensions): + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Not all dependencies are installed: {extension.dependencies}", + ) + + return extension + + @classmethod + async def get_installable_extensions(cls) -> List["InstallableExtension"]: + extension_list: List[InstallableExtension] = [] + + async with httpx.AsyncClient() as client: + for url in settings.lnbits_extensions_manifests: + resp = await client.get(url) + if resp.status_code != 200: + raise HTTPException( + status_code=404, + detail=f"Unable to fetch extension list for repository: {url}", + ) + for e in resp.json()["extensions"]: + extension_list += [ + InstallableExtension( + id=e["id"], + name=e["name"], + archive=e["archive"], + hash=e["hash"], + short_description=e["shortDescription"], + details=e["details"] if "details" in e else "", + icon=e["icon"], + dependencies=e["dependencies"] + if "dependencies" in e + else [], + ) + ] + + return extension_list + class ExtensionManager: def __init__(self, include_disabled_exts=False): @@ -289,3 +372,19 @@ def get_current_extension_name() -> str: except: ext_name = extension_director_name return ext_name + + +def download_url(url, save_path): + with urllib.request.urlopen(url) as dl_file: + with open(save_path, "wb") as out_file: + out_file.write(dl_file.read()) + + +def file_hash(filename): + h = hashlib.sha256() + b = bytearray(128 * 1024) + mv = memoryview(b) + with open(filename, "rb", buffering=0) as f: + while n := f.readinto(mv): + h.update(mv[:n]) + return h.hexdigest() From 1b07768b76914c9c53f1521518c158a7ec9eb9b0 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 10:30:15 +0200 Subject: [PATCH 029/168] refactor: use `check_admin` decorator --- lnbits/core/views/generic.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 04862e62..1510df37 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -70,15 +70,10 @@ async def extensions( ) async def extensions_install( request: Request, - user: User = Depends(check_user_exists), # type: ignore - activate: str = Query(None), # type: ignore - deactivate: str = Query(None), # type: ignore + user: User = Depends(check_admin), + activate: str = Query(None), + deactivate: str = Query(None), ): - if not user.admin: - raise HTTPException( - status_code=HTTPStatus.UNAUTHORIZED, detail="Only for admin users" - ) - try: extension_list: List[ InstallableExtension From e7a150e708935282b47e7e107faf4d75686a3889 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 10:57:19 +0200 Subject: [PATCH 030/168] refactor: move more logic to `InstallableExtension` --- lnbits/core/helpers.py | 4 +++- lnbits/core/views/api.py | 29 +++++++---------------------- lnbits/helpers.py | 27 ++++++++++++++++++++++++++- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/lnbits/core/helpers.py b/lnbits/core/helpers.py index 9c198b2b..4cd5edbc 100644 --- a/lnbits/core/helpers.py +++ b/lnbits/core/helpers.py @@ -3,11 +3,13 @@ import re from loguru import logger +from lnbits.helpers import Extension + from . import db as core_db from .crud import update_migration_version -async def migrate_extension_database(ext, current_version): +async def migrate_extension_database(ext: Extension, current_version): try: ext_migrations = importlib.import_module(f"{ext.module_name}.migrations") ext_db = importlib.import_module(ext.module_name).db diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index fde40275..649305e0 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -7,7 +7,6 @@ import shutil import sys import time import uuid -import zipfile from http import HTTPStatus from io import BytesIO from pathlib import Path @@ -731,42 +730,28 @@ async def api_install_extension( ext_info: InstallableExtension = await InstallableExtension.get_extension_info( ext_id, hash ) - ext_info.download_archive() try: - ext_dir = os.path.join("lnbits/extensions", ext_id) - shutil.rmtree(ext_dir, True) - with zipfile.ZipFile(ext_info.zip_path, "r") as zip_ref: - zip_ref.extractall("lnbits/extensions") + ext_info.download_archive() + ext_info.extract_archive() - ext_upgrade_dir = os.path.join( - "lnbits/upgrades", f"{ext_info.id}-{ext_info.hash}" - ) - os.makedirs("lnbits/upgrades", exist_ok=True) - shutil.rmtree(ext_upgrade_dir, True) - with zipfile.ZipFile(ext_info.zip_path, "r") as zip_ref: - zip_ref.extractall(ext_upgrade_dir) - - module_name = f"lnbits.extensions.{ext_id}" - module_installed = module_name in sys.modules # todo: is admin only ext = Extension( code=ext_info.id, is_valid=True, is_admin_only=False, name=ext_info.name, - hash=ext_info.hash if module_installed else "", + hash=ext_info.hash if ext_info.module_installed else "", ) - current_versions = await get_dbversions() - current_version = current_versions.get(ext.code, 0) - await migrate_extension_database(ext, current_version) # todo: use new module + db_version = (await get_dbversions()).get(ext.code, 0) + await migrate_extension_database(ext, db_version) # todo: use new module # disable by default await update_user_extension(user_id=USER_ID_ALL, extension=ext_id, active=False) settings.lnbits_disabled_extensions += [ext_id] - if module_installed: + if ext_info.module_installed: # update upgraded extensions list if module already installed ext_temp_path = f"{ext.hash}/{ext.code}" clean_upgraded_exts = list( @@ -786,7 +771,7 @@ async def api_install_extension( os.remove(ext_info.zip_path) # remove module from extensions - shutil.rmtree(ext_dir, True) + shutil.rmtree(ext_info.ext_dir, True) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex) ) diff --git a/lnbits/helpers.py b/lnbits/helpers.py index cece852d..d8d4bd3d 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -3,7 +3,9 @@ import hashlib import json import os import shutil +import sys import urllib.request +import zipfile from http import HTTPStatus from typing import Any, List, NamedTuple, Optional @@ -55,11 +57,23 @@ class InstallableExtension(NamedTuple): version: Optional[int] = 0 @property - def zip_path(self): + def zip_path(self) -> str: extensions_data_dir = os.path.join(settings.lnbits_data_folder, "extensions") os.makedirs(extensions_data_dir, exist_ok=True) return os.path.join(extensions_data_dir, f"{self.id}.zip") + @property + def ext_dir(self) -> str: + return os.path.join("lnbits", "extensions", self.id) + + @property + def module_name(self) -> str: + return f"lnbits.extensions.{self.id}" + + @property + def module_installed(self) -> bool: + return self.module_name in sys.modules + def download_archive(self): ext_zip_file = self.zip_path if os.path.isfile(ext_zip_file): @@ -83,6 +97,17 @@ class InstallableExtension(NamedTuple): detail="File hash missmatch. Will not install.", ) + def extract_archive(self): + shutil.rmtree(self.ext_dir, True) + with zipfile.ZipFile(self.zip_path, "r") as zip_ref: + zip_ref.extractall(os.path.join("lnbits", "extensions")) + + ext_upgrade_dir = os.path.join("lnbits", "upgrades", f"{self.id}-{self.hash}") + os.makedirs(os.path.join("lnbits", "upgrades"), exist_ok=True) + shutil.rmtree(ext_upgrade_dir, True) + with zipfile.ZipFile(self.zip_path, "r") as zip_ref: + zip_ref.extractall(ext_upgrade_dir) + @classmethod async def get_extension_info(cls, ext_id: str, hash: str) -> "InstallableExtension": installable_extensions: List[ From 795d05c109b314586a24ce75880995ad1170edb7 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 11:16:21 +0200 Subject: [PATCH 031/168] refactor: extract `extensions.py` --- lnbits/app.py | 4 +- lnbits/commands.py | 8 +- lnbits/core/helpers.py | 2 +- lnbits/core/views/api.py | 8 +- lnbits/core/views/generic.py | 2 +- lnbits/extensions.py | 277 +++++++++++++++++++++++++++++++++++ lnbits/helpers.py | 275 +--------------------------------- 7 files changed, 286 insertions(+), 290 deletions(-) create mode 100644 lnbits/extensions.py diff --git a/lnbits/app.py b/lnbits/app.py index 92c4105f..3c848c9d 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -26,12 +26,10 @@ from .commands import migrate_databases from .core import core_app, core_app_extra from .core.services import check_admin_settings from .core.views.generic import core_html_routes +from .extensions import Extension, InstalledExtensionMiddleware, get_valid_extensions from .helpers import ( - Extension, - InstalledExtensionMiddleware, get_css_vendored, get_js_vendored, - get_valid_extensions, template_renderer, url_for_vendored, ) diff --git a/lnbits/commands.py b/lnbits/commands.py index 0de584c4..4f8ef260 100644 --- a/lnbits/commands.py +++ b/lnbits/commands.py @@ -14,12 +14,8 @@ from .core import migrations as core_migrations from .core.crud import USER_ID_ALL, get_dbversions, get_inactive_extensions from .core.helpers import migrate_extension_database, run_migration from .db import COCKROACH, POSTGRES, SQLITE -from .helpers import ( - get_css_vendored, - get_js_vendored, - get_valid_extensions, - url_for_vendored, -) +from .extensions import get_valid_extensions +from .helpers import get_css_vendored, get_js_vendored, url_for_vendored @click.command("migrate") diff --git a/lnbits/core/helpers.py b/lnbits/core/helpers.py index 4cd5edbc..78d188d2 100644 --- a/lnbits/core/helpers.py +++ b/lnbits/core/helpers.py @@ -3,7 +3,7 @@ import re from loguru import logger -from lnbits.helpers import Extension +from lnbits.extensions import Extension from . import db as core_db from .crud import update_migration_version diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 649305e0..182467a4 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -44,12 +44,8 @@ from lnbits.decorators import ( require_admin_key, require_invoice_key, ) -from lnbits.helpers import ( - Extension, - InstallableExtension, - get_valid_extensions, - url_for, -) +from lnbits.extensions import Extension, InstallableExtension, get_valid_extensions +from lnbits.helpers import url_for from lnbits.settings import get_wallet_class, settings from lnbits.utils.exchange_rates import ( currencies, diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 1510df37..2c81fc31 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -16,7 +16,7 @@ from lnbits.decorators import check_admin, check_user_exists from lnbits.helpers import template_renderer, url_for from lnbits.settings import get_wallet_class, settings -from ...helpers import InstallableExtension, get_valid_extensions +from ...extensions import InstallableExtension, get_valid_extensions from ..crud import ( USER_ID_ALL, create_account, diff --git a/lnbits/extensions.py b/lnbits/extensions.py new file mode 100644 index 00000000..9f45b196 --- /dev/null +++ b/lnbits/extensions.py @@ -0,0 +1,277 @@ +import hashlib +import json +import os +import shutil +import sys +import urllib.request +import zipfile +from http import HTTPStatus +from typing import List, NamedTuple, Optional + +import httpx +from fastapi.exceptions import HTTPException +from fastapi.responses import JSONResponse +from loguru import logger +from starlette.types import ASGIApp, Receive, Scope, Send + +from lnbits.settings import settings + + +class Extension(NamedTuple): + code: str + is_valid: bool + is_admin_only: bool + name: Optional[str] = None + short_description: Optional[str] = None + tile: Optional[str] = None + contributors: Optional[List[str]] = None + hidden: bool = False + migration_module: Optional[str] = None + db_name: Optional[str] = None + hash: Optional[str] = "" + + @property + def module_name(self): + return ( + f"lnbits.extensions.{self.code}" + if self.hash == "" + else f"lnbits.upgrades.{self.code}-{self.hash}.{self.code}" + ) + + +class ExtensionManager: + def __init__(self, include_disabled_exts=False): + self._disabled: List[str] = ( + [] if include_disabled_exts else settings.lnbits_disabled_extensions + ) + self._admin_only: List[str] = settings.lnbits_admin_extensions + self._extension_folders: List[str] = [ + x[1] for x in os.walk(os.path.join(settings.lnbits_path, "extensions")) + ][0] + + @property + def extensions(self) -> List[Extension]: + output: List[Extension] = [] + + if "all" in self._disabled: + return output + + for extension in [ + ext for ext in self._extension_folders if ext not in self._disabled + ]: + try: + with open( + os.path.join( + settings.lnbits_path, "extensions", extension, "config.json" + ) + ) as json_file: + config = json.load(json_file) + is_valid = True + is_admin_only = True if extension in self._admin_only else False + except Exception: + config = {} + is_valid = False + is_admin_only = False + + output.append( + Extension( + extension, + is_valid, + is_admin_only, + config.get("name"), + config.get("short_description"), + config.get("tile"), + config.get("contributors"), + config.get("hidden") or False, + config.get("migration_module"), + config.get("db_name"), + ) + ) + + return output + + +class InstallableExtension(NamedTuple): + id: str + name: str + archive: str + hash: str + short_description: Optional[str] = None + details: Optional[str] = None + icon: Optional[str] = None + dependencies: List[str] = [] + is_admin_only: bool = False + version: Optional[int] = 0 + + @property + def zip_path(self) -> str: + extensions_data_dir = os.path.join(settings.lnbits_data_folder, "extensions") + os.makedirs(extensions_data_dir, exist_ok=True) + return os.path.join(extensions_data_dir, f"{self.id}.zip") + + @property + def ext_dir(self) -> str: + return os.path.join("lnbits", "extensions", self.id) + + @property + def module_name(self) -> str: + return f"lnbits.extensions.{self.id}" + + @property + def module_installed(self) -> bool: + return self.module_name in sys.modules + + def download_archive(self): + ext_zip_file = self.zip_path + if os.path.isfile(ext_zip_file): + os.remove(ext_zip_file) + try: + download_url(self.archive, ext_zip_file) + except Exception as ex: + logger.warning(ex) + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail="Cannot fetch extension archive file", + ) + + archive_hash = file_hash(ext_zip_file) + if self.hash != archive_hash: + # remove downloaded archive + if os.path.isfile(ext_zip_file): + os.remove(ext_zip_file) + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail="File hash missmatch. Will not install.", + ) + + def extract_archive(self): + shutil.rmtree(self.ext_dir, True) + with zipfile.ZipFile(self.zip_path, "r") as zip_ref: + zip_ref.extractall(os.path.join("lnbits", "extensions")) + + ext_upgrade_dir = os.path.join("lnbits", "upgrades", f"{self.id}-{self.hash}") + os.makedirs(os.path.join("lnbits", "upgrades"), exist_ok=True) + shutil.rmtree(ext_upgrade_dir, True) + with zipfile.ZipFile(self.zip_path, "r") as zip_ref: + zip_ref.extractall(ext_upgrade_dir) + + @classmethod + async def get_extension_info(cls, ext_id: str, hash: str) -> "InstallableExtension": + installable_extensions: List[ + InstallableExtension + ] = await InstallableExtension.get_installable_extensions() + + valid_extensions = [ + e for e in installable_extensions if e.id == ext_id and e.hash == hash + ] + if len(valid_extensions) == 0: + raise HTTPException( + status_code=HTTPStatus.BAD_REQUEST, + detail=f"Unknown extension id: {ext_id}", + ) + extension = valid_extensions[0] + + # check that all dependecies are installed + installed_extensions = list(map(lambda e: e.code, get_valid_extensions(True))) + if not set(extension.dependencies).issubset(installed_extensions): + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Not all dependencies are installed: {extension.dependencies}", + ) + + return extension + + @classmethod + async def get_installable_extensions(cls) -> List["InstallableExtension"]: + extension_list: List[InstallableExtension] = [] + + async with httpx.AsyncClient() as client: + for url in settings.lnbits_extensions_manifests: + resp = await client.get(url) + if resp.status_code != 200: + raise HTTPException( + status_code=404, + detail=f"Unable to fetch extension list for repository: {url}", + ) + for e in resp.json()["extensions"]: + extension_list += [ + InstallableExtension( + id=e["id"], + name=e["name"], + archive=e["archive"], + hash=e["hash"], + short_description=e["shortDescription"], + details=e["details"] if "details" in e else "", + icon=e["icon"], + dependencies=e["dependencies"] + if "dependencies" in e + else [], + ) + ] + + return extension_list + + +class InstalledExtensionMiddleware: + def __init__(self, app: ASGIApp) -> None: + self.app = app + + async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: + if not "path" in scope: + await self.app(scope, receive, send) + return + + path_elements = scope["path"].split("/") + if len(path_elements) > 2: + _, path_name, path_type, *rest = path_elements + else: + _, path_name = path_elements + path_type = None + + # block path for all users if the extension is disabled + if path_name in settings.lnbits_disabled_extensions: + response = JSONResponse( + status_code=HTTPStatus.NOT_FOUND, + content={"detail": f"Extension '{path_name}' disabled"}, + ) + await response(scope, receive, send) + return + + # re-route API trafic if the extension has been upgraded + if path_type == "api": + upgraded_extensions = list( + filter( + lambda ext: ext.endswith(f"/{path_name}"), + settings.lnbits_upgraded_extensions, + ) + ) + if len(upgraded_extensions) != 0: + upgrade_path = upgraded_extensions[0] + tail = "/".join(rest) + scope["path"] = f"/upgrades/{upgrade_path}/{path_type}/{tail}" + + await self.app(scope, receive, send) + + +def get_valid_extensions(include_disabled_exts=False) -> List[Extension]: + return [ + extension + for extension in ExtensionManager(include_disabled_exts).extensions + if extension.is_valid + ] + + +def download_url(url, save_path): + with urllib.request.urlopen(url) as dl_file: + with open(save_path, "wb") as out_file: + out_file.write(dl_file.read()) + + +def file_hash(filename): + h = hashlib.sha256() + b = bytearray(128 * 1024) + mv = memoryview(b) + with open(filename, "rb", buffering=0) as f: + while n := f.readinto(mv): + h.update(mv[:n]) + return h.hexdigest() diff --git a/lnbits/helpers.py b/lnbits/helpers.py index d8d4bd3d..edbd908c 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -1,270 +1,15 @@ import glob -import hashlib -import json import os -import shutil -import sys -import urllib.request -import zipfile -from http import HTTPStatus -from typing import Any, List, NamedTuple, Optional +from typing import Any, List, Optional -import httpx import jinja2 import shortuuid # type: ignore -from fastapi.exceptions import HTTPException -from fastapi.responses import JSONResponse -from loguru import logger -from starlette.types import ASGIApp, Receive, Scope, Send from lnbits.jinja2_templating import Jinja2Templates from lnbits.requestvars import g from lnbits.settings import settings - -class Extension(NamedTuple): - code: str - is_valid: bool - is_admin_only: bool - name: Optional[str] = None - short_description: Optional[str] = None - tile: Optional[str] = None - contributors: Optional[List[str]] = None - hidden: bool = False - migration_module: Optional[str] = None - db_name: Optional[str] = None - hash: Optional[str] = "" - - @property - def module_name(self): - return ( - f"lnbits.extensions.{self.code}" - if self.hash == "" - else f"lnbits.upgrades.{self.code}-{self.hash}.{self.code}" - ) - - -class InstallableExtension(NamedTuple): - id: str - name: str - archive: str - hash: str - short_description: Optional[str] = None - details: Optional[str] = None - icon: Optional[str] = None - dependencies: List[str] = [] - is_admin_only: bool = False - version: Optional[int] = 0 - - @property - def zip_path(self) -> str: - extensions_data_dir = os.path.join(settings.lnbits_data_folder, "extensions") - os.makedirs(extensions_data_dir, exist_ok=True) - return os.path.join(extensions_data_dir, f"{self.id}.zip") - - @property - def ext_dir(self) -> str: - return os.path.join("lnbits", "extensions", self.id) - - @property - def module_name(self) -> str: - return f"lnbits.extensions.{self.id}" - - @property - def module_installed(self) -> bool: - return self.module_name in sys.modules - - def download_archive(self): - ext_zip_file = self.zip_path - if os.path.isfile(ext_zip_file): - os.remove(ext_zip_file) - try: - download_url(self.archive, ext_zip_file) - except Exception as ex: - logger.warning(ex) - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail="Cannot fetch extension archive file", - ) - - archive_hash = file_hash(ext_zip_file) - if self.hash != archive_hash: - # remove downloaded archive - if os.path.isfile(ext_zip_file): - os.remove(ext_zip_file) - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail="File hash missmatch. Will not install.", - ) - - def extract_archive(self): - shutil.rmtree(self.ext_dir, True) - with zipfile.ZipFile(self.zip_path, "r") as zip_ref: - zip_ref.extractall(os.path.join("lnbits", "extensions")) - - ext_upgrade_dir = os.path.join("lnbits", "upgrades", f"{self.id}-{self.hash}") - os.makedirs(os.path.join("lnbits", "upgrades"), exist_ok=True) - shutil.rmtree(ext_upgrade_dir, True) - with zipfile.ZipFile(self.zip_path, "r") as zip_ref: - zip_ref.extractall(ext_upgrade_dir) - - @classmethod - async def get_extension_info(cls, ext_id: str, hash: str) -> "InstallableExtension": - installable_extensions: List[ - InstallableExtension - ] = await InstallableExtension.get_installable_extensions() - - valid_extensions = [ - e for e in installable_extensions if e.id == ext_id and e.hash == hash - ] - if len(valid_extensions) == 0: - raise HTTPException( - status_code=HTTPStatus.BAD_REQUEST, - detail=f"Unknown extension id: {ext_id}", - ) - extension = valid_extensions[0] - - # check that all dependecies are installed - installed_extensions = list(map(lambda e: e.code, get_valid_extensions(True))) - if not set(extension.dependencies).issubset(installed_extensions): - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail=f"Not all dependencies are installed: {extension.dependencies}", - ) - - return extension - - @classmethod - async def get_installable_extensions(cls) -> List["InstallableExtension"]: - extension_list: List[InstallableExtension] = [] - - async with httpx.AsyncClient() as client: - for url in settings.lnbits_extensions_manifests: - resp = await client.get(url) - if resp.status_code != 200: - raise HTTPException( - status_code=404, - detail=f"Unable to fetch extension list for repository: {url}", - ) - for e in resp.json()["extensions"]: - extension_list += [ - InstallableExtension( - id=e["id"], - name=e["name"], - archive=e["archive"], - hash=e["hash"], - short_description=e["shortDescription"], - details=e["details"] if "details" in e else "", - icon=e["icon"], - dependencies=e["dependencies"] - if "dependencies" in e - else [], - ) - ] - - return extension_list - - -class ExtensionManager: - def __init__(self, include_disabled_exts=False): - self._disabled: List[str] = ( - [] if include_disabled_exts else settings.lnbits_disabled_extensions - ) - self._admin_only: List[str] = settings.lnbits_admin_extensions - self._extension_folders: List[str] = [ - x[1] for x in os.walk(os.path.join(settings.lnbits_path, "extensions")) - ][0] - - @property - def extensions(self) -> List[Extension]: - output: List[Extension] = [] - - if "all" in self._disabled: - return output - - for extension in [ - ext for ext in self._extension_folders if ext not in self._disabled - ]: - try: - with open( - os.path.join( - settings.lnbits_path, "extensions", extension, "config.json" - ) - ) as json_file: - config = json.load(json_file) - is_valid = True - is_admin_only = True if extension in self._admin_only else False - except Exception: - config = {} - is_valid = False - is_admin_only = False - - output.append( - Extension( - extension, - is_valid, - is_admin_only, - config.get("name"), - config.get("short_description"), - config.get("tile"), - config.get("contributors"), - config.get("hidden") or False, - config.get("migration_module"), - config.get("db_name"), - ) - ) - - return output - - -class InstalledExtensionMiddleware: - def __init__(self, app: ASGIApp) -> None: - self.app = app - - async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: - if not "path" in scope: - await self.app(scope, receive, send) - return - - path_elements = scope["path"].split("/") - if len(path_elements) > 2: - _, path_name, path_type, *rest = path_elements - else: - _, path_name = path_elements - path_type = None - - # block path for all users if the extension is disabled - if path_name in settings.lnbits_disabled_extensions: - response = JSONResponse( - status_code=HTTPStatus.NOT_FOUND, - content={"detail": f"Extension '{path_name}' disabled"}, - ) - await response(scope, receive, send) - return - - # re-route API trafic if the extension has been upgraded - if path_type == "api": - upgraded_extensions = list( - filter( - lambda ext: ext.endswith(f"/{path_name}"), - settings.lnbits_upgraded_extensions, - ) - ) - if len(upgraded_extensions) != 0: - upgrade_path = upgraded_extensions[0] - tail = "/".join(rest) - scope["path"] = f"/upgrades/{upgrade_path}/{path_type}/{tail}" - - await self.app(scope, receive, send) - - -def get_valid_extensions(include_disabled_exts=False) -> List[Extension]: - return [ - extension - for extension in ExtensionManager(include_disabled_exts).extensions - if extension.is_valid - ] - +from .extensions import get_valid_extensions def urlsafe_short_hash() -> str: return shortuuid.uuid() @@ -397,19 +142,3 @@ def get_current_extension_name() -> str: except: ext_name = extension_director_name return ext_name - - -def download_url(url, save_path): - with urllib.request.urlopen(url) as dl_file: - with open(save_path, "wb") as out_file: - out_file.write(dl_file.read()) - - -def file_hash(filename): - h = hashlib.sha256() - b = bytearray(128 * 1024) - mv = memoryview(b) - with open(filename, "rb", buffering=0) as f: - while n := f.readinto(mv): - h.update(mv[:n]) - return h.hexdigest() From 2edb9da387f779dd6fb9dbf3d2fdfbb920cae1a0 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 11:23:13 +0200 Subject: [PATCH 032/168] fix: name conflict --- lnbits/app.py | 2 +- lnbits/commands.py | 2 +- lnbits/core/helpers.py | 2 +- lnbits/core/views/api.py | 2 +- lnbits/core/views/generic.py | 2 +- lnbits/{extensions.py => extension_manger.py} | 0 lnbits/helpers.py | 2 +- 7 files changed, 6 insertions(+), 6 deletions(-) rename lnbits/{extensions.py => extension_manger.py} (100%) diff --git a/lnbits/app.py b/lnbits/app.py index 3c848c9d..92a67f0b 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -26,7 +26,7 @@ from .commands import migrate_databases from .core import core_app, core_app_extra from .core.services import check_admin_settings from .core.views.generic import core_html_routes -from .extensions import Extension, InstalledExtensionMiddleware, get_valid_extensions +from .extension_manger import Extension, InstalledExtensionMiddleware, get_valid_extensions from .helpers import ( get_css_vendored, get_js_vendored, diff --git a/lnbits/commands.py b/lnbits/commands.py index 4f8ef260..f80a2761 100644 --- a/lnbits/commands.py +++ b/lnbits/commands.py @@ -14,7 +14,7 @@ from .core import migrations as core_migrations from .core.crud import USER_ID_ALL, get_dbversions, get_inactive_extensions from .core.helpers import migrate_extension_database, run_migration from .db import COCKROACH, POSTGRES, SQLITE -from .extensions import get_valid_extensions +from .extension_manger import get_valid_extensions from .helpers import get_css_vendored, get_js_vendored, url_for_vendored diff --git a/lnbits/core/helpers.py b/lnbits/core/helpers.py index 78d188d2..b41be72f 100644 --- a/lnbits/core/helpers.py +++ b/lnbits/core/helpers.py @@ -3,7 +3,7 @@ import re from loguru import logger -from lnbits.extensions import Extension +from lnbits.extension_manger import Extension from . import db as core_db from .crud import update_migration_version diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 182467a4..0e422340 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -44,7 +44,7 @@ from lnbits.decorators import ( require_admin_key, require_invoice_key, ) -from lnbits.extensions import Extension, InstallableExtension, get_valid_extensions +from lnbits.extension_manger import Extension, InstallableExtension, get_valid_extensions from lnbits.helpers import url_for from lnbits.settings import get_wallet_class, settings from lnbits.utils.exchange_rates import ( diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 2c81fc31..106c9002 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -16,7 +16,7 @@ from lnbits.decorators import check_admin, check_user_exists from lnbits.helpers import template_renderer, url_for from lnbits.settings import get_wallet_class, settings -from ...extensions import InstallableExtension, get_valid_extensions +from ...extension_manger import InstallableExtension, get_valid_extensions from ..crud import ( USER_ID_ALL, create_account, diff --git a/lnbits/extensions.py b/lnbits/extension_manger.py similarity index 100% rename from lnbits/extensions.py rename to lnbits/extension_manger.py diff --git a/lnbits/helpers.py b/lnbits/helpers.py index edbd908c..33d7f235 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -9,7 +9,7 @@ from lnbits.jinja2_templating import Jinja2Templates from lnbits.requestvars import g from lnbits.settings import settings -from .extensions import get_valid_extensions +from .extension_manger import get_valid_extensions def urlsafe_short_hash() -> str: return shortuuid.uuid() From 0ab913e502c3ba99a210a0d3d11c0df56f1d41df Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 11:25:18 +0200 Subject: [PATCH 033/168] chore: code format --- lnbits/app.py | 6 +++++- lnbits/core/views/api.py | 6 +++++- lnbits/helpers.py | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index 92a67f0b..b6bebd5a 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -26,7 +26,11 @@ from .commands import migrate_databases from .core import core_app, core_app_extra from .core.services import check_admin_settings from .core.views.generic import core_html_routes -from .extension_manger import Extension, InstalledExtensionMiddleware, get_valid_extensions +from .extension_manger import ( + Extension, + InstalledExtensionMiddleware, + get_valid_extensions, +) from .helpers import ( get_css_vendored, get_js_vendored, diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 0e422340..d67ebf4e 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -44,7 +44,11 @@ from lnbits.decorators import ( require_admin_key, require_invoice_key, ) -from lnbits.extension_manger import Extension, InstallableExtension, get_valid_extensions +from lnbits.extension_manger import ( + Extension, + InstallableExtension, + get_valid_extensions, +) from lnbits.helpers import url_for from lnbits.settings import get_wallet_class, settings from lnbits.utils.exchange_rates import ( diff --git a/lnbits/helpers.py b/lnbits/helpers.py index 33d7f235..641221ab 100644 --- a/lnbits/helpers.py +++ b/lnbits/helpers.py @@ -11,6 +11,7 @@ from lnbits.settings import settings from .extension_manger import get_valid_extensions + def urlsafe_short_hash() -> str: return shortuuid.uuid() From 1ca0cf43138db8dc7a13debdd54ac4feacb31567 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 14:34:05 +0200 Subject: [PATCH 034/168] refactor: use factory method --- lnbits/core/views/api.py | 17 +++++------------ lnbits/extension_manger.py | 9 +++++++++ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index d67ebf4e..591bf1a6 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -735,17 +735,10 @@ async def api_install_extension( ext_info.download_archive() ext_info.extract_archive() - # todo: is admin only - ext = Extension( - code=ext_info.id, - is_valid=True, - is_admin_only=False, - name=ext_info.name, - hash=ext_info.hash if ext_info.module_installed else "", - ) + extension = Extension.from_installable_ext(ext_info) - db_version = (await get_dbversions()).get(ext.code, 0) - await migrate_extension_database(ext, db_version) # todo: use new module + db_version = (await get_dbversions()).get(ext_id, 0) + await migrate_extension_database(extension, db_version) # disable by default await update_user_extension(user_id=USER_ID_ALL, extension=ext_id, active=False) @@ -753,7 +746,7 @@ async def api_install_extension( if ext_info.module_installed: # update upgraded extensions list if module already installed - ext_temp_path = f"{ext.hash}/{ext.code}" + ext_temp_path = f"{extension.hash}/{extension.code}" clean_upgraded_exts = list( filter( lambda old_ext: old_ext.endswith(ext_temp_path), @@ -763,7 +756,7 @@ async def api_install_extension( settings.lnbits_upgraded_extensions = clean_upgraded_exts + [ext_temp_path] # mount routes at the very end - core_app_extra.register_new_ext_routes(ext) + core_app_extra.register_new_ext_routes(extension) except Exception as ex: logger.warning(ex) # remove downloaded archive diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 9f45b196..2c05d913 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -38,6 +38,15 @@ class Extension(NamedTuple): else f"lnbits.upgrades.{self.code}-{self.hash}.{self.code}" ) + @classmethod + def from_installable_ext(cls, ext_info: "InstallableExtension") -> "Extension": + return Extension( + code=ext_info.id, + is_valid=True, + is_admin_only=False, # todo: is admin only + name=ext_info.name, + hash=ext_info.hash if ext_info.module_installed else "", + ) class ExtensionManager: def __init__(self, include_disabled_exts=False): From 84d2e9311924479859e84e12b5fc9cbef70657f7 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 14:34:42 +0200 Subject: [PATCH 035/168] chore: code format --- lnbits/extension_manger.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 2c05d913..02e83809 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -43,11 +43,12 @@ class Extension(NamedTuple): return Extension( code=ext_info.id, is_valid=True, - is_admin_only=False, # todo: is admin only + is_admin_only=False, # todo: is admin only name=ext_info.name, hash=ext_info.hash if ext_info.module_installed else "", ) + class ExtensionManager: def __init__(self, include_disabled_exts=False): self._disabled: List[str] = ( From de929c6c709c8b59518597472ea7161d2f7ecc9e Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 15:08:46 +0200 Subject: [PATCH 036/168] refactor: extract more methods into `InstallableExtension` --- lnbits/core/views/api.py | 26 +++++++------------------- lnbits/extension_manger.py | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 591bf1a6..d08179e2 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -730,9 +730,9 @@ async def api_install_extension( ext_info: InstallableExtension = await InstallableExtension.get_extension_info( ext_id, hash ) + ext_info.download_archive() try: - ext_info.download_archive() ext_info.extract_archive() extension = Extension.from_installable_ext(ext_info) @@ -744,27 +744,15 @@ async def api_install_extension( await update_user_extension(user_id=USER_ID_ALL, extension=ext_id, active=False) settings.lnbits_disabled_extensions += [ext_id] - if ext_info.module_installed: - # update upgraded extensions list if module already installed - ext_temp_path = f"{extension.hash}/{extension.code}" - clean_upgraded_exts = list( - filter( - lambda old_ext: old_ext.endswith(ext_temp_path), - settings.lnbits_upgraded_extensions, - ) - ) - settings.lnbits_upgraded_extensions = clean_upgraded_exts + [ext_temp_path] - - # mount routes at the very end + # mount routes for the new version core_app_extra.register_new_ext_routes(extension) + + if ext_info.module_installed: + ext_info.nofiy_upgrade() + except Exception as ex: logger.warning(ex) - # remove downloaded archive - if os.path.isfile(ext_info.zip_path): - os.remove(ext_info.zip_path) - - # remove module from extensions - shutil.rmtree(ext_info.ext_dir, True) + ext_info.clean_extension_files() raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex) ) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 02e83809..7c93762a 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -165,6 +165,29 @@ class InstallableExtension(NamedTuple): with zipfile.ZipFile(self.zip_path, "r") as zip_ref: zip_ref.extractall(ext_upgrade_dir) + def nofiy_upgrade(self) -> None: + """Update the the list of upgraded extensions. The middleware will perform redirects based on this""" + if not self.hash: + return + + clean_upgraded_exts = list( + filter( + lambda old_ext: old_ext.endswith(f"/{self.id}"), + settings.lnbits_upgraded_extensions, + ) + ) + settings.lnbits_upgraded_extensions = clean_upgraded_exts + [ + f"{self.hash}/{self.id}" + ] + + def clean_extension_files(self): + # remove downloaded archive + if os.path.isfile(self.zip_path): + os.remove(self.zip_path) + + # remove module from extensions + shutil.rmtree(self.ext_dir, True) + @classmethod async def get_extension_info(cls, ext_id: str, hash: str) -> "InstallableExtension": installable_extensions: List[ From e3ee04edc7a5bb0e220c8e728ca1e92ab15c85a3 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 15:51:56 +0200 Subject: [PATCH 037/168] refactor: code clean-up --- lnbits/core/views/api.py | 62 ++++++++-------------------------------- 1 file changed, 12 insertions(+), 50 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index d08179e2..f063b2f5 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -760,17 +760,12 @@ async def api_install_extension( @core_app.delete("/api/v1/extension/{ext_id}") async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin)): - try: - extension_list: List[ - InstallableExtension - ] = await InstallableExtension.get_installable_extensions() - except Exception as ex: - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail="Cannot fetch installable extension list", - ) - extensions = [e for e in extension_list if e.id == ext_id] + installable_extensions: List[ + InstallableExtension + ] = await InstallableExtension.get_installable_extensions() + + extensions = [e for e in installable_extensions if e.id == ext_id] if len(extensions) == 0: raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, @@ -778,56 +773,23 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin) ) # check that other extensions do not depend on this one - for active_ext_id in list(map(lambda e: e.code, get_valid_extensions(True))): - active_ext = next( - (ext for ext in extension_list if ext.id == active_ext_id), None + for valid_ext_id in list(map(lambda e: e.code, get_valid_extensions(True))): + installed_ext = next( + (ext for ext in installable_extensions if ext.id == valid_ext_id), None ) - if active_ext and ext_id in active_ext.dependencies: + if installed_ext and ext_id in installed_ext.dependencies: raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, - detail=f"Cannot uninstall. Extension '{active_ext.name}' depends on this one.", + detail=f"Cannot uninstall. Extension '{installed_ext.name}' depends on this one.", ) try: settings.lnbits_disabled_extensions += [ext_id] - # remove downloaded archive - ext_zip_file = os.path.join( - settings.lnbits_data_folder, "extensions", f"{ext_id}.zip" - ) - if os.path.isfile(ext_zip_file): - os.remove(ext_zip_file) + for ext_info in extensions: + ext_info.clean_extension_files() - # module_name = f"lnbits.extensions.{ext_id}" - - # modules_to_delete = list_modules_for_extension(ext_id) - # print('### modules_to_delete', modules_to_delete) - # for m in modules_to_delete: - # module = sys.modules[m] - # del sys.modules[m] - # del module - - # remove module from extensions - ext_dir = os.path.join("lnbits/extensions", ext_id) - shutil.rmtree(ext_dir, True) except Exception as ex: raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex) ) - - -def list_modules_for_extension(ext_id: str) -> List[str]: - modules_for_extension = [] - for key in sys.modules.keys(): - try: - module = sys.modules[key] - moduleFilePath = inspect.getfile(module).lower() - - dir_name = str(Path(moduleFilePath).parent.absolute()) - if dir_name.endswith(f"lnbits/extensions/{ext_id}"): - print("## moduleFilePath", moduleFilePath) - modules_for_extension += [key] - - except: - pass # built in modules throw if queried - return modules_for_extension From 9d0fba7c156a762118ffd03b9d0c8e6d0ff5ae64 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 16:05:34 +0200 Subject: [PATCH 038/168] fix: clean `upgrades` folder on uninstall --- lnbits/extension_manger.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 7c93762a..b573aaef 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -123,6 +123,10 @@ class InstallableExtension(NamedTuple): def ext_dir(self) -> str: return os.path.join("lnbits", "extensions", self.id) + @property + def ext_upgrade_dir(self) -> str: + return os.path.join("lnbits", "upgrades", f"{self.id}-{self.hash}") + @property def module_name(self) -> str: return f"lnbits.extensions.{self.id}" @@ -159,11 +163,10 @@ class InstallableExtension(NamedTuple): with zipfile.ZipFile(self.zip_path, "r") as zip_ref: zip_ref.extractall(os.path.join("lnbits", "extensions")) - ext_upgrade_dir = os.path.join("lnbits", "upgrades", f"{self.id}-{self.hash}") os.makedirs(os.path.join("lnbits", "upgrades"), exist_ok=True) - shutil.rmtree(ext_upgrade_dir, True) + shutil.rmtree(self.ext_upgrade_dir, True) with zipfile.ZipFile(self.zip_path, "r") as zip_ref: - zip_ref.extractall(ext_upgrade_dir) + zip_ref.extractall(self.ext_upgrade_dir) def nofiy_upgrade(self) -> None: """Update the the list of upgraded extensions. The middleware will perform redirects based on this""" @@ -172,7 +175,7 @@ class InstallableExtension(NamedTuple): clean_upgraded_exts = list( filter( - lambda old_ext: old_ext.endswith(f"/{self.id}"), + lambda old_ext: not old_ext.endswith(f"/{self.id}"), settings.lnbits_upgraded_extensions, ) ) @@ -187,6 +190,8 @@ class InstallableExtension(NamedTuple): # remove module from extensions shutil.rmtree(self.ext_dir, True) + + shutil.rmtree(self.ext_upgrade_dir, True) @classmethod async def get_extension_info(cls, ext_id: str, hash: str) -> "InstallableExtension": From 4efeae24d069ee39e197d186e1d63f9d9d2060e9 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 16:36:12 +0200 Subject: [PATCH 039/168] feat: allow extension manifest configuration from the Admin UI --- lnbits/core/templates/admin/_tab_server.html | 55 ++++++++++++++++++++ lnbits/core/templates/admin/_tab_users.html | 27 +--------- lnbits/core/templates/admin/index.html | 13 +++++ 3 files changed, 69 insertions(+), 26 deletions(-) diff --git a/lnbits/core/templates/admin/_tab_server.html b/lnbits/core/templates/admin/_tab_server.html index f234f182..715a90b9 100644 --- a/lnbits/core/templates/admin/_tab_server.html +++ b/lnbits/core/templates/admin/_tab_server.html @@ -69,6 +69,61 @@
+
+
+

Admin Extensions

+ +
+
+
+

Disabled Extensions

+ +
+
+
+ +
+

Extensions Manifests

+ + + +
+ {%raw%} + + {{ manifestUrl }} + + {%endraw%} +
+
+
diff --git a/lnbits/core/templates/admin/_tab_users.html b/lnbits/core/templates/admin/_tab_users.html index c6a4b83e..46483c18 100644 --- a/lnbits/core/templates/admin/_tab_users.html +++ b/lnbits/core/templates/admin/_tab_users.html @@ -58,31 +58,6 @@

-
-
-

Admin Extensions

- -
-
-
-

Disabled Extensions

- -
-
-
+ diff --git a/lnbits/core/templates/admin/index.html b/lnbits/core/templates/admin/index.html index 3e688fd6..9bbadbd6 100644 --- a/lnbits/core/templates/admin/index.html +++ b/lnbits/core/templates/admin/index.html @@ -153,6 +153,7 @@ formData: {}, formAddAdmin: '', formAddUser: '', + formAddExtensionsManifest: '', isSuperUser: false, wallet: {}, cancel: {}, @@ -388,6 +389,18 @@ u => u !== user ) }, + addExtensionsManifest() { + const addManifest = this.formAddExtensionsManifest + const manifests = this.formData.lnbits_extensions_manifests + if (addManifest && addManifest.length && !manifests.includes(addManifest)) { + this.formData.lnbits_extensions_manifests = [...manifests, addManifest] + this.formAddExtensionsManifest = '' + } + }, + removeExtensionsManifest(manifest) { + const manifests = this.formData.lnbits_extensions_manifests + this.formData.lnbits_extensions_manifests = manifests.filter(m => m !== manifest) + }, restartServer() { LNbits.api .request('GET', '/admin/api/v1/restart/?usr=' + this.g.user.id) From 032a000da7ea976e33d436c7bca9e179557009d0 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 16:36:37 +0200 Subject: [PATCH 040/168] fix: do not fail when one of the extension manifest files is not available --- lnbits/core/views/generic.py | 5 +--- lnbits/extension_manger.py | 45 ++++++++++++++++++------------------ 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 106c9002..d0987379 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -80,10 +80,7 @@ async def extensions_install( ] = await InstallableExtension.get_installable_extensions() except Exception as ex: logger.warning(ex) - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail="Cannot fetch installable extension list", - ) + extension_list = [] try: if deactivate: diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index b573aaef..ea71414d 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -190,7 +190,7 @@ class InstallableExtension(NamedTuple): # remove module from extensions shutil.rmtree(self.ext_dir, True) - + shutil.rmtree(self.ext_upgrade_dir, True) @classmethod @@ -225,27 +225,28 @@ class InstallableExtension(NamedTuple): async with httpx.AsyncClient() as client: for url in settings.lnbits_extensions_manifests: - resp = await client.get(url) - if resp.status_code != 200: - raise HTTPException( - status_code=404, - detail=f"Unable to fetch extension list for repository: {url}", - ) - for e in resp.json()["extensions"]: - extension_list += [ - InstallableExtension( - id=e["id"], - name=e["name"], - archive=e["archive"], - hash=e["hash"], - short_description=e["shortDescription"], - details=e["details"] if "details" in e else "", - icon=e["icon"], - dependencies=e["dependencies"] - if "dependencies" in e - else [], - ) - ] + try: + resp = await client.get(url) + if resp.status_code != 200: + logger.warning(f"Unable to fetch extension list for repository: {url}") + continue + for e in resp.json()["extensions"]: + extension_list += [ + InstallableExtension( + id=e["id"], + name=e["name"], + archive=e["archive"], + hash=e["hash"], + short_description=e["shortDescription"], + details=e["details"] if "details" in e else "", + icon=e["icon"], + dependencies=e["dependencies"] + if "dependencies" in e + else [], + ) + ] + except Exception as e: + logger.warning(e) return extension_list From 9bd1720d03ab470bb6eec1a6e8131908d6213ded Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 16:39:54 +0200 Subject: [PATCH 041/168] chore: code format --- lnbits/extension_manger.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index ea71414d..ceecffc5 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -228,7 +228,9 @@ class InstallableExtension(NamedTuple): try: resp = await client.get(url) if resp.status_code != 200: - logger.warning(f"Unable to fetch extension list for repository: {url}") + logger.warning( + f"Unable to fetch extension list for repository: {url}" + ) continue for e in resp.json()["extensions"]: extension_list += [ From 38a132604b324881e97aed15cb51835de0c734c3 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 11 Jan 2023 19:06:58 +0200 Subject: [PATCH 042/168] feat: used dedicated table for installed extensions --- lnbits/commands.py | 4 +-- lnbits/core/crud.py | 65 ++++++++++++++++++++++++++++++++---- lnbits/core/migrations.py | 14 ++++++++ lnbits/core/views/api.py | 13 ++++++-- lnbits/core/views/generic.py | 11 ++++-- lnbits/extension_manger.py | 3 +- 6 files changed, 94 insertions(+), 16 deletions(-) diff --git a/lnbits/commands.py b/lnbits/commands.py index f80a2761..0d7fd2c5 100644 --- a/lnbits/commands.py +++ b/lnbits/commands.py @@ -11,7 +11,7 @@ from lnbits.settings import settings from .core import db as core_db from .core import migrations as core_migrations -from .core.crud import USER_ID_ALL, get_dbversions, get_inactive_extensions +from .core.crud import get_dbversions, get_inactive_extensions from .core.helpers import migrate_extension_database, run_migration from .db import COCKROACH, POSTGRES, SQLITE from .extension_manger import get_valid_extensions @@ -83,5 +83,5 @@ async def migrate_databases(): async def load_disabled_extension_list() -> None: """Update list of extensions that have been explicitly disabled""" - inactive_extensions = await get_inactive_extensions(user_id=USER_ID_ALL) + inactive_extensions = await get_inactive_extensions() settings.lnbits_disabled_extensions += inactive_extensions diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index 1289c33a..374f9e54 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -11,8 +11,6 @@ from lnbits.settings import AdminSettings, EditableSettings, SuperSettings, sett from . import db from .models import BalanceCheck, Payment, User, Wallet -USER_ID_ALL = "all" - # accounts # -------- @@ -68,6 +66,61 @@ async def get_user(user_id: str, conn: Optional[Connection] = None) -> Optional[ ) +# extensions +# ------- + + +async def add_installed_extension( + *, + ext_id: str, + version, + active: bool, + hash: str, + meta: dict, + conn: Optional[Connection] = None, +) -> None: + await (conn or db).execute( + """ + INSERT INTO installed_extensions (id, version, active, hash, meta) VALUES (?, ?, ?, ?, ?) + ON CONFLICT (id) DO + UPDATE SET (version, active, hash, meta) = (?, ?, ?, ?) + """, + ( + ext_id, + version, + active, + hash, + json.dumps(meta), + version, + active, + hash, + json.dumps(meta), + ), + ) + + +async def update_installed_extension_state( + *, ext_id: str, active: bool, conn: Optional[Connection] = None +) -> None: + await (conn or db).execute( + """ + UPDATE installed_extensions SET active = ? WHERE id = ? + """, + (active, ext_id), + ) + + +async def delete_installed_extension( + *, ext_id: str, conn: Optional[Connection] = None +) -> None: + await (conn or db).execute( + """ + DELETE from installed_extensions WHERE id = ? + """, + (ext_id,), + ) + + async def update_user_extension( *, user_id: str, extension: str, active: bool, conn: Optional[Connection] = None ) -> None: @@ -80,12 +133,10 @@ async def update_user_extension( ) -async def get_inactive_extensions( - *, user_id: str, conn: Optional[Connection] = None -) -> List[str]: +async def get_inactive_extensions(*, conn: Optional[Connection] = None) -> List[str]: inactive_extensions = await (conn or db).fetchall( - """SELECT extension FROM extensions WHERE "user" = ? AND NOT active""", - (user_id,), + """SELECT id FROM installed_extensions WHERE NOT active""", + (), ) return ( [ext[0] for ext in inactive_extensions] if len(inactive_extensions) != 0 else [] diff --git a/lnbits/core/migrations.py b/lnbits/core/migrations.py index 66254d11..ae24a948 100644 --- a/lnbits/core/migrations.py +++ b/lnbits/core/migrations.py @@ -269,3 +269,17 @@ async def m008_create_admin_settings_table(db): ); """ ) + + +async def m009_create_installed_extensions_table(db): + await db.execute( + """ + CREATE TABLE IF NOT EXISTS installed_extensions ( + id TEXT PRIMARY KEY, + version INT NOT NULL, + active BOOLEAN DEFAULT false, + hash TEXT NOT NULL, + meta TEXT NOT NULL DEFAULT '{}' + ); + """ + ) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index f063b2f5..f0efc08d 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -59,14 +59,14 @@ from lnbits.utils.exchange_rates import ( from .. import core_app, core_app_extra, db from ..crud import ( - USER_ID_ALL, + add_installed_extension, + delete_installed_extension, get_dbversions, get_payments, get_standalone_payment, get_total_balance, get_wallet_for_key, save_balance_check, - update_user_extension, update_wallet, ) from ..services import ( @@ -741,7 +741,13 @@ async def api_install_extension( await migrate_extension_database(extension, db_version) # disable by default - await update_user_extension(user_id=USER_ID_ALL, extension=ext_id, active=False) + await add_installed_extension( + ext_id=ext_id, + version=ext_info.version, + active=False, + hash=hash, + meta=dict(ext_info), + ) settings.lnbits_disabled_extensions += [ext_id] # mount routes for the new version @@ -788,6 +794,7 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin) for ext_info in extensions: ext_info.clean_extension_files() + await delete_installed_extension(ext_id=ext_info.id) except Exception as ex: raise HTTPException( diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index d0987379..e2c365f7 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -18,7 +18,6 @@ from lnbits.settings import get_wallet_class, settings from ...extension_manger import InstallableExtension, get_valid_extensions from ..crud import ( - USER_ID_ALL, create_account, create_wallet, delete_wallet, @@ -26,6 +25,7 @@ from ..crud import ( get_inactive_extensions, get_user, save_balance_notify, + update_installed_extension_state, update_user_extension, ) from ..services import pay_invoice, redeem_lnurl_withdraw @@ -89,10 +89,15 @@ async def extensions_install( settings.lnbits_disabled_extensions = list( filter(lambda e: e != activate, settings.lnbits_disabled_extensions) ) - await toggle_extension(activate, deactivate, USER_ID_ALL) + + ext_id = activate or deactivate + if ext_id: + await update_installed_extension_state( + ext_id=ext_id, active=activate != None + ) installed_extensions = list(map(lambda e: e.code, get_valid_extensions(True))) - inactive_extensions = await get_inactive_extensions(user_id=USER_ID_ALL) + inactive_extensions = await get_inactive_extensions() extensions = list( map( lambda ext: { diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index ceecffc5..9debda70 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -12,6 +12,7 @@ import httpx from fastapi.exceptions import HTTPException from fastapi.responses import JSONResponse from loguru import logger +from pydantic import BaseModel from starlette.types import ASGIApp, Receive, Scope, Send from lnbits.settings import settings @@ -101,7 +102,7 @@ class ExtensionManager: return output -class InstallableExtension(NamedTuple): +class InstallableExtension(BaseModel): id: str name: str archive: str From 496346b3ba1efa0c240545709c29be4754f132cf Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 12 Jan 2023 15:33:32 +0200 Subject: [PATCH 043/168] feat: use github releases for installing extensions --- lnbits/core/crud.py | 2 +- lnbits/core/migrations.py | 2 +- lnbits/core/templates/core/install.html | 51 ++++----- lnbits/core/views/api.py | 1 - lnbits/core/views/generic.py | 2 + lnbits/extension_manger.py | 132 ++++++++++++++++++++---- 6 files changed, 139 insertions(+), 51 deletions(-) diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index 374f9e54..ae6fbb52 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -73,7 +73,7 @@ async def get_user(user_id: str, conn: Optional[Connection] = None) -> Optional[ async def add_installed_extension( *, ext_id: str, - version, + version: str, active: bool, hash: str, meta: dict, diff --git a/lnbits/core/migrations.py b/lnbits/core/migrations.py index ae24a948..946d79f5 100644 --- a/lnbits/core/migrations.py +++ b/lnbits/core/migrations.py @@ -276,7 +276,7 @@ async def m009_create_installed_extensions_table(db): """ CREATE TABLE IF NOT EXISTS installed_extensions ( id TEXT PRIMARY KEY, - version INT NOT NULL, + version TEXT NOT NULL, active BOOLEAN DEFAULT false, hash TEXT NOT NULL, meta TEXT NOT NULL DEFAULT '{}' diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 7ca22e15..9199ad86 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -40,8 +40,14 @@
- +
- - - - - - - +
+ + + +
@@ -279,6 +271,7 @@ inProgress: false })) this.filteredExtensions = this.extensions.concat([]) + console.log('### his.filteredExtensions', this.filteredExtensions) }, mixins: [windowMixin] }) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index f0efc08d..5a2d8f2a 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -740,7 +740,6 @@ async def api_install_extension( db_version = (await get_dbversions()).get(ext_id, 0) await migrate_extension_database(extension, db_version) - # disable by default await add_installed_extension( ext_id=ext_id, version=ext_info.version, diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index e2c365f7..629a1b7e 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -105,7 +105,9 @@ async def extensions_install( "name": ext.name, "hash": ext.hash, "icon": ext.icon, + "iconUrl": ext.icon_url, "shortDescription": ext.short_description, + "stars": ext.stars, "details": ext.details, "dependencies": ext.dependencies, "isInstalled": ext.id in installed_extensions, diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 9debda70..9c050a27 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -6,6 +6,7 @@ import sys import urllib.request import zipfile from http import HTTPStatus +from platform import release from typing import List, NamedTuple, Optional import httpx @@ -102,6 +103,27 @@ class ExtensionManager: return output +class ExtensionRelease(BaseModel): + name: str + version: str + archive: str + description: str + + @classmethod + def from_github_releases(cls, releases: dict) -> List["ExtensionRelease"]: + return list( + map( + lambda r: ExtensionRelease( + name=r["name"], + version=r["tag_name"], + archive=r["zipball_url"], + description=r["body"], + ), + releases, + ) + ) + + class InstallableExtension(BaseModel): id: str name: str @@ -110,9 +132,12 @@ class InstallableExtension(BaseModel): short_description: Optional[str] = None details: Optional[str] = None icon: Optional[str] = None + icon_url: Optional[str] = None dependencies: List[str] = [] is_admin_only: bool = False - version: Optional[int] = 0 + version: str = "none" # todo: move to Release + stars: int = 0 + releases: Optional[List[ExtensionRelease]] @property def zip_path(self) -> str: @@ -194,6 +219,25 @@ class InstallableExtension(BaseModel): shutil.rmtree(self.ext_upgrade_dir, True) + @classmethod + async def from_repo(cls, org, repository) -> Optional["InstallableExtension"]: + try: + repo, releases, config = await fetch_github_repo_info(org, repository) + + return InstallableExtension( + id=repo["name"], + name=config.get("name"), + short_description=config.get("short_description"), + archive="xx", + hash="123", + stars=repo["stargazers_count"], + icon_url=icon_to_github_url(org, config.get("tile")), + releases=ExtensionRelease.from_github_releases(releases), + ) + except Exception as e: + logger.warning(e) + return None + @classmethod async def get_extension_info(cls, ext_id: str, hash: str) -> "InstallableExtension": installable_extensions: List[ @@ -229,27 +273,35 @@ class InstallableExtension(BaseModel): try: resp = await client.get(url) if resp.status_code != 200: - logger.warning( - f"Unable to fetch extension list for repository: {url}" - ) + logger.warning(f"Cannot fetch extensions manifest at: {url}") continue - for e in resp.json()["extensions"]: - extension_list += [ - InstallableExtension( - id=e["id"], - name=e["name"], - archive=e["archive"], - hash=e["hash"], - short_description=e["shortDescription"], - details=e["details"] if "details" in e else "", - icon=e["icon"], - dependencies=e["dependencies"] - if "dependencies" in e - else [], + manifest = resp.json() + if "extensions" in manifest: + for e in manifest["extensions"] or []: + extension_list += [ + InstallableExtension( + id=e["id"], + name=e["name"], + archive=e["archive"], + hash=e["hash"], + short_description=e["shortDescription"], + details=e["details"] if "details" in e else "", + icon=e["icon"], + dependencies=e["dependencies"] + if "dependencies" in e + else [], + ) + ] + if "repos" in manifest: + for r in manifest["repos"]: + ext = await InstallableExtension.from_repo( + r["organisation"], r["repository"] ) - ] + print("#### repo_extensions", ext) + if ext: + extension_list += [ext] except Exception as e: - logger.warning(e) + logger.warning(f"Manifest {url} failed with '{str(e)}'") return extension_list @@ -317,3 +369,45 @@ def file_hash(filename): while n := f.readinto(mv): h.update(mv[:n]) return h.hexdigest() + + +def icon_to_github_url(org: str, path: Optional[str]) -> str: + if not path: + return "" + _, repo, *rest = path.split("/") + tail = "/".join(rest) + return f"https://github.com/{org}/{repo}/raw/main/{tail}" + + +async def fetch_github_repo_info(org: str, repository: str): + async with httpx.AsyncClient() as client: + repo_url = f"https://api.github.com/repos/{org}/{repository}" + resp = await client.get(repo_url) + if resp.status_code != 200: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Cannot fetch extension repo: {repo_url}", + ) + repo = resp.json() + + releases_url = f"https://api.github.com/repos/{org}/{repository}/releases" + resp = await client.get(releases_url) + if resp.status_code != 200: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Cannot fetch extension releases: {releases_url}", + ) + + releases = resp.json() + + config_url = f"""https://raw.githubusercontent.com/{org}/{repository}/{repo["default_branch"]}/config.json""" + resp = await client.get(config_url) + if resp.status_code != 200: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Cannot fetch config for extension: {config_url}", + ) + + config = resp.json() + + return repo, releases, config From 76fbb5ccbbc5abd0337c2a73a8963f9219067527 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 12 Jan 2023 17:05:51 +0200 Subject: [PATCH 044/168] feat: return `releases` to UI --- lnbits/core/views/generic.py | 11 +++++++++++ lnbits/extension_manger.py | 1 + 2 files changed, 12 insertions(+) diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 629a1b7e..377a979f 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -112,6 +112,17 @@ async def extensions_install( "dependencies": ext.dependencies, "isInstalled": ext.id in installed_extensions, "isActive": not ext.id in inactive_extensions, + "releases": [ + { + "name": r.name, + "version": r.version, + "archive": r.archive, + # "description": base64.b64encode(r.description.encode()), + } + for r in ext.releases + ] + if ext.releases + else None, }, extension_list, ) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 9c050a27..43f1ac14 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -230,6 +230,7 @@ class InstallableExtension(BaseModel): short_description=config.get("short_description"), archive="xx", hash="123", + version="0", stars=repo["stargazers_count"], icon_url=icon_to_github_url(org, config.get("tile")), releases=ExtensionRelease.from_github_releases(releases), From 9a77a6e314d32e06d0776c0aeb14c0bfba575d08 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 12 Jan 2023 17:25:35 +0200 Subject: [PATCH 045/168] fix: exclude `draft` and `prerelease` releases --- lnbits/extension_manger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 43f1ac14..c7d6ea48 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -399,7 +399,7 @@ async def fetch_github_repo_info(org: str, repository: str): detail=f"Cannot fetch extension releases: {releases_url}", ) - releases = resp.json() + releases= [r for r in resp.json() if r["draft"] == False and r["prerelease"] == False] config_url = f"""https://raw.githubusercontent.com/{org}/{repository}/{repo["default_branch"]}/config.json""" resp = await client.get(config_url) From b4408e9d52ba7445a4b0140756a280e44e88d9ee Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 12 Jan 2023 17:28:01 +0200 Subject: [PATCH 046/168] chore: code format --- lnbits/extension_manger.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index c7d6ea48..5055a26e 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -399,7 +399,9 @@ async def fetch_github_repo_info(org: str, repository: str): detail=f"Cannot fetch extension releases: {releases_url}", ) - releases= [r for r in resp.json() if r["draft"] == False and r["prerelease"] == False] + releases = [ + r for r in resp.json() if r["draft"] == False and r["prerelease"] == False + ] config_url = f"""https://raw.githubusercontent.com/{org}/{repository}/{repo["default_branch"]}/config.json""" resp = await client.get(config_url) From 522bfcf4ae91dcc318eb1ee6a9bab996eb9b0912 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 13 Jan 2023 12:10:52 +0200 Subject: [PATCH 047/168] chore: optimize imports --- lnbits/core/views/api.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 5a2d8f2a..f3108950 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -1,10 +1,6 @@ import asyncio import hashlib -import inspect import json -import os -import shutil -import sys import time import uuid from http import HTTPStatus From 97ea78f9991259d6257092b30008f5b2276add1f Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 13 Jan 2023 12:12:03 +0200 Subject: [PATCH 048/168] fix: return only the latest release --- lnbits/core/views/generic.py | 12 +---------- lnbits/extension_manger.py | 41 ++++++++++++++++++------------------ 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 377a979f..b39a87de 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -112,17 +112,7 @@ async def extensions_install( "dependencies": ext.dependencies, "isInstalled": ext.id in installed_extensions, "isActive": not ext.id in inactive_extensions, - "releases": [ - { - "name": r.name, - "version": r.version, - "archive": r.archive, - # "description": base64.b64encode(r.description.encode()), - } - for r in ext.releases - ] - if ext.releases - else None, + "release": dict(ext.release) if ext.release else None, }, extension_list, ) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 5055a26e..caf58957 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -107,20 +107,20 @@ class ExtensionRelease(BaseModel): name: str version: str archive: str - description: str + hash: Optional[str] + published_at: Optional[str] + url: Optional[str] + description: Optional[str] @classmethod - def from_github_releases(cls, releases: dict) -> List["ExtensionRelease"]: - return list( - map( - lambda r: ExtensionRelease( - name=r["name"], - version=r["tag_name"], - archive=r["zipball_url"], - description=r["body"], - ), - releases, - ) + def from_github_release(cls, r: dict) -> "ExtensionRelease": + return ExtensionRelease( + name=r["name"], + version=r["tag_name"], + archive=r["zipball_url"], + # description=r["body"], # bad for JSON + published_at=r["published_at"], + url=r["html_url"], ) @@ -137,7 +137,7 @@ class InstallableExtension(BaseModel): is_admin_only: bool = False version: str = "none" # todo: move to Release stars: int = 0 - releases: Optional[List[ExtensionRelease]] + release: Optional[ExtensionRelease] @property def zip_path(self) -> str: @@ -222,7 +222,7 @@ class InstallableExtension(BaseModel): @classmethod async def from_repo(cls, org, repository) -> Optional["InstallableExtension"]: try: - repo, releases, config = await fetch_github_repo_info(org, repository) + repo, latest_release, config = await fetch_github_repo_info(org, repository) return InstallableExtension( id=repo["name"], @@ -233,7 +233,7 @@ class InstallableExtension(BaseModel): version="0", stars=repo["stargazers_count"], icon_url=icon_to_github_url(org, config.get("tile")), - releases=ExtensionRelease.from_github_releases(releases), + release=ExtensionRelease.from_github_release(latest_release), ) except Exception as e: logger.warning(e) @@ -298,7 +298,6 @@ class InstallableExtension(BaseModel): ext = await InstallableExtension.from_repo( r["organisation"], r["repository"] ) - print("#### repo_extensions", ext) if ext: extension_list += [ext] except Exception as e: @@ -391,7 +390,9 @@ async def fetch_github_repo_info(org: str, repository: str): ) repo = resp.json() - releases_url = f"https://api.github.com/repos/{org}/{repository}/releases" + releases_url = ( + f"https://api.github.com/repos/{org}/{repository}/releases/latest" + ) resp = await client.get(releases_url) if resp.status_code != 200: raise HTTPException( @@ -399,9 +400,7 @@ async def fetch_github_repo_info(org: str, repository: str): detail=f"Cannot fetch extension releases: {releases_url}", ) - releases = [ - r for r in resp.json() if r["draft"] == False and r["prerelease"] == False - ] + latest_release = resp.json() config_url = f"""https://raw.githubusercontent.com/{org}/{repository}/{repo["default_branch"]}/config.json""" resp = await client.get(config_url) @@ -413,4 +412,4 @@ async def fetch_github_repo_info(org: str, repository: str): config = resp.json() - return repo, releases, config + return repo, latest_release, config From c9bb5a660c124a9507b687b02182b96d48187a5e Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 13 Jan 2023 12:26:54 +0200 Subject: [PATCH 049/168] feat: show empty Upgrade dialog --- lnbits/core/templates/core/install.html | 23 +++++++++++++++++++++-- lnbits/core/views/generic.py | 1 + 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 9199ad86..94c2368d 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -83,8 +83,11 @@ -
+
+ + Upgrade Uninstall @@ -112,7 +115,7 @@
-
+
+ + +
Upgrade
+ +
+ Close +
+
+
+ {%raw%} @@ -174,6 +187,7 @@ showOnlyInstalledExtensions: false, filteredExtensions: null, showUninstallDialog: false, + showUpgradeDialog: false, showDetailsDialog: false, selectedExtension: null, maxStars: 0 @@ -260,6 +274,11 @@ this.showUninstallDialog = true }, + showUpgrade: function (extension) { + this.selectedExtension = extension + this.showUpgradeDialog = true + }, + showExtensionDetails: function (extension) { this.selectedExtension = extension this.showDetailsDialog = true diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index b39a87de..13cb5c55 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -104,6 +104,7 @@ async def extensions_install( "id": ext.id, "name": ext.name, "hash": ext.hash, + "version": ext.version, "icon": ext.icon, "iconUrl": ext.icon_url, "shortDescription": ext.short_description, From eb885924739a08723a84c4dc09f9ce2ddf3bf0b6 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 16 Jan 2023 11:26:16 +0200 Subject: [PATCH 050/168] feat: addd basic version install UI --- lnbits/core/templates/core/install.html | 45 +++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 94c2368d..65a7355b 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -152,9 +152,48 @@ - -
Upgrade
- + +
+ + +
Repo name
+
+ + + + + + + +
Headers
+
+
+
+ + + + + +
+
+
+
+
Close
From 0b49541c15ac29030c5c5dc97b7f48190ed6af2b Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 16 Jan 2023 11:30:43 +0200 Subject: [PATCH 051/168] chore: renamings --- lnbits/core/templates/core/install.html | 2 +- lnbits/extension_manger.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 65a7355b..af51e547 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -163,7 +163,7 @@ diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index caf58957..58e548e9 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -390,14 +390,14 @@ async def fetch_github_repo_info(org: str, repository: str): ) repo = resp.json() - releases_url = ( + lates_release_url = ( f"https://api.github.com/repos/{org}/{repository}/releases/latest" ) - resp = await client.get(releases_url) + resp = await client.get(lates_release_url) if resp.status_code != 200: raise HTTPException( status_code=HTTPStatus.NOT_FOUND, - detail=f"Cannot fetch extension releases: {releases_url}", + detail=f"Cannot fetch extension releases: {lates_release_url}", ) latest_release = resp.json() From a73e8ae44d37d3853e459a562e32b99adbd95689 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 16 Jan 2023 12:07:46 +0200 Subject: [PATCH 052/168] feat: stub for extension versions --- lnbits/core/templates/core/install.html | 9 ++++++++- lnbits/core/views/api.py | 16 ++++++++++++++++ lnbits/extension_manger.py | 2 +- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index af51e547..8fb8dbe8 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -313,9 +313,16 @@ this.showUninstallDialog = true }, - showUpgrade: function (extension) { + showUpgrade: async function (extension) { + console.log('### showUpgrade') this.selectedExtension = extension this.showUpgradeDialog = true + const releases = await LNbits.api.request( + 'GET', + `/api/v1/extension/${extension.id}/releases?usr=${this.g.user.id}`, + this.g.user.wallets[0].adminkey + ) + console.log('### releases', releases) }, showExtensionDetails: function (extension) { diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index f3108950..1a4da8f9 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -795,3 +795,19 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin) raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex) ) + + +@core_app.get("/api/v1/extension/{ext_id}/releases") +async def get_extension_releases(ext_id: str, user: User = Depends(check_admin)): + try: + installable_extensions: List[ + InstallableExtension + ] = await InstallableExtension.get_installable_extensions() + extensions = [e for e in installable_extensions if e.id == ext_id] + + return extensions + + except Exception as ex: + raise HTTPException( + status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex) + ) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 58e548e9..ee06569d 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -127,7 +127,7 @@ class ExtensionRelease(BaseModel): class InstallableExtension(BaseModel): id: str name: str - archive: str + archive: str #todo: move to installed_release hash: str short_description: Optional[str] = None details: Optional[str] = None From 27b308ae1a59fa88ba689e2ea58c9b8f9a832655 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 16 Jan 2023 14:56:34 +0200 Subject: [PATCH 053/168] feat: separate extension release into new API --- lnbits/core/templates/core/install.html | 28 +++++++++++--- lnbits/core/views/api.py | 10 ++--- lnbits/core/views/generic.py | 4 +- lnbits/extension_manger.py | 49 ++++++++++++++++++++++--- 4 files changed, 74 insertions(+), 17 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 8fb8dbe8..1eeb6639 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -153,18 +153,25 @@ -
- +
+ -
Repo name
+
+ +
{ + repos[release.source_repo] = repos[release.source_repo] || [] + repos[release.source_repo].push(release) + return repos + }, {}) + console.log('### releases', this.selectedExtensionReleases) + console.log('### repos', this.selectedExtensionRepos) }, showExtensionDetails: function (extension) { diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 1a4da8f9..299f3144 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -42,6 +42,7 @@ from lnbits.decorators import ( ) from lnbits.extension_manger import ( Extension, + ExtensionRelease, InstallableExtension, get_valid_extensions, ) @@ -800,12 +801,11 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin) @core_app.get("/api/v1/extension/{ext_id}/releases") async def get_extension_releases(ext_id: str, user: User = Depends(check_admin)): try: - installable_extensions: List[ - InstallableExtension - ] = await InstallableExtension.get_installable_extensions() - extensions = [e for e in installable_extensions if e.id == ext_id] + extension_releases: List[ + ExtensionRelease + ] = await InstallableExtension.get_extension_releases(ext_id) - return extensions + return extension_releases except Exception as ex: raise HTTPException( diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 13cb5c55..6d2d01af 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -113,7 +113,9 @@ async def extensions_install( "dependencies": ext.dependencies, "isInstalled": ext.id in installed_extensions, "isActive": not ext.id in inactive_extensions, - "release": dict(ext.release) if ext.release else None, + "latestRelease": dict(ext.latest_release) + if ext.latest_release + else None, }, extension_list, ) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index ee06569d..1bae0b41 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -6,7 +6,6 @@ import sys import urllib.request import zipfile from http import HTTPStatus -from platform import release from typing import List, NamedTuple, Optional import httpx @@ -107,6 +106,7 @@ class ExtensionRelease(BaseModel): name: str version: str archive: str + source_repo: str hash: Optional[str] published_at: Optional[str] url: Optional[str] @@ -118,6 +118,7 @@ class ExtensionRelease(BaseModel): name=r["name"], version=r["tag_name"], archive=r["zipball_url"], + # source_repo=r[] # description=r["body"], # bad for JSON published_at=r["published_at"], url=r["html_url"], @@ -127,7 +128,7 @@ class ExtensionRelease(BaseModel): class InstallableExtension(BaseModel): id: str name: str - archive: str #todo: move to installed_release + archive: str # todo: move to installed_release hash: str short_description: Optional[str] = None details: Optional[str] = None @@ -137,7 +138,9 @@ class InstallableExtension(BaseModel): is_admin_only: bool = False version: str = "none" # todo: move to Release stars: int = 0 - release: Optional[ExtensionRelease] + latest_release: Optional[ExtensionRelease] + installed_release: Optional[ExtensionRelease] + all_releases: List[ExtensionRelease] = [] @property def zip_path(self) -> str: @@ -233,7 +236,7 @@ class InstallableExtension(BaseModel): version="0", stars=repo["stargazers_count"], icon_url=icon_to_github_url(org, config.get("tile")), - release=ExtensionRelease.from_github_release(latest_release), + latest_release=ExtensionRelease.from_github_release(latest_release), ) except Exception as e: logger.warning(e) @@ -268,6 +271,7 @@ class InstallableExtension(BaseModel): @classmethod async def get_installable_extensions(cls) -> List["InstallableExtension"]: extension_list: List[InstallableExtension] = [] + extension_id_list: List[str] = [] async with httpx.AsyncClient() as client: for url in settings.lnbits_extensions_manifests: @@ -278,7 +282,9 @@ class InstallableExtension(BaseModel): continue manifest = resp.json() if "extensions" in manifest: - for e in manifest["extensions"] or []: + for e in manifest["extensions"]: + if e["id"] in extension_id_list: + continue extension_list += [ InstallableExtension( id=e["id"], @@ -293,18 +299,51 @@ class InstallableExtension(BaseModel): else [], ) ] + extension_id_list += [e["id"]] if "repos" in manifest: for r in manifest["repos"]: ext = await InstallableExtension.from_repo( r["organisation"], r["repository"] ) if ext: + if ext.id in extension_id_list: + continue extension_list += [ext] + extension_id_list += [ext.id] except Exception as e: logger.warning(f"Manifest {url} failed with '{str(e)}'") return extension_list + @classmethod + async def get_extension_releases(cls, ext_id: str) -> List["ExtensionRelease"]: + extension_releases: List[ExtensionRelease] = [] + async with httpx.AsyncClient() as client: + for url in settings.lnbits_extensions_manifests: + try: + resp = await client.get(url) + if resp.status_code != 200: + logger.warning(f"Cannot fetch extensions manifest at: {url}") + continue + manifest = resp.json() + if "extensions" in manifest: + for e in manifest["extensions"]: + if e["id"] == ext_id: + extension_releases += [ + ExtensionRelease( + name=e["name"], + version=e["version"], + archive=e["archive"], + hash=e["hash"], + source_repo=url, + description=e["shortDescription"], + ) + ] + except Exception as e: + logger.warning(f"Manifest {url} failed with '{str(e)}'") + + return extension_releases + class InstalledExtensionMiddleware: def __init__(self, app: ASGIApp) -> None: From 86d45cdb5049d4121de7a63de2b4ec7f43f4ab69 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 16 Jan 2023 15:23:47 +0200 Subject: [PATCH 054/168] feat: fetch releases for GitHub repo --- lnbits/extension_manger.py | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 1bae0b41..6a417c0c 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -113,17 +113,34 @@ class ExtensionRelease(BaseModel): description: Optional[str] @classmethod - def from_github_release(cls, r: dict) -> "ExtensionRelease": + def from_github_release(cls, source_repo: str, r: dict) -> "ExtensionRelease": return ExtensionRelease( name=r["name"], version=r["tag_name"], archive=r["zipball_url"], - # source_repo=r[] + source_repo=source_repo, # description=r["body"], # bad for JSON published_at=r["published_at"], url=r["html_url"], ) + @classmethod + async def all_releases(cls, org, repo) -> List["ExtensionRelease"]: + async with httpx.AsyncClient() as client: + releases_url = f"https://api.github.com/repos/{org}/{repo}/releases" + resp = await client.get(releases_url) + if resp.status_code != 200: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, + detail=f"Cannot fetch extension releases: {releases_url}", + ) + + releases = resp.json() + return [ + ExtensionRelease.from_github_release(f"{org}/{repo}", r) + for r in releases + ] + class InstallableExtension(BaseModel): id: str @@ -140,7 +157,6 @@ class InstallableExtension(BaseModel): stars: int = 0 latest_release: Optional[ExtensionRelease] installed_release: Optional[ExtensionRelease] - all_releases: List[ExtensionRelease] = [] @property def zip_path(self) -> str: @@ -236,7 +252,9 @@ class InstallableExtension(BaseModel): version="0", stars=repo["stargazers_count"], icon_url=icon_to_github_url(org, config.get("tile")), - latest_release=ExtensionRelease.from_github_release(latest_release), + latest_release=ExtensionRelease.from_github_release( + repo["html_url"], latest_release + ), ) except Exception as e: logger.warning(e) @@ -339,6 +357,13 @@ class InstallableExtension(BaseModel): description=e["shortDescription"], ) ] + if "repos" in manifest: + for r in manifest["repos"]: + repo_releases = await ExtensionRelease.all_releases( + r["organisation"], r["repository"] + ) + extension_releases += repo_releases + except Exception as e: logger.warning(f"Manifest {url} failed with '{str(e)}'") From dd0c97eefcee6745f796d158f68b6fed32a527a2 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 16 Jan 2023 15:58:26 +0200 Subject: [PATCH 055/168] fix: make github releases g first --- lnbits/extension_manger.py | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 6a417c0c..e3cf294e 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -299,6 +299,17 @@ class InstallableExtension(BaseModel): logger.warning(f"Cannot fetch extensions manifest at: {url}") continue manifest = resp.json() + if "repos" in manifest: + for r in manifest["repos"]: + ext = await InstallableExtension.from_repo( + r["organisation"], r["repository"] + ) + if ext: + if ext.id in extension_id_list: + continue + extension_list += [ext] + extension_id_list += [ext.id] + if "extensions" in manifest: for e in manifest["extensions"]: if e["id"] in extension_id_list: @@ -318,16 +329,6 @@ class InstallableExtension(BaseModel): ) ] extension_id_list += [e["id"]] - if "repos" in manifest: - for r in manifest["repos"]: - ext = await InstallableExtension.from_repo( - r["organisation"], r["repository"] - ) - if ext: - if ext.id in extension_id_list: - continue - extension_list += [ext] - extension_id_list += [ext.id] except Exception as e: logger.warning(f"Manifest {url} failed with '{str(e)}'") @@ -344,6 +345,14 @@ class InstallableExtension(BaseModel): logger.warning(f"Cannot fetch extensions manifest at: {url}") continue manifest = resp.json() + if "repos" in manifest: + for r in manifest["repos"]: + if r["id"] == ext_id: + repo_releases = await ExtensionRelease.all_releases( + r["organisation"], r["repository"] + ) + extension_releases += repo_releases + if "extensions" in manifest: for e in manifest["extensions"]: if e["id"] == ext_id: @@ -357,12 +366,6 @@ class InstallableExtension(BaseModel): description=e["shortDescription"], ) ] - if "repos" in manifest: - for r in manifest["repos"]: - repo_releases = await ExtensionRelease.all_releases( - r["organisation"], r["repository"] - ) - extension_releases += repo_releases except Exception as e: logger.warning(f"Manifest {url} failed with '{str(e)}'") From 2da466f0c8a54b0c3f29b7a5401c388ffce17336 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 16 Jan 2023 15:59:04 +0200 Subject: [PATCH 056/168] chore: clean-up --- lnbits/core/templates/core/install.html | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 1eeb6639..6b20cbc3 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -236,7 +236,6 @@ showUpgradeDialog: false, showDetailsDialog: false, selectedExtension: null, - selectedExtensionReleases: null, selectedExtensionRepos: null, maxStars: 0 } @@ -326,18 +325,18 @@ console.log('### showUpgrade') this.selectedExtension = extension this.showUpgradeDialog = true + this.selectedExtensionRepos = [] const {data} = await LNbits.api.request( 'GET', `/api/v1/extension/${extension.id}/releases?usr=${this.g.user.id}`, this.g.user.wallets[0].adminkey ) - this.selectedExtensionReleases = data + this.selectedExtensionRepos = data.reduce((repos, release) => { repos[release.source_repo] = repos[release.source_repo] || [] repos[release.source_repo].push(release) return repos }, {}) - console.log('### releases', this.selectedExtensionReleases) console.log('### repos', this.selectedExtensionRepos) }, From e8bed9cd90c929cf4ad6456f04a900d7caa38b17 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 16 Jan 2023 16:26:31 +0200 Subject: [PATCH 057/168] feat: UI improvements --- lnbits/core/templates/core/install.html | 32 +++++++------------------ lnbits/extension_manger.py | 5 ++-- 2 files changed, 11 insertions(+), 26 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 6b20cbc3..6f2dc7f5 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -171,36 +171,20 @@ group="extras" icon="download" :label="release.description" - :caption="'Version: ' + release.version" + :caption="release.version" :content-inset-level="0.5" > - - - -
Headers
-
-
-
- - - - - + + +
Headers
+
+
+
Close
@@ -325,7 +309,7 @@ console.log('### showUpgrade') this.selectedExtension = extension this.showUpgradeDialog = true - this.selectedExtensionRepos = [] + this.selectedExtensionRepos = null const {data} = await LNbits.api.request( 'GET', `/api/v1/extension/${extension.id}/releases?usr=${this.g.user.id}`, diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index e3cf294e..9d77c912 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -109,19 +109,20 @@ class ExtensionRelease(BaseModel): source_repo: str hash: Optional[str] published_at: Optional[str] - url: Optional[str] + html_url: Optional[str] description: Optional[str] @classmethod def from_github_release(cls, source_repo: str, r: dict) -> "ExtensionRelease": return ExtensionRelease( name=r["name"], + description=r["name"], version=r["tag_name"], archive=r["zipball_url"], source_repo=source_repo, # description=r["body"], # bad for JSON published_at=r["published_at"], - url=r["html_url"], + html_url=r["html_url"], ) @classmethod From 41ce316fc6f755543c9d64e7cfc3a61dd55de9f8 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 16 Jan 2023 16:42:57 +0200 Subject: [PATCH 058/168] feat: add install details --- lnbits/core/templates/core/install.html | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 6f2dc7f5..83731d75 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -176,10 +176,16 @@ > -
Headers
+ Install
-
- + +
From 9d0cedfcb23bee8e8fd8ea6d516f8c8006f98d27 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 17 Jan 2023 11:16:54 +0200 Subject: [PATCH 059/168] feat: install GitHib releases also --- lnbits/core/crud.py | 7 +--- lnbits/core/migrations.py | 1 - lnbits/core/templates/core/install.html | 20 +++++++--- lnbits/core/views/api.py | 37 +++++++++++++----- lnbits/core/views/generic.py | 3 -- lnbits/extension_manger.py | 52 +++++++++++++++++-------- 6 files changed, 79 insertions(+), 41 deletions(-) diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index ae6fbb52..dcdf18d2 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -75,25 +75,22 @@ async def add_installed_extension( ext_id: str, version: str, active: bool, - hash: str, meta: dict, conn: Optional[Connection] = None, ) -> None: await (conn or db).execute( """ - INSERT INTO installed_extensions (id, version, active, hash, meta) VALUES (?, ?, ?, ?, ?) + INSERT INTO installed_extensions (id, version, active, meta) VALUES (?, ?, ?, ?) ON CONFLICT (id) DO - UPDATE SET (version, active, hash, meta) = (?, ?, ?, ?) + UPDATE SET (version, active, meta) = (?, ?, ?) """, ( ext_id, version, active, - hash, json.dumps(meta), version, active, - hash, json.dumps(meta), ), ) diff --git a/lnbits/core/migrations.py b/lnbits/core/migrations.py index 946d79f5..61b08912 100644 --- a/lnbits/core/migrations.py +++ b/lnbits/core/migrations.py @@ -278,7 +278,6 @@ async def m009_create_installed_extensions_table(db): id TEXT PRIMARY KEY, version TEXT NOT NULL, active BOOLEAN DEFAULT false, - hash TEXT NOT NULL, meta TEXT NOT NULL DEFAULT '{}' ); """ diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 83731d75..b0776c89 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -176,14 +176,16 @@ > - Install
@@ -258,13 +260,19 @@ ) .filter(extensionNameContains(term)) }, - installExtension: async function (extension) { + installExtension: async function (release) { + const extension = this.selectedExtension try { extension.inProgress = true await LNbits.api.request( 'POST', - `/api/v1/extension/${extension.id}/${extension.hash}?usr=${this.g.user.id}`, - this.g.user.wallets[0].adminkey + `/api/v1/extension?usr=${this.g.user.id}`, + this.g.user.wallets[0].adminkey, + { + ext_id: extension.id, + archive: release.archive, + source_repo: release.source_repo + } ) window.location.href = [ "{{ url_for('install.extensions') }}", diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 299f3144..42e899a2 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -41,6 +41,7 @@ from lnbits.decorators import ( require_invoice_key, ) from lnbits.extension_manger import ( + CreateExtension, Extension, ExtensionRelease, InstallableExtension, @@ -720,13 +721,30 @@ async def websocket_update_get(item_id: str, data: str): return {"sent": False, "data": data} -@core_app.post("/api/v1/extension/{ext_id}/{hash}") +@core_app.post("/api/v1/extension") async def api_install_extension( - ext_id: str, hash: str, user: User = Depends(check_admin) + data: CreateExtension, user: User = Depends(check_admin) ): - ext_info: InstallableExtension = await InstallableExtension.get_extension_info( - ext_id, hash + # ext_info: InstallableExtension = await InstallableExtension.get_extension_info( + # data.ext_id, data.archive + # ) + + all_releases: List[ + ExtensionRelease + ] = await InstallableExtension.get_extension_releases(data.ext_id) + selected_release = [ + r + for r in all_releases + if r.archive == data.archive and r.source_repo == data.source_repo + ] + if len(selected_release) == 0: + raise Exception("uuuuuuu") + + installed_release = selected_release[0] + ext_info = InstallableExtension( + id=data.ext_id, name=data.ext_id, installed_release=installed_release ) + ext_info.download_archive() try: @@ -734,17 +752,16 @@ async def api_install_extension( extension = Extension.from_installable_ext(ext_info) - db_version = (await get_dbversions()).get(ext_id, 0) + db_version = (await get_dbversions()).get(data.ext_id, 0) await migrate_extension_database(extension, db_version) await add_installed_extension( - ext_id=ext_id, - version=ext_info.version, + ext_id=data.ext_id, + version=installed_release.version, active=False, - hash=hash, - meta=dict(ext_info), + meta={"installed_release": dict(installed_release)}, ) - settings.lnbits_disabled_extensions += [ext_id] + settings.lnbits_disabled_extensions += [data.ext_id] # mount routes for the new version core_app_extra.register_new_ext_routes(extension) diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 6d2d01af..933a48ee 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -103,13 +103,10 @@ async def extensions_install( lambda ext: { "id": ext.id, "name": ext.name, - "hash": ext.hash, - "version": ext.version, "icon": ext.icon, "iconUrl": ext.icon_url, "shortDescription": ext.short_description, "stars": ext.stars, - "details": ext.details, "dependencies": ext.dependencies, "isInstalled": ext.id in installed_extensions, "isActive": not ext.id in inactive_extensions, diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 9d77c912..0ad5fac5 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -111,6 +111,7 @@ class ExtensionRelease(BaseModel): published_at: Optional[str] html_url: Optional[str] description: Optional[str] + details_html: Optional[str] = None @classmethod def from_github_release(cls, source_repo: str, r: dict) -> "ExtensionRelease": @@ -146,19 +147,25 @@ class ExtensionRelease(BaseModel): class InstallableExtension(BaseModel): id: str name: str - archive: str # todo: move to installed_release - hash: str short_description: Optional[str] = None - details: Optional[str] = None icon: Optional[str] = None icon_url: Optional[str] = None dependencies: List[str] = [] is_admin_only: bool = False - version: str = "none" # todo: move to Release stars: int = 0 latest_release: Optional[ExtensionRelease] installed_release: Optional[ExtensionRelease] + @property + def hash(self) -> str: + if self.installed_release: + if self.installed_release.hash: + return self.installed_release.hash + m = hashlib.sha256() + m.update(f"{self.installed_release.archive}".encode()) + return m.hexdigest() + return "not-installed" + @property def zip_path(self) -> str: extensions_data_dir = os.path.join(settings.lnbits_data_folder, "extensions") @@ -186,7 +193,7 @@ class InstallableExtension(BaseModel): if os.path.isfile(ext_zip_file): os.remove(ext_zip_file) try: - download_url(self.archive, ext_zip_file) + download_url(self.installed_release.archive, ext_zip_file) except Exception as ex: logger.warning(ex) raise HTTPException( @@ -195,7 +202,7 @@ class InstallableExtension(BaseModel): ) archive_hash = file_hash(ext_zip_file) - if self.hash != archive_hash: + if self.installed_release.hash and self.installed_release.hash != archive_hash: # remove downloaded archive if os.path.isfile(ext_zip_file): os.remove(ext_zip_file) @@ -205,15 +212,22 @@ class InstallableExtension(BaseModel): ) def extract_archive(self): - shutil.rmtree(self.ext_dir, True) - with zipfile.ZipFile(self.zip_path, "r") as zip_ref: - zip_ref.extractall(os.path.join("lnbits", "extensions")) - os.makedirs(os.path.join("lnbits", "upgrades"), exist_ok=True) shutil.rmtree(self.ext_upgrade_dir, True) with zipfile.ZipFile(self.zip_path, "r") as zip_ref: zip_ref.extractall(self.ext_upgrade_dir) + generated_dir_name = os.listdir(self.ext_upgrade_dir)[0] + os.rename( + os.path.join(self.ext_upgrade_dir, generated_dir_name), + os.path.join(self.ext_upgrade_dir, self.id), + ) + shutil.rmtree(self.ext_dir, True) + shutil.copytree( + os.path.join(self.ext_upgrade_dir, self.id), + os.path.join("lnbits", "extensions", self.id), + ) + def nofiy_upgrade(self) -> None: """Update the the list of upgraded extensions. The middleware will perform redirects based on this""" if not self.hash: @@ -261,15 +275,15 @@ class InstallableExtension(BaseModel): logger.warning(e) return None - @classmethod - async def get_extension_info(cls, ext_id: str, hash: str) -> "InstallableExtension": + @classmethod # todo: remove + async def get_extension_info( + cls, ext_id: str, archive: str + ) -> "InstallableExtension": installable_extensions: List[ InstallableExtension ] = await InstallableExtension.get_installable_extensions() - valid_extensions = [ - e for e in installable_extensions if e.id == ext_id and e.hash == hash - ] + valid_extensions = [e for e in installable_extensions if e.id == ext_id] if len(valid_extensions) == 0: raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, @@ -322,7 +336,6 @@ class InstallableExtension(BaseModel): archive=e["archive"], hash=e["hash"], short_description=e["shortDescription"], - details=e["details"] if "details" in e else "", icon=e["icon"], dependencies=e["dependencies"] if "dependencies" in e @@ -365,6 +378,7 @@ class InstallableExtension(BaseModel): hash=e["hash"], source_repo=url, description=e["shortDescription"], + details_html=e.get("details"), ) ] @@ -415,6 +429,12 @@ class InstalledExtensionMiddleware: await self.app(scope, receive, send) +class CreateExtension(BaseModel): + ext_id: str + archive: str + source_repo: str + + def get_valid_extensions(include_disabled_exts=False) -> List[Extension]: return [ extension From 980267cb51affc1d8270d2525003c285a9e75ca7 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 17 Jan 2023 11:17:45 +0200 Subject: [PATCH 060/168] chore: code format --- lnbits/extension_manger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 0ad5fac5..ae796b46 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -227,7 +227,7 @@ class InstallableExtension(BaseModel): os.path.join(self.ext_upgrade_dir, self.id), os.path.join("lnbits", "extensions", self.id), ) - + def nofiy_upgrade(self) -> None: """Update the the list of upgraded extensions. The middleware will perform redirects based on this""" if not self.hash: From d146a45b594420ec23393643cf4da7c0e0d1a526 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 17 Jan 2023 11:57:32 +0200 Subject: [PATCH 061/168] refactor: move logic to static method `get_extension_release` --- lnbits/core/views/api.py | 22 +++++++--------------- lnbits/extension_manger.py | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 42e899a2..6d2dfe7d 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -725,22 +725,14 @@ async def websocket_update_get(item_id: str, data: str): async def api_install_extension( data: CreateExtension, user: User = Depends(check_admin) ): - # ext_info: InstallableExtension = await InstallableExtension.get_extension_info( - # data.ext_id, data.archive - # ) - all_releases: List[ - ExtensionRelease - ] = await InstallableExtension.get_extension_releases(data.ext_id) - selected_release = [ - r - for r in all_releases - if r.archive == data.archive and r.source_repo == data.source_repo - ] - if len(selected_release) == 0: - raise Exception("uuuuuuu") - - installed_release = selected_release[0] + installed_release = await InstallableExtension.get_extension_release( + data.ext_id, data.source_repo, data.archive + ) + if not installed_release: + raise HTTPException( + status_code=HTTPStatus.NOT_FOUND, detail="Release not found" + ) ext_info = InstallableExtension( id=data.ext_id, name=data.ext_id, installed_release=installed_release ) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index ae796b46..9e2732ae 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -387,6 +387,21 @@ class InstallableExtension(BaseModel): return extension_releases + @classmethod + async def get_extension_release( + cls, ext_id: str, source_repo: str, archive: str + ) -> Optional["ExtensionRelease"]: + all_releases: List[ + ExtensionRelease + ] = await InstallableExtension.get_extension_releases(ext_id) + selected_release = [ + r + for r in all_releases + if r.archive == archive and r.source_repo == source_repo + ] + + return selected_release[0] if len(selected_release) != 0 else None + class InstalledExtensionMiddleware: def __init__(self, app: ASGIApp) -> None: From 12060b67adc1069435067bd6f2d97258f4680dd8 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 17 Jan 2023 12:26:49 +0200 Subject: [PATCH 062/168] feat: store and retrieved the `installed_release` --- lnbits/core/crud.py | 44 ++++++++++++++++++++++++++++---------- lnbits/core/migrations.py | 1 + lnbits/core/views/api.py | 1 + lnbits/extension_manger.py | 11 +++++----- 4 files changed, 41 insertions(+), 16 deletions(-) diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index dcdf18d2..0e3ae1cb 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -6,6 +6,7 @@ from uuid import uuid4 from lnbits import bolt11 from lnbits.db import COCKROACH, POSTGRES, Connection +from lnbits.extension_manger import ExtensionRelease, InstallableExtension from lnbits.settings import AdminSettings, EditableSettings, SuperSettings, settings from . import db @@ -74,22 +75,25 @@ async def add_installed_extension( *, ext_id: str, version: str, + name: str, active: bool, meta: dict, conn: Optional[Connection] = None, ) -> None: await (conn or db).execute( """ - INSERT INTO installed_extensions (id, version, active, meta) VALUES (?, ?, ?, ?) + INSERT INTO installed_extensions (id, version, name, active, meta) VALUES (?, ?, ?, ?, ?) ON CONFLICT (id) DO - UPDATE SET (version, active, meta) = (?, ?, ?) + UPDATE SET (version, name, active, meta) = (?, ?, ?, ?) """, ( ext_id, version, + name, active, json.dumps(meta), version, + name, active, json.dumps(meta), ), @@ -118,16 +122,22 @@ async def delete_installed_extension( ) -async def update_user_extension( - *, user_id: str, extension: str, active: bool, conn: Optional[Connection] = None -) -> None: - await (conn or db).execute( - """ - INSERT INTO extensions ("user", extension, active) VALUES (?, ?, ?) - ON CONFLICT ("user", extension) DO UPDATE SET active = ? - """, - (user_id, extension, active, active), +async def get_installed_extension( + ext_id: str, conn: Optional[Connection] = None +) -> InstallableExtension: + row = await (conn or db).fetchone( + "SELECT * FROM installed_extensions WHERE id = ?", + (ext_id,), ) + if not row: + return None + + data = dict(row) + meta = json.loads(data["meta"]) + ext = InstallableExtension(**data) + if "installed_release" in meta: + ext.installed_release = ExtensionRelease(**meta["installed_release"]) + return ext async def get_inactive_extensions(*, conn: Optional[Connection] = None) -> List[str]: @@ -140,6 +150,18 @@ async def get_inactive_extensions(*, conn: Optional[Connection] = None) -> List[ ) +async def update_user_extension( + *, user_id: str, extension: str, active: bool, conn: Optional[Connection] = None +) -> None: + await (conn or db).execute( + """ + INSERT INTO extensions ("user", extension, active) VALUES (?, ?, ?) + ON CONFLICT ("user", extension) DO UPDATE SET active = ? + """, + (user_id, extension, active, active), + ) + + # wallets # ------- diff --git a/lnbits/core/migrations.py b/lnbits/core/migrations.py index 61b08912..472a7c22 100644 --- a/lnbits/core/migrations.py +++ b/lnbits/core/migrations.py @@ -277,6 +277,7 @@ async def m009_create_installed_extensions_table(db): CREATE TABLE IF NOT EXISTS installed_extensions ( id TEXT PRIMARY KEY, version TEXT NOT NULL, + name TEXT NOT NULL, active BOOLEAN DEFAULT false, meta TEXT NOT NULL DEFAULT '{}' ); diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 6d2dfe7d..b7a98fbb 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -750,6 +750,7 @@ async def api_install_extension( await add_installed_extension( ext_id=data.ext_id, version=installed_release.version, + name=ext_info.name, active=False, meta={"installed_release": dict(installed_release)}, ) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 9e2732ae..cee3aa99 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -254,16 +254,17 @@ class InstallableExtension(BaseModel): shutil.rmtree(self.ext_upgrade_dir, True) @classmethod - async def from_repo(cls, org, repository) -> Optional["InstallableExtension"]: + async def from_repo( + cls, ext_id, org, repository + ) -> Optional["InstallableExtension"]: try: + # installed_release = await get_installed_extension(ext_id) repo, latest_release, config = await fetch_github_repo_info(org, repository) return InstallableExtension( - id=repo["name"], + id=ext_id, name=config.get("name"), short_description=config.get("short_description"), - archive="xx", - hash="123", version="0", stars=repo["stargazers_count"], icon_url=icon_to_github_url(org, config.get("tile")), @@ -317,7 +318,7 @@ class InstallableExtension(BaseModel): if "repos" in manifest: for r in manifest["repos"]: ext = await InstallableExtension.from_repo( - r["organisation"], r["repository"] + r["id"], r["organisation"], r["repository"] ) if ext: if ext.id in extension_id_list: From 6b360b927ce4de2eaaf9e1546ad56902259b5250 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 17 Jan 2023 14:51:09 +0200 Subject: [PATCH 063/168] feat: returned the installed release --- lnbits/core/crud.py | 12 ++------- lnbits/core/models.py | 5 ++-- lnbits/core/views/api.py | 10 ++++---- lnbits/core/views/generic.py | 3 +++ lnbits/extension_manger.py | 50 +++++++++++++++++++++++++++--------- 5 files changed, 50 insertions(+), 30 deletions(-) diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index 0e3ae1cb..64ecc121 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -6,7 +6,6 @@ from uuid import uuid4 from lnbits import bolt11 from lnbits.db import COCKROACH, POSTGRES, Connection -from lnbits.extension_manger import ExtensionRelease, InstallableExtension from lnbits.settings import AdminSettings, EditableSettings, SuperSettings, settings from . import db @@ -122,9 +121,7 @@ async def delete_installed_extension( ) -async def get_installed_extension( - ext_id: str, conn: Optional[Connection] = None -) -> InstallableExtension: +async def get_installed_extension(ext_id: str, conn: Optional[Connection] = None): row = await (conn or db).fetchone( "SELECT * FROM installed_extensions WHERE id = ?", (ext_id,), @@ -132,12 +129,7 @@ async def get_installed_extension( if not row: return None - data = dict(row) - meta = json.loads(data["meta"]) - ext = InstallableExtension(**data) - if "installed_release" in meta: - ext.installed_release = ExtensionRelease(**meta["installed_release"]) - return ext + return dict(row) async def get_inactive_extensions(*, conn: Optional[Connection] = None) -> List[str]: diff --git a/lnbits/core/models.py b/lnbits/core/models.py index 7b147208..100c4fcb 100644 --- a/lnbits/core/models.py +++ b/lnbits/core/models.py @@ -6,9 +6,8 @@ import time from sqlite3 import Row from typing import Callable, Dict, List, Optional -from ecdsa import SECP256k1, SigningKey -from fastapi import Query -from lnurl import encode as lnurl_encode +from ecdsa import SECP256k1, SigningKey # type: ignore +from lnurl import encode as lnurl_encode # type: ignore from loguru import logger from pydantic import BaseModel diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index b7a98fbb..f8eafad9 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -726,15 +726,15 @@ async def api_install_extension( data: CreateExtension, user: User = Depends(check_admin) ): - installed_release = await InstallableExtension.get_extension_release( + release = await InstallableExtension.get_extension_release( data.ext_id, data.source_repo, data.archive ) - if not installed_release: + if not release: raise HTTPException( status_code=HTTPStatus.NOT_FOUND, detail="Release not found" ) ext_info = InstallableExtension( - id=data.ext_id, name=data.ext_id, installed_release=installed_release + id=data.ext_id, name=data.ext_id, installed_release=release ) ext_info.download_archive() @@ -749,10 +749,10 @@ async def api_install_extension( await add_installed_extension( ext_id=data.ext_id, - version=installed_release.version, + version=release.version, name=ext_info.name, active=False, - meta={"installed_release": dict(installed_release)}, + meta={"installed_release": dict(release)}, ) settings.lnbits_disabled_extensions += [data.ext_id] diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 933a48ee..f7206432 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -113,6 +113,9 @@ async def extensions_install( "latestRelease": dict(ext.latest_release) if ext.latest_release else None, + "installedRelease": dict(ext.installed_release) + if ext.installed_release + else None, }, extension_list, ) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index cee3aa99..1319145e 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -15,6 +15,7 @@ from loguru import logger from pydantic import BaseModel from starlette.types import ASGIApp, Receive, Scope, Send +from lnbits.core.crud import get_installed_extension from lnbits.settings import settings @@ -253,12 +254,24 @@ class InstallableExtension(BaseModel): shutil.rmtree(self.ext_upgrade_dir, True) + @classmethod + async def from_row(cls, data: dict) -> Optional["InstallableExtension"]: + if not data: + return None + meta = json.loads(data["meta"]) + ext = InstallableExtension(**data) + if "installed_release" in meta: + ext.installed_release = ExtensionRelease(**meta["installed_release"]) + return ext + @classmethod async def from_repo( cls, ext_id, org, repository ) -> Optional["InstallableExtension"]: try: - # installed_release = await get_installed_extension(ext_id) + installed_release = await InstallableExtension.from_row( + await get_installed_extension(ext_id) + ) repo, latest_release, config = await fetch_github_repo_info(org, repository) return InstallableExtension( @@ -268,6 +281,7 @@ class InstallableExtension(BaseModel): version="0", stars=repo["stargazers_count"], icon_url=icon_to_github_url(org, config.get("tile")), + installed_release=installed_release, latest_release=ExtensionRelease.from_github_release( repo["html_url"], latest_release ), @@ -276,6 +290,28 @@ class InstallableExtension(BaseModel): logger.warning(e) return None + @classmethod + async def from_manifest(cls, e: dict) -> Optional["InstallableExtension"]: + try: + installed_ext = await InstallableExtension.from_row( + await get_installed_extension(e["id"]) + ) + return InstallableExtension( + id=e["id"], + name=e["name"], + archive=e["archive"], + hash=e["hash"], + short_description=e["shortDescription"], + icon=e["icon"], + installed_release=installed_ext.installed_release + if installed_ext + else None, + dependencies=e["dependencies"] if "dependencies" in e else [], + ) + except Exception as e: + logger.warning(e) + return None + @classmethod # todo: remove async def get_extension_info( cls, ext_id: str, archive: str @@ -331,17 +367,7 @@ class InstallableExtension(BaseModel): if e["id"] in extension_id_list: continue extension_list += [ - InstallableExtension( - id=e["id"], - name=e["name"], - archive=e["archive"], - hash=e["hash"], - short_description=e["shortDescription"], - icon=e["icon"], - dependencies=e["dependencies"] - if "dependencies" in e - else [], - ) + await InstallableExtension.from_manifest(e) ] extension_id_list += [e["id"]] except Exception as e: From 77c17a2b63ecd83a7e3ff3797379e557e8fd652a Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 17 Jan 2023 15:05:17 +0200 Subject: [PATCH 064/168] chore: fix formatting --- lnbits/extension_manger.py | 41 ++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index 1319145e..acba1be4 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -291,26 +291,22 @@ class InstallableExtension(BaseModel): return None @classmethod - async def from_manifest(cls, e: dict) -> Optional["InstallableExtension"]: - try: - installed_ext = await InstallableExtension.from_row( - await get_installed_extension(e["id"]) - ) - return InstallableExtension( - id=e["id"], - name=e["name"], - archive=e["archive"], - hash=e["hash"], - short_description=e["shortDescription"], - icon=e["icon"], - installed_release=installed_ext.installed_release - if installed_ext - else None, - dependencies=e["dependencies"] if "dependencies" in e else [], - ) - except Exception as e: - logger.warning(e) - return None + async def from_manifest(cls, e: dict) -> "InstallableExtension": + installed_ext = await InstallableExtension.from_row( + await get_installed_extension(e["id"]) + ) + return InstallableExtension( + id=e["id"], + name=e["name"], + archive=e["archive"], + hash=e["hash"], + short_description=e["shortDescription"], + icon=e["icon"], + installed_release=installed_ext.installed_release + if installed_ext + else None, + dependencies=e["dependencies"] if "dependencies" in e else [], + ) @classmethod # todo: remove async def get_extension_info( @@ -353,12 +349,13 @@ class InstallableExtension(BaseModel): manifest = resp.json() if "repos" in manifest: for r in manifest["repos"]: + if r["id"] in extension_id_list: + continue ext = await InstallableExtension.from_repo( r["id"], r["organisation"], r["repository"] ) if ext: - if ext.id in extension_id_list: - continue + extension_list += [ext] extension_id_list += [ext.id] From 86c86958ae1ba57a6991014aff769871184cffee Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 17 Jan 2023 16:28:24 +0200 Subject: [PATCH 065/168] refactor: more and more --- lnbits/core/crud.py | 47 +++++++++++++++++++++-------- lnbits/core/migrations.py | 4 +++ lnbits/core/views/api.py | 8 +---- lnbits/core/views/generic.py | 10 +++++-- lnbits/extension_manger.py | 58 +++++++----------------------------- 5 files changed, 56 insertions(+), 71 deletions(-) diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index 64ecc121..4919d014 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -6,6 +6,7 @@ from uuid import uuid4 from lnbits import bolt11 from lnbits.db import COCKROACH, POSTGRES, Connection +from lnbits.extension_manger import InstallableExtension from lnbits.settings import AdminSettings, EditableSettings, SuperSettings, settings from . import db @@ -71,29 +72,39 @@ async def get_user(user_id: str, conn: Optional[Connection] = None) -> Optional[ async def add_installed_extension( - *, - ext_id: str, - version: str, - name: str, - active: bool, - meta: dict, + ext: InstallableExtension, conn: Optional[Connection] = None, ) -> None: + meta = { + "installed_release": dict(ext.installed_release) + if ext.installed_release + else None, + "dependencies": ext.dependencies, + } + + version = ext.installed_release.version if ext.installed_release else "" + await (conn or db).execute( """ - INSERT INTO installed_extensions (id, version, name, active, meta) VALUES (?, ?, ?, ?, ?) + INSERT INTO installed_extensions (id, version, name, short_description, icon, icon_url, stars, meta) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT (id) DO - UPDATE SET (version, name, active, meta) = (?, ?, ?, ?) + UPDATE SET (version, name, short_description, icon, icon_url, stars, meta) = (?, ?, ?, ?, ?, ?, ?) """, ( - ext_id, + ext.id, version, - name, - active, + ext.name, + ext.short_description, + ext.icon, + ext.icon_url, + ext.stars, json.dumps(meta), version, - name, - active, + ext.name, + ext.short_description, + ext.icon, + ext.icon_url, + ext.stars, json.dumps(meta), ), ) @@ -132,6 +143,16 @@ async def get_installed_extension(ext_id: str, conn: Optional[Connection] = None return dict(row) +async def get_installed_extensions( + conn: Optional[Connection] = None, +) -> List["InstallableExtension"]: + rows = await (conn or db).fetchall( + "SELECT * FROM installed_extensions", + (), + ) + return [InstallableExtension.from_row(row) for row in rows] + + async def get_inactive_extensions(*, conn: Optional[Connection] = None) -> List[str]: inactive_extensions = await (conn or db).fetchall( """SELECT id FROM installed_extensions WHERE NOT active""", diff --git a/lnbits/core/migrations.py b/lnbits/core/migrations.py index 472a7c22..70783410 100644 --- a/lnbits/core/migrations.py +++ b/lnbits/core/migrations.py @@ -278,6 +278,10 @@ async def m009_create_installed_extensions_table(db): id TEXT PRIMARY KEY, version TEXT NOT NULL, name TEXT NOT NULL, + short_description TEXT, + icon TEXT, + icon_url TEXT, + stars INT NOT NULL DEFAULT 0, active BOOLEAN DEFAULT false, meta TEXT NOT NULL DEFAULT '{}' ); diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index f8eafad9..3e12e809 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -747,13 +747,7 @@ async def api_install_extension( db_version = (await get_dbversions()).get(data.ext_id, 0) await migrate_extension_database(extension, db_version) - await add_installed_extension( - ext_id=data.ext_id, - version=release.version, - name=ext_info.name, - active=False, - meta={"installed_release": dict(release)}, - ) + await add_installed_extension(ext_info) settings.lnbits_disabled_extensions += [data.ext_id] # mount routes for the new version diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index f7206432..a26305e3 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -23,6 +23,7 @@ from ..crud import ( delete_wallet, get_balance_check, get_inactive_extensions, + get_installed_extensions, get_user, save_balance_notify, update_installed_extension_state, @@ -75,9 +76,12 @@ async def extensions_install( deactivate: str = Query(None), ): try: + installed_extensions: List[ + "InstallableExtension" + ] = await get_installed_extensions() extension_list: List[ InstallableExtension - ] = await InstallableExtension.get_installable_extensions() + ] = await InstallableExtension.get_installable_extensions(installed_extensions) except Exception as ex: logger.warning(ex) extension_list = [] @@ -96,7 +100,7 @@ async def extensions_install( ext_id=ext_id, active=activate != None ) - installed_extensions = list(map(lambda e: e.code, get_valid_extensions(True))) + all_extensions = list(map(lambda e: e.code, get_valid_extensions(True))) inactive_extensions = await get_inactive_extensions() extensions = list( map( @@ -108,7 +112,7 @@ async def extensions_install( "shortDescription": ext.short_description, "stars": ext.stars, "dependencies": ext.dependencies, - "isInstalled": ext.id in installed_extensions, + "isInstalled": ext.id in all_extensions, "isActive": not ext.id in inactive_extensions, "latestRelease": dict(ext.latest_release) if ext.latest_release diff --git a/lnbits/extension_manger.py b/lnbits/extension_manger.py index acba1be4..4a9fb7e4 100644 --- a/lnbits/extension_manger.py +++ b/lnbits/extension_manger.py @@ -15,7 +15,6 @@ from loguru import logger from pydantic import BaseModel from starlette.types import ASGIApp, Receive, Scope, Send -from lnbits.core.crud import get_installed_extension from lnbits.settings import settings @@ -255,9 +254,7 @@ class InstallableExtension(BaseModel): shutil.rmtree(self.ext_upgrade_dir, True) @classmethod - async def from_row(cls, data: dict) -> Optional["InstallableExtension"]: - if not data: - return None + def from_row(cls, data: dict) -> "InstallableExtension": meta = json.loads(data["meta"]) ext = InstallableExtension(**data) if "installed_release" in meta: @@ -269,9 +266,6 @@ class InstallableExtension(BaseModel): cls, ext_id, org, repository ) -> Optional["InstallableExtension"]: try: - installed_release = await InstallableExtension.from_row( - await get_installed_extension(ext_id) - ) repo, latest_release, config = await fetch_github_repo_info(org, repository) return InstallableExtension( @@ -281,7 +275,6 @@ class InstallableExtension(BaseModel): version="0", stars=repo["stargazers_count"], icon_url=icon_to_github_url(org, config.get("tile")), - installed_release=installed_release, latest_release=ExtensionRelease.from_github_release( repo["html_url"], latest_release ), @@ -291,10 +284,7 @@ class InstallableExtension(BaseModel): return None @classmethod - async def from_manifest(cls, e: dict) -> "InstallableExtension": - installed_ext = await InstallableExtension.from_row( - await get_installed_extension(e["id"]) - ) + def from_manifest(cls, e: dict) -> "InstallableExtension": return InstallableExtension( id=e["id"], name=e["name"], @@ -302,42 +292,17 @@ class InstallableExtension(BaseModel): hash=e["hash"], short_description=e["shortDescription"], icon=e["icon"], - installed_release=installed_ext.installed_release - if installed_ext - else None, dependencies=e["dependencies"] if "dependencies" in e else [], ) - @classmethod # todo: remove - async def get_extension_info( - cls, ext_id: str, archive: str - ) -> "InstallableExtension": - installable_extensions: List[ - InstallableExtension - ] = await InstallableExtension.get_installable_extensions() - - valid_extensions = [e for e in installable_extensions if e.id == ext_id] - if len(valid_extensions) == 0: - raise HTTPException( - status_code=HTTPStatus.BAD_REQUEST, - detail=f"Unknown extension id: {ext_id}", - ) - extension = valid_extensions[0] - - # check that all dependecies are installed - installed_extensions = list(map(lambda e: e.code, get_valid_extensions(True))) - if not set(extension.dependencies).issubset(installed_extensions): - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, - detail=f"Not all dependencies are installed: {extension.dependencies}", - ) - - return extension - @classmethod - async def get_installable_extensions(cls) -> List["InstallableExtension"]: - extension_list: List[InstallableExtension] = [] - extension_id_list: List[str] = [] + async def get_installable_extensions( + cls, installed_extensions: List["InstallableExtension"] = [] + ) -> List["InstallableExtension"]: + extension_list: List[InstallableExtension] = ( + installed_extensions if installed_extensions else [] + ) + extension_id_list: List[str] = [e.id for e in extension_list] async with httpx.AsyncClient() as client: for url in settings.lnbits_extensions_manifests: @@ -355,7 +320,6 @@ class InstallableExtension(BaseModel): r["id"], r["organisation"], r["repository"] ) if ext: - extension_list += [ext] extension_id_list += [ext.id] @@ -363,9 +327,7 @@ class InstallableExtension(BaseModel): for e in manifest["extensions"]: if e["id"] in extension_id_list: continue - extension_list += [ - await InstallableExtension.from_manifest(e) - ] + extension_list += [InstallableExtension.from_manifest(e)] extension_id_list += [e["id"]] except Exception as e: logger.warning(f"Manifest {url} failed with '{str(e)}'") From ebbfdbb6c9029fb4564a0a907a3da1058c3889a0 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 17 Jan 2023 16:40:14 +0200 Subject: [PATCH 066/168] feat: use manage dialog --- lnbits/core/templates/core/install.html | 31 +++++++------------------ 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index b0776c89..e5747a9e 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -84,12 +84,9 @@
-
+
- Upgrade - - Uninstall
- - - Install +
@@ -194,6 +179,9 @@
+ + Uninstall Close
@@ -285,7 +273,7 @@ } }, uninstallExtension: async function () { - extension = this.selectedExtension + const extension = this.selectedExtension try { extension.inProgress = true await LNbits.api.request( @@ -314,13 +302,12 @@ ].join('') }, - showUninstall: function (extension) { - this.selectedExtension = extension + showUninstall: function () { + this.showUpgradeDialog = false this.showUninstallDialog = true }, showUpgrade: async function (extension) { - console.log('### showUpgrade') this.selectedExtension = extension this.showUpgradeDialog = true this.selectedExtensionRepos = null From ce8d45c8c66071c74c0123b428acdc0b79ad325a Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 17 Jan 2023 17:07:39 +0200 Subject: [PATCH 067/168] feat: only allow activation if installed --- lnbits/core/templates/core/install.html | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index e5747a9e..944020d8 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -89,6 +89,7 @@ Manage
- - Uninstall + Uninstall Close
From 03df3823257c57b0e837abcf9986a2588757326c Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 17 Jan 2023 17:07:52 +0200 Subject: [PATCH 068/168] feat: fetch the installed release --- lnbits/core/views/generic.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index a26305e3..41a37e60 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -79,9 +79,20 @@ async def extensions_install( installed_extensions: List[ "InstallableExtension" ] = await get_installed_extensions() + installed_extensions_ids = [e.id for e in installed_extensions] + extension_list: List[ InstallableExtension - ] = await InstallableExtension.get_installable_extensions(installed_extensions) + ] = await InstallableExtension.get_installable_extensions() + extension_list += [ + e for e in installed_extensions if e.id not in installed_extensions_ids + ] + + for e in extension_list: + installed_ext = [ie for ie in installed_extensions if e.id == ie.id] + if len(installed_ext) != 0: + e.installed_release = installed_ext[0].installed_release + except Exception as ex: logger.warning(ex) extension_list = [] From 584b667637d5658c4b25e544bc52e3be89afe48e Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Tue, 17 Jan 2023 17:27:37 +0200 Subject: [PATCH 069/168] feat: show new install available icon --- lnbits/core/templates/core/install.html | 52 ++++++++++++------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 944020d8..0bae2364 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -55,12 +55,11 @@
- More + New Version
@@ -155,18 +154,23 @@ v-for="release of selectedExtensionRepos[repo]" :key="release.version" group="extras" - icon="download" + :icon="isInstalledVersion(selectedExtension, release) ? 'download_done' : 'download'" :label="release.description" :caption="release.version" :content-inset-level="0.5" + :header-class="isInstalledVersion(selectedExtension, release) ? 'text-green' : ''" > Install + xxxxx
- - {%raw%} - - -
{{selectedExtension.name}}
-
- -
- Done -
-
-
- {%endraw%}
{% endblock %} {% block scripts %} {{ window_vars(user) }} {% endblock %} {% block page %}
-
- Add or Remove Extensions -
+
-
- Back -
-
+
- Manage extensions + Extensions + + + + + + + + Add extensions From 223e92f9e2db6b0049590e840fed84f1c1173baa Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 14:41:37 +0200 Subject: [PATCH 116/168] fix: make layout similar with `extensions` page --- lnbits/core/templates/core/install.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 2142ae89..041f04aa 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -24,7 +24,7 @@
From cf4c9baeebc5f3f98a92670cdb041914780603f6 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 15:08:48 +0200 Subject: [PATCH 117/168] feat: make page more similar with the extensions page --- lnbits/core/templates/core/install.html | 79 +++++++++++++++---------- 1 file changed, 49 insertions(+), 30 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 041f04aa..628632ee 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -46,7 +46,7 @@ style="font-size: 4rem" >
-
+
New Version + {% raw %} +
+ {{ extension.name }} +
+
+ {{ extension.shortDescription }} +
+
+ {{ extension.name }} +
+
+ {{ extension.shortDescription }} +
+ {% endraw %}
- - {% raw %} -
{{ extension.name}}
- {{ extension.shortDescription }} -
- Depends on: -   - - - +
+
+ Depends on: +   + + + +
+
+
+
+ + +
- {% endraw %} @@ -96,20 +128,7 @@
-
- - - -
+
From 8857cb94b478e83f229a015417ef5fb11032248d Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 15:52:27 +0200 Subject: [PATCH 118/168] feat: move GitHub stars inside the repos list --- lnbits/core/templates/core/install.html | 38 +++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 628632ee..b8874fca 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -166,13 +166,45 @@ + + From 9cf587a64af09949848608a6bfa84c5c27b615ce Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 15:53:27 +0200 Subject: [PATCH 119/168] chore: format `SQL` --- lnbits/commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/commands.py b/lnbits/commands.py index b5463f70..50228112 100644 --- a/lnbits/commands.py +++ b/lnbits/commands.py @@ -62,7 +62,7 @@ async def migrate_databases(): ) elif conn.type in {POSTGRES, COCKROACH}: exists = await conn.fetchone( - "SELECT * FROM information_schema.tables WHERE table_schema= 'public' AND table_name = 'dbversions'" + "SELECT * FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'dbversions'" ) if not exists: From ea31e148aea63cd6bae9a61308a35a413077c0ee Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 15:55:58 +0200 Subject: [PATCH 120/168] refactor: simplify download & extract logic --- lnbits/app.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index 4c668d2a..d21fb5bd 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -147,11 +147,11 @@ def check_installed_extension(ext: InstallableExtension) -> bool: if ext.has_installed_version: return True - if ext.zip_path in zip_files: - ext.extract_archive() - else: + + if ext.zip_path not in zip_files: ext.download_archive() - ext.extract_archive() + ext.extract_archive() + return False From fa5d824eead1cb3cb8b0f045b4b1c529b616b2c4 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 15:59:44 +0200 Subject: [PATCH 121/168] refactor: remove redundant changes --- lnbits/app.py | 2 +- lnbits/core/crud.py | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index d21fb5bd..1d623b1c 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -151,7 +151,7 @@ def check_installed_extension(ext: InstallableExtension) -> bool: if ext.zip_path not in zip_files: ext.download_archive() ext.extract_archive() - + return False diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index 0c031cd1..4921436b 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -138,10 +138,8 @@ async def get_installed_extension(ext_id: str, conn: Optional[Connection] = None "SELECT * FROM installed_extensions WHERE id = ?", (ext_id,), ) - if not row: - return None - return dict(row) + return dict(row) if row else None async def get_installed_extensions( @@ -159,9 +157,7 @@ async def get_inactive_extensions(*, conn: Optional[Connection] = None) -> List[ """SELECT id FROM installed_extensions WHERE NOT active""", (), ) - return ( - [ext[0] for ext in inactive_extensions] if len(inactive_extensions) != 0 else [] - ) + return [ext[0] for ext in inactive_extensions] async def update_user_extension( From 5b6e11a621080d219a0cd2bec751e88019fc79b5 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 16:10:47 +0200 Subject: [PATCH 122/168] fix: import --- lnbits/core/views/api.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index e89732ee..d4347712 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -22,7 +22,6 @@ from fastapi import ( WebSocketDisconnect, ) from fastapi.exceptions import HTTPException -from fastapi.params import Body from loguru import logger from pydantic import BaseModel from pydantic.fields import Field From 53a95ccc113782f5c95c30c50ed79c147a5b3346 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 16:11:21 +0200 Subject: [PATCH 123/168] refactor: search in list --- lnbits/core/views/generic.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 7aced1e9..d46ddb50 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -87,14 +87,14 @@ async def extensions_install( ] for e in installable_exts: - installed_ext = [ie for ie in installed_exts if e.id == ie.id] - if len(installed_ext) != 0: - e.installed_release = installed_ext[0].installed_release + installed_ext = next((ie for ie in installed_exts if e.id == ie.id), None) + if installed_ext: + e.installed_release = installed_ext.installed_release # use the installed extension values - e.name = installed_ext[0].name - e.short_description = installed_ext[0].short_description - e.icon = installed_ext[0].icon - e.icon_url = installed_ext[0].icon_url + e.name = installed_ext.name + e.short_description = installed_ext.short_description + e.icon = installed_ext.icon + e.icon_url = installed_ext.icon_url except Exception as ex: logger.warning(ex) From f75529e1c256ed7c5a0db320d1d3757ac94b6a4e Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 16:11:51 +0200 Subject: [PATCH 124/168] fix: double assignment --- lnbits/core/helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/helpers.py b/lnbits/core/helpers.py index 62a9d925..2b029e45 100644 --- a/lnbits/core/helpers.py +++ b/lnbits/core/helpers.py @@ -27,7 +27,7 @@ async def run_migration(db, migrations_module, current_version): matcher = re.compile(r"^m(\d\d\d)_") db_name = migrations_module.__name__.split(".")[-2] for key, migrate in migrations_module.__dict__.items(): - match = match = matcher.match(key) + match = matcher.match(key) if match: version = int(match.group(1)) if version > current_version: From 4530400d33ab4c51a0a96e2a01522e7746814f8c Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 17:08:44 +0200 Subject: [PATCH 125/168] chore: add types to method params --- .coverage.Vlads-MacBook-Pro.local.24340.835500 | Bin 0 -> 53248 bytes lnbits/core/helpers.py | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 .coverage.Vlads-MacBook-Pro.local.24340.835500 diff --git a/.coverage.Vlads-MacBook-Pro.local.24340.835500 b/.coverage.Vlads-MacBook-Pro.local.24340.835500 new file mode 100644 index 0000000000000000000000000000000000000000..fa1a132062c4ad9b9c6c05d73ca1438836bf27f5 GIT binary patch literal 53248 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 E0F7XQN&o-= literal 0 HcmV?d00001 diff --git a/lnbits/core/helpers.py b/lnbits/core/helpers.py index 2b029e45..7d5c2920 100644 --- a/lnbits/core/helpers.py +++ b/lnbits/core/helpers.py @@ -1,8 +1,10 @@ import importlib import re +from typing import Any from loguru import logger +from lnbits.db import Connection from lnbits.extension_manager import Extension from . import db as core_db @@ -23,7 +25,7 @@ async def migrate_extension_database(ext: Extension, current_version): await run_migration(ext_conn, ext_migrations, current_version) -async def run_migration(db, migrations_module, current_version): +async def run_migration(db: Connection, migrations_module: Any, current_version: int): matcher = re.compile(r"^m(\d\d\d)_") db_name = migrations_module.__name__.split(".")[-2] for key, migrate in migrations_module.__dict__.items(): From b069fe17d8a5a12d9c04d7c38cc3d7951bbef737 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 17:48:52 +0200 Subject: [PATCH 126/168] chore: add comments for `register_new_ext_routes` --- lnbits/app.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lnbits/app.py b/lnbits/app.py index 1d623b1c..e7ae6b00 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -84,6 +84,7 @@ def create_app() -> FastAPI: register_async_tasks(app) register_exception_handlers(app) + # Allow registering new extensions routes without direct access to the `app` object setattr(core_app_extra, "register_new_ext_routes", register_new_ext_routes(app)) return app @@ -184,6 +185,8 @@ def register_routes(app: FastAPI) -> None: def register_new_ext_routes(app: FastAPI) -> Callable: + # Returns a function that registers new routes for an extension. + # The returned function encapsulates (creates a closure around) the `app` object but does expose it. def register_new_ext_routes_fn(ext: Extension): register_ext_routes(app, ext) From e95c6ec3a6a6ce0cbd68a139db9feb50cba7d0ef Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 17:58:56 +0200 Subject: [PATCH 127/168] chore: add docs to `InstalledExtensionMiddleware` class --- lnbits/extension_manager.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lnbits/extension_manager.py b/lnbits/extension_manager.py index 6b0a1bc1..0cceaa1b 100644 --- a/lnbits/extension_manager.py +++ b/lnbits/extension_manager.py @@ -402,6 +402,10 @@ class InstallableExtension(BaseModel): class InstalledExtensionMiddleware: + # This middleware class intercepts calls made to the extensions API and: + # - it blocks the calls if the extension has been disabled or uninstalled. + # - it redirects the calls to the latest version of the extension if the extension has been upgraded. + # - otherwise it has no effect def __init__(self, app: ASGIApp) -> None: self.app = app From 5212320d8d7f374030ac19d96d1833d88c04606a Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 18:00:50 +0200 Subject: [PATCH 128/168] refactor: simplify if+for --- lnbits/extension_manager.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/lnbits/extension_manager.py b/lnbits/extension_manager.py index 0cceaa1b..e122dc0b 100644 --- a/lnbits/extension_manager.py +++ b/lnbits/extension_manager.py @@ -326,23 +326,22 @@ class InstallableExtension(BaseModel): try: error_msg = "Cannot fetch extensions manifest" manifest = await gihub_api_get(url, error_msg) - if "repos" in manifest: - for r in manifest["repos"]: - if r["id"] in extension_id_list: - continue - ext = await InstallableExtension.from_repo( - r["id"], r["organisation"], r["repository"] - ) - if ext: - extension_list += [ext] - extension_id_list += [ext.id] - if "extensions" in manifest: - for e in manifest["extensions"]: - if e["id"] in extension_id_list: - continue - extension_list += [InstallableExtension.from_manifest(e)] - extension_id_list += [e["id"]] + for r in manifest.get("repos", []): + if r["id"] in extension_id_list: + continue + ext = await InstallableExtension.from_repo( + r["id"], r["organisation"], r["repository"] + ) + if ext: + extension_list += [ext] + extension_id_list += [ext.id] + + for e in manifest.get("extensions", []): + if e["id"] in extension_id_list: + continue + extension_list += [InstallableExtension.from_manifest(e)] + extension_id_list += [e["id"]] except Exception as e: logger.warning(f"Manifest {url} failed with '{str(e)}'") From 2dff48dcd0cd8baae3922de026d0302eb298ad42 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 18:01:05 +0200 Subject: [PATCH 129/168] chore: fix comment --- lnbits/extension_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/extension_manager.py b/lnbits/extension_manager.py index e122dc0b..f57c2786 100644 --- a/lnbits/extension_manager.py +++ b/lnbits/extension_manager.py @@ -249,7 +249,7 @@ class InstallableExtension(BaseModel): ) def nofiy_upgrade(self) -> None: - """Update the the list of upgraded extensions. The middleware will perform redirects based on this""" + """Update the list of upgraded extensions. The middleware will perform redirects based on this""" if not self.hash: return From 0b3324cd8ff9575439ab685291c23ec5ec9e2b61 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 18:10:29 +0200 Subject: [PATCH 130/168] refactor: create `TransientSettings` for settings that are not to be persisted --- lnbits/core/services.py | 3 ++- lnbits/settings.py | 20 ++++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/lnbits/core/services.py b/lnbits/core/services.py index eefb2f99..a74745bd 100644 --- a/lnbits/core/services.py +++ b/lnbits/core/services.py @@ -22,6 +22,7 @@ from lnbits.settings import ( readonly_variables, send_admin_user_to_saas, settings, + transient_variables, ) from lnbits.wallets.base import PaymentResponse, PaymentStatus @@ -449,7 +450,7 @@ async def check_admin_settings(): def update_cached_settings(sets_dict: dict): for key, value in sets_dict.items(): - if not key in readonly_variables: + if not key in readonly_variables + transient_variables: try: setattr(settings, key, value) except: diff --git a/lnbits/settings.py b/lnbits/settings.py index 5c1b017c..abf22c48 100644 --- a/lnbits/settings.py +++ b/lnbits/settings.py @@ -243,12 +243,19 @@ class SuperUserSettings(LNbitsSettings): ) +class TransientSettings(InstalledExtensionsSettings): + # Transient Settings: + # - are initialized, updated and used at runtime + # - are not read from a file or from the `setings` table + # - are not persisted in the `settings` table when the setings are updated + + @classmethod + def readonly_fields(cls): + return [f for f in inspect.signature(cls).parameters if not f.startswith("_")] + + class ReadOnlySettings( - EnvSettings, - SaaSSettings, - PersistenceSettings, - SuperUserSettings, - InstalledExtensionsSettings, + EnvSettings, SaaSSettings, PersistenceSettings, SuperUserSettings ): lnbits_admin_ui: bool = Field(default=False) @@ -264,7 +271,7 @@ class ReadOnlySettings( return [f for f in inspect.signature(cls).parameters if not f.startswith("_")] -class Settings(EditableSettings, ReadOnlySettings): +class Settings(EditableSettings, ReadOnlySettings, TransientSettings): @classmethod def from_row(cls, row: Row) -> "Settings": data = dict(row) @@ -324,6 +331,7 @@ def send_admin_user_to_saas(): ############### INIT ################# readonly_variables = ReadOnlySettings.readonly_fields() +transient_variables = TransientSettings.readonly_fields() settings = Settings() From ca1dcd6768adce04c7a10083fb56ea8c44ab6c73 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 18:26:58 +0200 Subject: [PATCH 131/168] chore: comment typos --- lnbits/settings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lnbits/settings.py b/lnbits/settings.py index abf22c48..75f9d538 100644 --- a/lnbits/settings.py +++ b/lnbits/settings.py @@ -247,7 +247,8 @@ class TransientSettings(InstalledExtensionsSettings): # Transient Settings: # - are initialized, updated and used at runtime # - are not read from a file or from the `setings` table - # - are not persisted in the `settings` table when the setings are updated + # - are not persisted in the `settings` table when the settings are updated + # - are cleared on server restart @classmethod def readonly_fields(cls): From 6b678186a2361774774c174f5f87bed4a6a1a963 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Fri, 20 Jan 2023 18:44:19 +0200 Subject: [PATCH 132/168] chore: remove bad file --- .coverage.Vlads-MacBook-Pro.local.24340.835500 | Bin 53248 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .coverage.Vlads-MacBook-Pro.local.24340.835500 diff --git a/.coverage.Vlads-MacBook-Pro.local.24340.835500 b/.coverage.Vlads-MacBook-Pro.local.24340.835500 deleted file mode 100644 index fa1a132062c4ad9b9c6c05d73ca1438836bf27f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53248 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 E0F7XQN&o-= From b57e808198946e73ed6f2f3c65321332e5263679 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 23 Jan 2023 11:51:53 +0200 Subject: [PATCH 133/168] chore: add extra log --- lnbits/app.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lnbits/app.py b/lnbits/app.py index e7ae6b00..c48ea3e2 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -137,7 +137,8 @@ async def check_installed_extensions(app: FastAPI): if not installed: await restore_installed_extension(app, ext) logger.info(f"✔️ Successfully re-installed extension: {ext.id}") - except: + except Exception as e: + logger.warning(e) logger.warning(f"Failed to re-install extension: {ext.id}") From 39add25b3b43ecb82e85fd4341963a86d2e571a4 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 23 Jan 2023 11:52:15 +0200 Subject: [PATCH 134/168] refactor use `pydantic` --- lnbits/extension_manager.py | 210 ++++++++++++++++++++++++------------ 1 file changed, 139 insertions(+), 71 deletions(-) diff --git a/lnbits/extension_manager.py b/lnbits/extension_manager.py index f57c2786..0db843c7 100644 --- a/lnbits/extension_manager.py +++ b/lnbits/extension_manager.py @@ -7,7 +7,7 @@ import urllib.request import zipfile from http import HTTPStatus from pathlib import Path -from typing import Any, List, NamedTuple, Optional +from typing import Any, List, NamedTuple, Optional, Tuple import httpx from fastapi.exceptions import HTTPException @@ -112,31 +112,60 @@ class ExtensionRelease(BaseModel): details_html: Optional[str] = None @classmethod - def from_github_release(cls, source_repo: str, r: dict) -> "ExtensionRelease": + def from_github_release( + cls, source_repo: str, r: "GitHubRepoRelease" + ) -> "ExtensionRelease": return ExtensionRelease( - name=r["name"], - description=r["name"], - version=r["tag_name"], - archive=r["zipball_url"], + name=r.name, + description=r.name, + version=r.tag_name, + archive=r.zipball_url, source_repo=source_repo, - # description=r["body"], # bad for JSON - html_url=r["html_url"], + # description=r.body, # bad for JSON + html_url=r.html_url, ) @classmethod - async def all_releases(cls, org, repo) -> List["ExtensionRelease"]: + async def all_releases(cls, org: str, repo: str) -> List["ExtensionRelease"]: try: - releases_url = f"https://api.github.com/repos/{org}/{repo}/releases" - error_msg = "Cannot fetch extension releases" - releases = await gihub_api_get(releases_url, error_msg) + github_releases = await fetch_github_releases(org, repo) return [ ExtensionRelease.from_github_release(f"{org}/{repo}", r) - for r in releases + for r in github_releases ] - except: + except Exception as e: + logger.warning(e) return [] +class GitHubRepoRelease(BaseModel): + name: str + tag_name: str + zipball_url: str + html_url: str + + +class ExplicitRelease(BaseModel): + id: str + name: str + version: str + archive: str + hash: str + dependencies: List[str] = [] + icon: Optional[str] + short_description: Optional[str] + html_url: Optional[str] + details: Optional[str] + info_notification: Optional[str] + critical_notification: Optional[str] + + +class GitHubRelease(BaseModel): + id: str + organisation: str + repository: str + + class InstallableExtension(BaseModel): id: str name: str @@ -185,7 +214,10 @@ class InstallableExtension(BaseModel): def has_installed_version(self) -> bool: if not Path(self.ext_dir).is_dir(): return False - with open(os.path.join(self.ext_dir, "config.json"), "r") as json_file: + config_file = os.path.join(self.ext_dir, "config.json") + if not Path(config_file).is_file(): + return False + with open(config_file, "r") as json_file: config_json = json.load(json_file) return config_json.get("is_installed") == True @@ -282,21 +314,26 @@ class InstallableExtension(BaseModel): return ext @classmethod - async def from_repo( - cls, ext_id, org, repo_name + async def from_github_release( + cls, github_release: GitHubRelease ) -> Optional["InstallableExtension"]: try: - repo, latest_release, config = await fetch_github_repo_info(org, repo_name) + repo, latest_release, config = await fetch_github_repo_info( + github_release.organisation, github_release.repository + ) return InstallableExtension( - id=ext_id, - name=config.get("name"), - short_description=config.get("short_description"), + id=github_release.id, + name=config.name, + short_description=config.short_description, version="0", - stars=repo["stargazers_count"], - icon_url=icon_to_github_url(f"{org}/{repo_name}", config.get("tile")), + stars=repo.stargazers_count, + icon_url=icon_to_github_url( + f"{github_release.organisation}/{github_release.repository}", + config.tile, + ), latest_release=ExtensionRelease.from_github_release( - repo["html_url"], latest_release + repo.html_url, latest_release ), ) except Exception as e: @@ -304,15 +341,15 @@ class InstallableExtension(BaseModel): return None @classmethod - def from_manifest(cls, e: dict) -> "InstallableExtension": + def from_explicit_release(cls, e: ExplicitRelease) -> "InstallableExtension": return InstallableExtension( - id=e["id"], - name=e["name"], - archive=e["archive"], - hash=e["hash"], - short_description=e["shortDescription"], - icon=e["icon"], - dependencies=e["dependencies"] if "dependencies" in e else [], + id=e.id, + name=e.name, + archive=e.archive, + hash=e.hash, + short_description=e.short_description, + icon=e.icon, + dependencies=e.dependencies, ) @classmethod @@ -324,24 +361,21 @@ class InstallableExtension(BaseModel): for url in settings.lnbits_extensions_manifests: try: - error_msg = "Cannot fetch extensions manifest" - manifest = await gihub_api_get(url, error_msg) + manifest = await fetch_manifest(url) - for r in manifest.get("repos", []): - if r["id"] in extension_id_list: + for r in manifest.repos: + if r.id in extension_id_list: continue - ext = await InstallableExtension.from_repo( - r["id"], r["organisation"], r["repository"] - ) + ext = await InstallableExtension.from_github_release(r) if ext: extension_list += [ext] extension_id_list += [ext.id] - for e in manifest.get("extensions", []): - if e["id"] in extension_id_list: + for e in manifest.extensions: + if e.id in extension_id_list: continue - extension_list += [InstallableExtension.from_manifest(e)] - extension_id_list += [e["id"]] + extension_list += [InstallableExtension.from_explicit_release(e)] + extension_id_list += [e.id] except Exception as e: logger.warning(f"Manifest {url} failed with '{str(e)}'") @@ -353,31 +387,28 @@ class InstallableExtension(BaseModel): for url in settings.lnbits_extensions_manifests: try: - error_msg = "Cannot fetch extensions manifest" - manifest = await gihub_api_get(url, error_msg) - if "repos" in manifest: - for r in manifest["repos"]: - if r["id"] == ext_id: - repo_releases = await ExtensionRelease.all_releases( - r["organisation"], r["repository"] - ) - extension_releases += repo_releases + manifest = await fetch_manifest(url) + for r in manifest.repos: + if r.id == ext_id: + repo_releases = await ExtensionRelease.all_releases( + r.organisation, r.repository + ) + extension_releases += repo_releases - if "extensions" in manifest: - for e in manifest["extensions"]: - if e["id"] == ext_id: - extension_releases += [ - ExtensionRelease( - name=e["name"], - version=e["version"], - archive=e["archive"], - hash=e["hash"], - source_repo=url, - description=e["shortDescription"], - details_html=e.get("details"), - html_url=e.get("htmlUrl"), - ) - ] + for e in manifest.extensions: + if e.id == ext_id: + extension_releases += [ + ExtensionRelease( + name=e.name, + version=e.version, + archive=e.archive, + hash=e.hash, + source_repo=url, + description=e.short_description, + details_html=e.details, + html_url=e.html_url, + ) + ] except Exception as e: logger.warning(f"Manifest {url} failed with '{str(e)}'") @@ -400,6 +431,18 @@ class InstallableExtension(BaseModel): return selected_release[0] if len(selected_release) != 0 else None +class GitHubRepo(BaseModel): + stargazers_count: str + html_url: str + default_branch: str + + +class ExtensionConfig(BaseModel): + name: str + short_description: str + tile: str + + class InstalledExtensionMiddleware: # This middleware class intercepts calls made to the extensions API and: # - it blocks the calls if the extension has been disabled or uninstalled. @@ -451,6 +494,11 @@ class CreateExtension(BaseModel): source_repo: str +class Manifest(BaseModel): + extensions: List[ExplicitRelease] = [] + repos: List[GitHubRelease] = [] + + def get_valid_extensions() -> List[Extension]: return [ extension for extension in ExtensionManager().extensions if extension.is_valid @@ -481,22 +529,42 @@ def icon_to_github_url(source_repo: str, path: Optional[str]) -> str: return f"https://github.com/{source_repo}/raw/main/{tail}" -async def fetch_github_repo_info(org: str, repository: str): +async def fetch_github_repo_info( + org: str, repository: str +) -> Tuple[GitHubRepo, GitHubRepoRelease, ExtensionConfig]: repo_url = f"https://api.github.com/repos/{org}/{repository}" error_msg = "Cannot fetch extension repo" repo = await gihub_api_get(repo_url, error_msg) + github_repo = GitHubRepo.parse_obj(repo) lates_release_url = ( f"https://api.github.com/repos/{org}/{repository}/releases/latest" ) error_msg = "Cannot fetch extension releases" - latest_release = await gihub_api_get(lates_release_url, error_msg) + latest_release: Any = await gihub_api_get(lates_release_url, error_msg) - config_url = f"""https://raw.githubusercontent.com/{org}/{repository}/{repo["default_branch"]}/config.json""" + config_url = f"https://raw.githubusercontent.com/{org}/{repository}/{github_repo.default_branch}/config.json" error_msg = "Cannot fetch config for extension" config = await gihub_api_get(config_url, error_msg) - return repo, latest_release, config + return ( + github_repo, + GitHubRepoRelease.parse_obj(latest_release), + ExtensionConfig.parse_obj(config), + ) + + +async def fetch_manifest(url) -> Manifest: + error_msg = "Cannot fetch extensions manifest" + manifest = await gihub_api_get(url, error_msg) + return Manifest.parse_obj(manifest) + + +async def fetch_github_releases(org: str, repo: str) -> List[GitHubRepoRelease]: + releases_url = f"https://api.github.com/repos/{org}/{repo}/releases" + error_msg = "Cannot fetch extension releases" + releases = await gihub_api_get(releases_url, error_msg) + return [GitHubRepoRelease.parse_obj(r) for r in releases] async def gihub_api_get(url: str, error_msg: Optional[str]) -> Any: From 567c636b1d6fa76592f0bbc5ce59a31d34c7a7d1 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 23 Jan 2023 12:00:09 +0200 Subject: [PATCH 135/168] refactor: re-order classes --- lnbits/extension_manager.py | 44 ++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/lnbits/extension_manager.py b/lnbits/extension_manager.py index 0db843c7..9628f505 100644 --- a/lnbits/extension_manager.py +++ b/lnbits/extension_manager.py @@ -138,11 +138,9 @@ class ExtensionRelease(BaseModel): return [] -class GitHubRepoRelease(BaseModel): - name: str - tag_name: str - zipball_url: str - html_url: str +class Manifest(BaseModel): + extensions: List["ExplicitRelease"] = [] + repos: List["GitHubRelease"] = [] class ExplicitRelease(BaseModel): @@ -166,6 +164,25 @@ class GitHubRelease(BaseModel): repository: str +class GitHubRepoRelease(BaseModel): + name: str + tag_name: str + zipball_url: str + html_url: str + + +class GitHubRepo(BaseModel): + stargazers_count: str + html_url: str + default_branch: str + + +class ExtensionConfig(BaseModel): + name: str + short_description: str + tile: str + + class InstallableExtension(BaseModel): id: str name: str @@ -431,18 +448,6 @@ class InstallableExtension(BaseModel): return selected_release[0] if len(selected_release) != 0 else None -class GitHubRepo(BaseModel): - stargazers_count: str - html_url: str - default_branch: str - - -class ExtensionConfig(BaseModel): - name: str - short_description: str - tile: str - - class InstalledExtensionMiddleware: # This middleware class intercepts calls made to the extensions API and: # - it blocks the calls if the extension has been disabled or uninstalled. @@ -494,11 +499,6 @@ class CreateExtension(BaseModel): source_repo: str -class Manifest(BaseModel): - extensions: List[ExplicitRelease] = [] - repos: List[GitHubRelease] = [] - - def get_valid_extensions() -> List[Extension]: return [ extension for extension in ExtensionManager().extensions if extension.is_valid From 5ae1a229891578aa8d7400eebcb6e76aa7727471 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 23 Jan 2023 12:08:44 +0200 Subject: [PATCH 136/168] fix: order of declarations --- lnbits/extension_manager.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lnbits/extension_manager.py b/lnbits/extension_manager.py index 9628f505..dfe652e0 100644 --- a/lnbits/extension_manager.py +++ b/lnbits/extension_manager.py @@ -138,11 +138,6 @@ class ExtensionRelease(BaseModel): return [] -class Manifest(BaseModel): - extensions: List["ExplicitRelease"] = [] - repos: List["GitHubRelease"] = [] - - class ExplicitRelease(BaseModel): id: str name: str @@ -164,6 +159,11 @@ class GitHubRelease(BaseModel): repository: str +class Manifest(BaseModel): + extensions: List["ExplicitRelease"] = [] + repos: List["GitHubRelease"] = [] + + class GitHubRepoRelease(BaseModel): name: str tag_name: str From 8971fb5f00d8ddd537f201611aed77ec4445fa55 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 23 Jan 2023 14:58:32 +0200 Subject: [PATCH 137/168] feat: add default value for `lnbits_extensions_manifests` --- lnbits/settings.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lnbits/settings.py b/lnbits/settings.py index 75f9d538..af887fc7 100644 --- a/lnbits/settings.py +++ b/lnbits/settings.py @@ -43,7 +43,11 @@ class UsersSettings(LNbitsSettings): class ExtensionsSettings(LNbitsSettings): lnbits_admin_extensions: List[str] = Field(default=[]) lnbits_disabled_extensions: List[str] = Field(default=[]) - lnbits_extensions_manifests: List[str] = Field(default=[]) + lnbits_extensions_manifests: List[str] = Field( + default=[ + "https://raw.githubusercontent.com/lnbits/lnbits-extensions/main/extensions.json" + ] + ) # required due to GitHUb rate-limit lnbits_ext_github_token: str = Field(default="") From dd3fc7c2bb07be8c6de0762515593439634c9df1 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 25 Jan 2023 09:56:05 +0200 Subject: [PATCH 138/168] fix: merge errors --- lnbits/core/crud.py | 4 +++- lnbits/core/migrations.py | 4 +++- lnbits/core/models.py | 1 + lnbits/core/views/api.py | 6 ++++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index 07ffd77a..46f76596 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -732,7 +732,9 @@ async def update_migration_version(conn, db_name, version): ON CONFLICT (db) DO UPDATE SET version = ? """, (db_name, version, version), -======= + ) + + # tinyurl # ------- diff --git a/lnbits/core/migrations.py b/lnbits/core/migrations.py index 7d3c91f0..1cdaebaa 100644 --- a/lnbits/core/migrations.py +++ b/lnbits/core/migrations.py @@ -270,6 +270,7 @@ async def m008_create_admin_settings_table(db): """ ) + async def m009_create_tinyurl_table(db): await db.execute( f""" @@ -282,7 +283,8 @@ async def m009_create_tinyurl_table(db): ); """ ) - + + async def m010_create_installed_extensions_table(db): await db.execute( """ diff --git a/lnbits/core/models.py b/lnbits/core/models.py index c9930d28..c0643af7 100644 --- a/lnbits/core/models.py +++ b/lnbits/core/models.py @@ -217,6 +217,7 @@ class BalanceCheck(BaseModel): class CoreAppExtra: register_new_ext_routes: Callable + class TinyURL(BaseModel): id: str url: str diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 20ff122f..480cc935 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -56,10 +56,10 @@ from lnbits.utils.exchange_rates import ( from .. import core_app, core_app_extra, db from ..crud import ( add_installed_extension, - delete_installed_extension, - get_dbversions, create_tinyurl, + delete_installed_extension, delete_tinyurl, + get_dbversions, get_payments, get_standalone_payment, get_tinyurl, @@ -818,6 +818,8 @@ async def get_extension_releases(ext_id: str, user: User = Depends(check_admin)) except Exception as ex: raise HTTPException( status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex) + ) + ############################TINYURL################################## From b016804a5b2b08f8d113445b79dc0c8f90511d41 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 25 Jan 2023 10:05:30 +0200 Subject: [PATCH 139/168] fix: change star color --- lnbits/core/templates/core/install.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index b8874fca..65c5433d 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -95,7 +95,7 @@ max="5" v-model="maxStars" size="1.5em" - color="yellow" + color="primary" icon="star_border" icon-selected="star" readonly From f27e5af6398448a0e4f939dccec20e607409a389 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 25 Jan 2023 11:15:56 +0200 Subject: [PATCH 140/168] feat: add tabs to install `all`/`featured`/`installed` --- lnbits/core/templates/core/install.html | 53 +++++++++++++++++-------- lnbits/core/views/generic.py | 1 + lnbits/extension_manager.py | 7 +++- 3 files changed, 44 insertions(+), 17 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 65c5433d..c183bf04 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -1,13 +1,35 @@ {% extends "base.html" %} {% from "macros.jinja" import window_vars with context %} {% block page %}

-
- +
+ +
+
+ + + + + +
+
+
@@ -273,7 +295,7 @@ data: function () { return { searchTerm: '', - showOnlyInstalledExtensions: false, + tab: 'all', filteredExtensions: null, showUninstallDialog: false, showUpgradeDialog: false, @@ -284,14 +306,14 @@ }, watch: { searchTerm(term) { - this.filterExtensions(term, this.onlyInstalled) + this.filterExtensions(term, this.tab) }, - showOnlyInstalledExtensions(onlyInstalled) { - this.filterExtensions(this.searchTerm, onlyInstalled) - } }, methods: { - filterExtensions: function (term, onlyInstalled) { + handleTabChanged: function (tab) { + this.filterExtensions(this.searchTerm, tab) + }, + filterExtensions: function (term, tab) { // Filter the extensions list function extensionNameContains(searchTerm) { return function (extension) { @@ -305,9 +327,8 @@ } this.filteredExtensions = this.extensions - .filter(e => - this.showOnlyInstalledExtensions ? e.isInstalled : true - ) + .filter(e => (tab === 'installed' ? e.isInstalled : true)) + .filter(e => (tab === 'featured' ? e.isFeatured : true)) .filter(extensionNameContains(term)) }, installExtension: async function (release) { diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index f794688a..8600229e 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -135,6 +135,7 @@ async def extensions_install( "iconUrl": ext.icon_url, "shortDescription": ext.short_description, "stars": ext.stars, + "isFeatured": ext.featured, "dependencies": ext.dependencies, "isInstalled": ext.id in installed_exts_ids, "isAvailable": ext.id in all_extensions, diff --git a/lnbits/extension_manager.py b/lnbits/extension_manager.py index dfe652e0..cea31551 100644 --- a/lnbits/extension_manager.py +++ b/lnbits/extension_manager.py @@ -160,6 +160,7 @@ class GitHubRelease(BaseModel): class Manifest(BaseModel): + featured: List[str] = [] extensions: List["ExplicitRelease"] = [] repos: List["GitHubRelease"] = [] @@ -192,6 +193,7 @@ class InstallableExtension(BaseModel): dependencies: List[str] = [] is_admin_only: bool = False stars: int = 0 + featured = False latest_release: Optional[ExtensionRelease] installed_release: Optional[ExtensionRelease] @@ -385,13 +387,16 @@ class InstallableExtension(BaseModel): continue ext = await InstallableExtension.from_github_release(r) if ext: + ext.featured = ext.id in manifest.featured extension_list += [ext] extension_id_list += [ext.id] for e in manifest.extensions: if e.id in extension_id_list: continue - extension_list += [InstallableExtension.from_explicit_release(e)] + ext = InstallableExtension.from_explicit_release(e) + ext.featured = ext.id in manifest.featured + extension_list += [ext] extension_id_list += [e.id] except Exception as e: logger.warning(f"Manifest {url} failed with '{str(e)}'") From 9c105e8885f5c199d0ef89d83b666e113a81535d Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 25 Jan 2023 11:19:11 +0200 Subject: [PATCH 141/168] chore: code format --- lnbits/core/templates/core/install.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index c183bf04..db39a540 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -307,7 +307,7 @@ watch: { searchTerm(term) { this.filterExtensions(term, this.tab) - }, + } }, methods: { handleTabChanged: function (tab) { From 1373b881698436636f4cf631c20be3feb9a5611f Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 25 Jan 2023 11:48:57 +0200 Subject: [PATCH 142/168] fix: stars look&feel --- lnbits/core/templates/core/extensions.html | 2 +- lnbits/core/templates/core/install.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lnbits/core/templates/core/extensions.html b/lnbits/core/templates/core/extensions.html index 01e67deb..bad9521d 100644 --- a/lnbits/core/templates/core/extensions.html +++ b/lnbits/core/templates/core/extensions.html @@ -62,7 +62,7 @@ class="gt-sm" v-model="maxStars" disable - size="2em" + size="1.5em" :max="5" color="primary" > diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index db39a540..b096e4db 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -118,12 +118,12 @@ v-model="maxStars" size="1.5em" color="primary" - icon="star_border" icon-selected="star" readonly no-dimming > + Ratings coming soon
From a242a823fcc48bb73daf036d9dbf11c39b012426 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 25 Jan 2023 12:46:45 +0200 Subject: [PATCH 143/168] fix: do not propagate technical message to the user --- lnbits/core/views/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 480cc935..818be296 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -763,7 +763,7 @@ async def api_install_extension( logger.warning(ex) ext_info.clean_extension_files() raise HTTPException( - status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=str(ex) + status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Failed to install extension." ) From 46faa62b8b6334c6ebdc002bfb58d3083faf8f12 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 25 Jan 2023 14:32:41 +0200 Subject: [PATCH 144/168] fix: upgrade vs install --- lnbits/app.py | 2 +- lnbits/core/views/api.py | 5 +++-- lnbits/extension_manager.py | 8 +++----- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index c48ea3e2..3f8b1525 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -211,7 +211,7 @@ def register_ext_routes(app: FastAPI, ext: Extension) -> None: logger.trace(f"adding route for extension {ext_module}") - prefix = f"/upgrades/{ext.hash}" if ext.hash != "" else "" + prefix = f"/upgrades/{ext.upgrade_hash}" if ext.upgrade_hash != "" else "" app.include_router(router=ext_route, prefix=prefix) diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 818be296..e28cdd3c 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -756,14 +756,15 @@ async def api_install_extension( # mount routes for the new version core_app_extra.register_new_ext_routes(extension) - if ext_info.module_installed: + if extension.upgrade_hash: ext_info.nofiy_upgrade() except Exception as ex: logger.warning(ex) ext_info.clean_extension_files() raise HTTPException( - status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Failed to install extension." + status_code=HTTPStatus.INTERNAL_SERVER_ERROR, + detail="Failed to install extension.", ) diff --git a/lnbits/extension_manager.py b/lnbits/extension_manager.py index cea31551..f5b1dd32 100644 --- a/lnbits/extension_manager.py +++ b/lnbits/extension_manager.py @@ -30,13 +30,13 @@ class Extension(NamedTuple): hidden: bool = False migration_module: Optional[str] = None db_name: Optional[str] = None - hash: Optional[str] = "" + upgrade_hash: Optional[str] = "" @property def module_name(self): return ( f"lnbits.extensions.{self.code}" - if self.hash == "" + if self.upgrade_hash == "" else f"lnbits.upgrades.{self.code}-{self.hash}.{self.code}" ) @@ -47,7 +47,7 @@ class Extension(NamedTuple): is_valid=True, is_admin_only=False, # todo: is admin only name=ext_info.name, - hash=ext_info.hash if ext_info.module_installed else "", + upgrade_hash=ext_info.hash if ext_info.module_installed else "", ) @@ -301,8 +301,6 @@ class InstallableExtension(BaseModel): def nofiy_upgrade(self) -> None: """Update the list of upgraded extensions. The middleware will perform redirects based on this""" - if not self.hash: - return clean_upgraded_exts = list( filter( From 8ab4cb8c087fdb64d3002c80def1d282a788be57 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 25 Jan 2023 15:00:39 +0200 Subject: [PATCH 145/168] fix: restore installed extensions --- lnbits/app.py | 8 ++++---- lnbits/extension_manager.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index 3f8b1525..ee3b0736 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -143,13 +143,13 @@ async def check_installed_extensions(app: FastAPI): def check_installed_extension(ext: InstallableExtension) -> bool: + if ext.has_installed_version: + return True + zip_files = glob.glob( os.path.join(settings.lnbits_data_folder, "extensions", "*.zip") ) - if ext.has_installed_version: - return True - if ext.zip_path not in zip_files: ext.download_archive() ext.extract_archive() @@ -166,7 +166,7 @@ async def restore_installed_extension(app: FastAPI, ext: InstallableExtension): # mount routes for the new version core_app_extra.register_new_ext_routes(extension) - if ext.module_installed: + if extension.upgrade_hash: ext.nofiy_upgrade() diff --git a/lnbits/extension_manager.py b/lnbits/extension_manager.py index f5b1dd32..9c6cd14c 100644 --- a/lnbits/extension_manager.py +++ b/lnbits/extension_manager.py @@ -37,7 +37,7 @@ class Extension(NamedTuple): return ( f"lnbits.extensions.{self.code}" if self.upgrade_hash == "" - else f"lnbits.upgrades.{self.code}-{self.hash}.{self.code}" + else f"lnbits.upgrades.{self.code}-{self.upgrade_hash}.{self.code}" ) @classmethod From 00c02e3c85a59d0173fb89e8da72a3527fb93e50 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 25 Jan 2023 15:28:06 +0200 Subject: [PATCH 146/168] fix: tabs on mobile --- lnbits/core/templates/core/install.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index b096e4db..f856d543 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% from "macros.jinja" import window_vars with context %} {% block page %}
-
+
@@ -32,7 +32,7 @@
-
+
Date: Wed, 25 Jan 2023 15:37:28 +0200 Subject: [PATCH 147/168] fix: icon size on mobile --- lnbits/core/templates/core/install.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index f856d543..5297a1be 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -65,7 +65,7 @@ v-else :name="extension.icon" color="grey-5" - style="font-size: 4rem" + size="lg" >
From 4af80858bce98db765451bb24f1a34f7845f5d6b Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 25 Jan 2023 15:49:50 +0200 Subject: [PATCH 148/168] feat: add page titles --- lnbits/core/templates/core/extensions.html | 6 ++-- lnbits/core/templates/core/install.html | 33 +++++++++++++--------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/lnbits/core/templates/core/extensions.html b/lnbits/core/templates/core/extensions.html index bad9521d..c7dfd035 100644 --- a/lnbits/core/templates/core/extensions.html +++ b/lnbits/core/templates/core/extensions.html @@ -3,8 +3,10 @@ {% endblock %} {% block page %}
-
-
+
+

Extesions

+
+
+

Install Extesions

+
+ +
+ + + +
+
+ +
+
@@ -31,19 +48,7 @@
- -
- - - -
-
-
+
From 953bca0cf5e32a0c9115e5201815aef40eb6711b Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 15:09:15 +0000 Subject: [PATCH 149/168] Spelling/tweaked card --- lnbits/core/templates/core/extensions.html | 2 +- lnbits/core/templates/core/install.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lnbits/core/templates/core/extensions.html b/lnbits/core/templates/core/extensions.html index c7dfd035..1db58a00 100644 --- a/lnbits/core/templates/core/extensions.html +++ b/lnbits/core/templates/core/extensions.html @@ -4,7 +4,7 @@ {% endblock %} {% block page %}
-

Extesions

+

Extensions

diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index bf35f825..bf66df1b 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -2,7 +2,7 @@ %} {% block page %}
-

Install Extesions

+

Add Extensions (admin only)

@@ -132,7 +132,7 @@
- +
From 8bae8b06ea502e29f3dc6f88f8b6d4bf1cfa2e67 Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 15:29:06 +0000 Subject: [PATCH 150/168] Disabled rating --- lnbits/core/templates/core/install.html | 1 + 1 file changed, 1 insertion(+) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index bf66df1b..e03276b7 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -120,6 +120,7 @@
Date: Wed, 25 Jan 2023 15:34:10 +0000 Subject: [PATCH 151/168] tab tweak --- lnbits/core/templates/core/install.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index e03276b7..a9fd933a 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -2,7 +2,9 @@ %} {% block page %}
-

Add Extensions (admin only)

+

+ Add Extensions (admin only) +

@@ -26,7 +28,7 @@ v-model="tab" @input="handleTabChanged" active-color="primary" - align="justify" + align="left" > Date: Wed, 25 Jan 2023 16:55:08 +0000 Subject: [PATCH 152/168] Added generic icon for iconless plugiins --- lnbits/core/static/extension.png | Bin 0 -> 8913 bytes lnbits/core/static/js/extensions.js | 8 ++- lnbits/core/templates/core/extensions.html | 39 +++++++++-- lnbits/core/templates/core/install.html | 75 +++++++++++++-------- lnbits/static/js/components.js | 2 +- 5 files changed, 89 insertions(+), 35 deletions(-) create mode 100644 lnbits/core/static/extension.png diff --git a/lnbits/core/static/extension.png b/lnbits/core/static/extension.png new file mode 100644 index 0000000000000000000000000000000000000000..78378fd7679c93434adca5d0cbb64bae0e3c72a2 GIT binary patch literal 8913 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 literal 0 HcmV?d00001 diff --git a/lnbits/core/static/js/extensions.js b/lnbits/core/static/js/extensions.js index c51af4b8..ad9745e7 100644 --- a/lnbits/core/static/js/extensions.js +++ b/lnbits/core/static/js/extensions.js @@ -4,7 +4,8 @@ new Vue({ return { searchTerm: '', filteredExtensions: null, - maxStars: 5 + maxStars: 5, + user: null } }, mounted() { @@ -33,5 +34,10 @@ new Vue({ } } }, + created() { + if (window.user) { + this.user = LNbits.map.user(window.user) + } + }, mixins: [windowMixin] }) diff --git a/lnbits/core/templates/core/extensions.html b/lnbits/core/templates/core/extensions.html index 1db58a00..bf41e276 100644 --- a/lnbits/core/templates/core/extensions.html +++ b/lnbits/core/templates/core/extensions.html @@ -3,9 +3,19 @@ {% endblock %} {% block page %}
-
-

Extensions

+
+

+ Extensions + Add Extensions +

+
- +
+
+ + +
{% raw %} -
+
+ {{ extension.name }} +
+
{{ extension.name }}
-

+

Add Extensions (admin only)

@@ -58,22 +58,29 @@ :key="extension.id + extension.hash" > - +
- +
+ + +
New Version {% raw %} -
+
+ {{ extension.name }} +
+
{{ extension.name }}
-
-
- - - Ratings coming soon -
+ + +
+ + Ratings coming soon
@@ -309,7 +326,7 @@ showUpgradeDialog: false, selectedExtension: null, selectedExtensionRepos: null, - maxStars: 0 + maxStars: 5 } }, watch: { diff --git a/lnbits/static/js/components.js b/lnbits/static/js/components.js index b67380ad..0911ea4a 100644 --- a/lnbits/static/js/components.js +++ b/lnbits/static/js/components.js @@ -145,7 +145,7 @@ Vue.component('lnbits-extension-list', { - Add extensions + Add Extensions From 2eef5028f984f1cb82e8fef7c005bc6ef10bec5a Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 16:57:08 +0000 Subject: [PATCH 153/168] Replaced tiles, for those who have them --- lnbits/core/templates/core/install.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 5aba9fb3..1f1eb960 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -62,8 +62,8 @@
From efa24584f313a417201e9d445988b4919231d7f8 Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 17:33:24 +0000 Subject: [PATCH 154/168] Broken, trying to take js out --- lnbits/core/static/js/install.js | 161 +++++++++++++++++++++++ lnbits/core/templates/core/install.html | 166 +----------------------- 2 files changed, 164 insertions(+), 163 deletions(-) create mode 100644 lnbits/core/static/js/install.js diff --git a/lnbits/core/static/js/install.js b/lnbits/core/static/js/install.js new file mode 100644 index 00000000..2d24109d --- /dev/null +++ b/lnbits/core/static/js/install.js @@ -0,0 +1,161 @@ +new Vue({ + el: '#vue', + data: function () { + return { + searchTerm: '', + tab: 'all', + filteredExtensions: null, + showUninstallDialog: false, + showUpgradeDialog: false, + selectedExtension: null, + selectedExtensionRepos: null, + maxStars: 5 + } + }, + watch: { + searchTerm(term) { + this.filterExtensions(term, this.tab) + } + }, + methods: { + handleTabChanged: function (tab) { + this.filterExtensions(this.searchTerm, tab) + }, + filterExtensions(term, tab) { + // Filter the extensions list + function extensionNameContains(searchTerm) { + return function (extension) { + return ( + extension.name.toLowerCase().includes(searchTerm.toLowerCase()) || + extension.shortDescription + ?.toLowerCase() + .includes(searchTerm.toLowerCase()) + ) + } + } + + this.filteredExtensions = this.extensions + .filter(e => (tab === 'installed' ? e.isInstalled : true)) + .filter(e => (tab === 'featured' ? e.isFeatured : true)) + .filter(extensionNameContains(term)) + }, + async installExtension(release) { + const extension = this.selectedExtension + try { + extension.inProgress = true + this.showUpgradeDialog = false + await LNbits.api.request( + 'POST', + `/api/v1/extension?usr=${this.g.user.id}`, + this.g.user.wallets[0].adminkey, + { + ext_id: extension.id, + archive: release.archive, + source_repo: release.source_repo + } + ) + window.location.href = [ + "{{ url_for('install.extensions') }}", + '?usr=', + this.g.user.id + ].join('') + } catch (error) { + LNbits.utils.notifyApiError(error) + extension.inProgress = false + } + }, + async uninstallExtension() { + const extension = this.selectedExtension + this.showUpgradeDialog = false + this.showUninstallDialog = false + try { + extension.inProgress = true + await LNbits.api.request( + 'DELETE', + `/api/v1/extension/${extension.id}?usr=${this.g.user.id}`, + this.g.user.wallets[0].adminkey + ) + window.location.href = [ + "{{ url_for('install.extensions') }}", + '?usr=', + this.g.user.id + ].join('') + } catch (error) { + LNbits.utils.notifyApiError(error) + extension.inProgress = false + } + }, + toggleExtension: function (extension) { + const action = extension.isActive ? 'activate' : 'deactivate' + window.location.href = [ + "{{ url_for('install.extensions') }}", + '?usr=', + this.g.user.id, + `&${action}=`, + extension.id + ].join('') + }, + + showUninstall() { + this.showUpgradeDialog = false + this.showUninstallDialog = true + }, + + async showUpgrade(extension) { + this.selectedExtension = extension + this.showUpgradeDialog = true + this.selectedExtensionRepos = null + try { + const {data} = await LNbits.api.request( + 'GET', + `/api/v1/extension/${extension.id}/releases?usr=${this.g.user.id}`, + this.g.user.wallets[0].adminkey + ) + + this.selectedExtensionRepos = data.reduce((repos, release) => { + repos[release.source_repo] = repos[release.source_repo] || { + releases: [], + isInstalled: false + } + release.isInstalled = this.isInstalledVersion( + this.selectedExtension, + release + ) + if (release.isInstalled) { + repos[release.source_repo].isInstalled = true + } + repos[release.source_repo].releases.push(release) + return repos + }, {}) + } catch (error) { + LNbits.utils.notifyApiError(error) + extension.inProgress = false + } + }, + hasNewVersion: function (extension) { + if (extension.installedRelease && extension.latestRelease) { + return ( + extension.installedRelease.version !== extension.latestRelease.version + ) + } + }, + isInstalledVersion: function (extension, release) { + if (extension.installedRelease) { + return ( + extension.installedRelease.source_repo === release.source_repo && + extension.installedRelease.version === release.version + ) + } + } + }, + created() { + console.log(window.extensions) + console.log(window.user) + this.extensions = JSON.parse(window.extensions).map(e => ({ + ...e, + inProgress: false + })) + this.filteredExtensions = this.extensions.concat([]) + }, + mixins: [windowMixin] +}) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 1f1eb960..69487495 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -1,5 +1,7 @@ {% extends "base.html" %} {% from "macros.jinja" import window_vars with context -%} {% block page %} +%} {{ window_vars(user, extensions) }} {% block scripts %} + +{% endblock %} {% block page %}

@@ -313,167 +315,5 @@

-{% endblock %} {% block scripts %} {{ window_vars(user) }} - {% endblock %} From fd71c8218348f97ea03f6b797a50b281bebe733b Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 20:28:05 +0000 Subject: [PATCH 155/168] gave up on seperate js install file --- lnbits/core/static/js/install.js | 161 ----------------- lnbits/core/templates/admin/_tab_server.html | 4 +- lnbits/core/templates/core/install.html | 177 ++++++++++++++++++- 3 files changed, 174 insertions(+), 168 deletions(-) delete mode 100644 lnbits/core/static/js/install.js diff --git a/lnbits/core/static/js/install.js b/lnbits/core/static/js/install.js deleted file mode 100644 index 2d24109d..00000000 --- a/lnbits/core/static/js/install.js +++ /dev/null @@ -1,161 +0,0 @@ -new Vue({ - el: '#vue', - data: function () { - return { - searchTerm: '', - tab: 'all', - filteredExtensions: null, - showUninstallDialog: false, - showUpgradeDialog: false, - selectedExtension: null, - selectedExtensionRepos: null, - maxStars: 5 - } - }, - watch: { - searchTerm(term) { - this.filterExtensions(term, this.tab) - } - }, - methods: { - handleTabChanged: function (tab) { - this.filterExtensions(this.searchTerm, tab) - }, - filterExtensions(term, tab) { - // Filter the extensions list - function extensionNameContains(searchTerm) { - return function (extension) { - return ( - extension.name.toLowerCase().includes(searchTerm.toLowerCase()) || - extension.shortDescription - ?.toLowerCase() - .includes(searchTerm.toLowerCase()) - ) - } - } - - this.filteredExtensions = this.extensions - .filter(e => (tab === 'installed' ? e.isInstalled : true)) - .filter(e => (tab === 'featured' ? e.isFeatured : true)) - .filter(extensionNameContains(term)) - }, - async installExtension(release) { - const extension = this.selectedExtension - try { - extension.inProgress = true - this.showUpgradeDialog = false - await LNbits.api.request( - 'POST', - `/api/v1/extension?usr=${this.g.user.id}`, - this.g.user.wallets[0].adminkey, - { - ext_id: extension.id, - archive: release.archive, - source_repo: release.source_repo - } - ) - window.location.href = [ - "{{ url_for('install.extensions') }}", - '?usr=', - this.g.user.id - ].join('') - } catch (error) { - LNbits.utils.notifyApiError(error) - extension.inProgress = false - } - }, - async uninstallExtension() { - const extension = this.selectedExtension - this.showUpgradeDialog = false - this.showUninstallDialog = false - try { - extension.inProgress = true - await LNbits.api.request( - 'DELETE', - `/api/v1/extension/${extension.id}?usr=${this.g.user.id}`, - this.g.user.wallets[0].adminkey - ) - window.location.href = [ - "{{ url_for('install.extensions') }}", - '?usr=', - this.g.user.id - ].join('') - } catch (error) { - LNbits.utils.notifyApiError(error) - extension.inProgress = false - } - }, - toggleExtension: function (extension) { - const action = extension.isActive ? 'activate' : 'deactivate' - window.location.href = [ - "{{ url_for('install.extensions') }}", - '?usr=', - this.g.user.id, - `&${action}=`, - extension.id - ].join('') - }, - - showUninstall() { - this.showUpgradeDialog = false - this.showUninstallDialog = true - }, - - async showUpgrade(extension) { - this.selectedExtension = extension - this.showUpgradeDialog = true - this.selectedExtensionRepos = null - try { - const {data} = await LNbits.api.request( - 'GET', - `/api/v1/extension/${extension.id}/releases?usr=${this.g.user.id}`, - this.g.user.wallets[0].adminkey - ) - - this.selectedExtensionRepos = data.reduce((repos, release) => { - repos[release.source_repo] = repos[release.source_repo] || { - releases: [], - isInstalled: false - } - release.isInstalled = this.isInstalledVersion( - this.selectedExtension, - release - ) - if (release.isInstalled) { - repos[release.source_repo].isInstalled = true - } - repos[release.source_repo].releases.push(release) - return repos - }, {}) - } catch (error) { - LNbits.utils.notifyApiError(error) - extension.inProgress = false - } - }, - hasNewVersion: function (extension) { - if (extension.installedRelease && extension.latestRelease) { - return ( - extension.installedRelease.version !== extension.latestRelease.version - ) - } - }, - isInstalledVersion: function (extension, release) { - if (extension.installedRelease) { - return ( - extension.installedRelease.source_repo === release.source_repo && - extension.installedRelease.version === release.version - ) - } - } - }, - created() { - console.log(window.extensions) - console.log(window.user) - this.extensions = JSON.parse(window.extensions).map(e => ({ - ...e, - inProgress: false - })) - this.filteredExtensions = this.extensions.concat([]) - }, - mixins: [windowMixin] -}) diff --git a/lnbits/core/templates/admin/_tab_server.html b/lnbits/core/templates/admin/_tab_server.html index 715a90b9..09abb8a1 100644 --- a/lnbits/core/templates/admin/_tab_server.html +++ b/lnbits/core/templates/admin/_tab_server.html @@ -97,13 +97,13 @@
-

Extensions Manifests

+

Extension Sources

diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 69487495..03c0aaec 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -1,11 +1,9 @@ {% extends "base.html" %} {% from "macros.jinja" import window_vars with context -%} {{ window_vars(user, extensions) }} {% block scripts %} - -{% endblock %} {% block page %} +%} {{ window_vars(user, extensions) }}{% block page %}

- Add Extensions (admin only) + Add Extensions(admin only)

@@ -65,7 +63,7 @@
@@ -317,3 +315,172 @@
{% endblock %} +{% block scripts %} + +{% endblock %} \ No newline at end of file From cc3dbaa1a75ea94c4dc6503d9c196d2f7aafcaf8 Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 20:29:42 +0000 Subject: [PATCH 156/168] working again --- lnbits/core/templates/core/install.html | 319 ++++++++++++------------ 1 file changed, 156 insertions(+), 163 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 03c0aaec..ac3a0392 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -313,174 +313,167 @@
- -{% endblock %} -{% block scripts %} - -{% endblock %} \ No newline at end of file +{% endblock %} \ No newline at end of file From ad70e9c1162446587f94475f3dcc0684049e056b Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 20:51:57 +0000 Subject: [PATCH 157/168] Remove choice all icons will be tiles --- lnbits/core/views/generic.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index 8600229e..b4ecaf4a 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -103,7 +103,6 @@ async def extensions_install( e.name = installed_ext.name e.short_description = installed_ext.short_description e.icon = installed_ext.icon - e.icon_url = installed_ext.icon_url except Exception as ex: logger.warning(ex) @@ -132,7 +131,6 @@ async def extensions_install( "id": ext.id, "name": ext.name, "icon": ext.icon, - "iconUrl": ext.icon_url, "shortDescription": ext.short_description, "stars": ext.stars, "isFeatured": ext.featured, From 925d4ccbe75df0e9b188fc27c77957306dcffce6 Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 20:58:28 +0000 Subject: [PATCH 158/168] Removed streamer copilot, as we need a demo --- lnbits/core/templates/core/install.html | 6 +- lnbits/extensions/copilot/README.md | 3 - lnbits/extensions/copilot/__init__.py | 34 - lnbits/extensions/copilot/config.json | 8 - lnbits/extensions/copilot/crud.py | 97 --- lnbits/extensions/copilot/lnurl.py | 82 --- lnbits/extensions/copilot/migrations.py | 79 --- lnbits/extensions/copilot/models.py | 66 -- .../copilot/static/bitcoin-streaming.png | Bin 23465 -> 0 bytes lnbits/extensions/copilot/static/bitcoin.gif | Bin 314831 -> 0 bytes lnbits/extensions/copilot/static/confetti.gif | Bin 340607 -> 0 bytes lnbits/extensions/copilot/static/face.gif | Bin 549051 -> 0 bytes lnbits/extensions/copilot/static/lnurl.png | Bin 36134 -> 0 bytes lnbits/extensions/copilot/static/martijn.gif | Bin 515764 -> 0 bytes lnbits/extensions/copilot/static/rick.gif | Bin 2374930 -> 0 bytes lnbits/extensions/copilot/static/rocket.gif | Bin 590395 -> 0 bytes lnbits/extensions/copilot/tasks.py | 84 --- .../copilot/templates/copilot/_api_docs.html | 178 ----- .../copilot/templates/copilot/compose.html | 305 -------- .../copilot/templates/copilot/index.html | 660 ------------------ .../copilot/templates/copilot/panel.html | 156 ----- lnbits/extensions/copilot/views.py | 33 - lnbits/extensions/copilot/views_api.py | 94 --- 23 files changed, 4 insertions(+), 1881 deletions(-) delete mode 100644 lnbits/extensions/copilot/README.md delete mode 100644 lnbits/extensions/copilot/__init__.py delete mode 100644 lnbits/extensions/copilot/config.json delete mode 100644 lnbits/extensions/copilot/crud.py delete mode 100644 lnbits/extensions/copilot/lnurl.py delete mode 100644 lnbits/extensions/copilot/migrations.py delete mode 100644 lnbits/extensions/copilot/models.py delete mode 100644 lnbits/extensions/copilot/static/bitcoin-streaming.png delete mode 100644 lnbits/extensions/copilot/static/bitcoin.gif delete mode 100644 lnbits/extensions/copilot/static/confetti.gif delete mode 100644 lnbits/extensions/copilot/static/face.gif delete mode 100644 lnbits/extensions/copilot/static/lnurl.png delete mode 100644 lnbits/extensions/copilot/static/martijn.gif delete mode 100644 lnbits/extensions/copilot/static/rick.gif delete mode 100644 lnbits/extensions/copilot/static/rocket.gif delete mode 100644 lnbits/extensions/copilot/tasks.py delete mode 100644 lnbits/extensions/copilot/templates/copilot/_api_docs.html delete mode 100644 lnbits/extensions/copilot/templates/copilot/compose.html delete mode 100644 lnbits/extensions/copilot/templates/copilot/index.html delete mode 100644 lnbits/extensions/copilot/templates/copilot/panel.html delete mode 100644 lnbits/extensions/copilot/views.py delete mode 100644 lnbits/extensions/copilot/views_api.py diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index ac3a0392..6a109518 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -62,8 +62,8 @@
@@ -114,7 +114,9 @@ style="font-size: 9px; height: 34px" > {{ extension.shortDescription }} +
+ {{ extension }} {% endraw %}
diff --git a/lnbits/extensions/copilot/README.md b/lnbits/extensions/copilot/README.md deleted file mode 100644 index 323aeddc..00000000 --- a/lnbits/extensions/copilot/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# StreamerCopilot - -Tool to help streamers accept sats for tips diff --git a/lnbits/extensions/copilot/__init__.py b/lnbits/extensions/copilot/__init__.py deleted file mode 100644 index 806801ce..00000000 --- a/lnbits/extensions/copilot/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -import asyncio - -from fastapi import APIRouter -from fastapi.staticfiles import StaticFiles - -from lnbits.db import Database -from lnbits.helpers import template_renderer -from lnbits.tasks import catch_everything_and_restart - -db = Database("ext_copilot") - -copilot_static_files = [ - { - "path": "/copilot/static", - "app": StaticFiles(packages=[("lnbits", "extensions/copilot/static")]), - "name": "copilot_static", - } -] -copilot_ext: APIRouter = APIRouter(prefix="/copilot", tags=["copilot"]) - - -def copilot_renderer(): - return template_renderer(["lnbits/extensions/copilot/templates"]) - - -from .lnurl import * # noqa -from .tasks import wait_for_paid_invoices -from .views import * # noqa -from .views_api import * # noqa - - -def copilot_start(): - loop = asyncio.get_event_loop() - loop.create_task(catch_everything_and_restart(wait_for_paid_invoices)) diff --git a/lnbits/extensions/copilot/config.json b/lnbits/extensions/copilot/config.json deleted file mode 100644 index fc754999..00000000 --- a/lnbits/extensions/copilot/config.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "Streamer Copilot", - "short_description": "Video tips/animations/webhooks", - "tile": "/copilot/static/bitcoin-streaming.png", - "contributors": [ - "arcbtc" - ] -} diff --git a/lnbits/extensions/copilot/crud.py b/lnbits/extensions/copilot/crud.py deleted file mode 100644 index 5ecb5cd4..00000000 --- a/lnbits/extensions/copilot/crud.py +++ /dev/null @@ -1,97 +0,0 @@ -from typing import List, Optional, Union - -from lnbits.helpers import urlsafe_short_hash - -from . import db -from .models import Copilots, CreateCopilotData - -###############COPILOTS########################## - - -async def create_copilot( - data: CreateCopilotData, inkey: Optional[str] = "" -) -> Optional[Copilots]: - copilot_id = urlsafe_short_hash() - await db.execute( - """ - INSERT INTO copilot.newer_copilots ( - id, - "user", - lnurl_toggle, - wallet, - title, - animation1, - animation2, - animation3, - animation1threshold, - animation2threshold, - animation3threshold, - animation1webhook, - animation2webhook, - animation3webhook, - lnurl_title, - show_message, - show_ack, - show_price, - fullscreen_cam, - iframe_url, - amount_made - ) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - """, - ( - copilot_id, - data.user, - int(data.lnurl_toggle), - data.wallet, - data.title, - data.animation1, - data.animation2, - data.animation3, - data.animation1threshold, - data.animation2threshold, - data.animation3threshold, - data.animation1webhook, - data.animation2webhook, - data.animation3webhook, - data.lnurl_title, - int(data.show_message), - int(data.show_ack), - data.show_price, - 0, - None, - 0, - ), - ) - return await get_copilot(copilot_id) - - -async def update_copilot( - data: CreateCopilotData, copilot_id: str -) -> Optional[Copilots]: - q = ", ".join([f"{field[0]} = ?" for field in data]) - items = [f"{field[1]}" for field in data] - items.append(copilot_id) - await db.execute(f"UPDATE copilot.newer_copilots SET {q} WHERE id = ?", (items,)) - row = await db.fetchone( - "SELECT * FROM copilot.newer_copilots WHERE id = ?", (copilot_id,) - ) - return Copilots(**row) if row else None - - -async def get_copilot(copilot_id: str) -> Optional[Copilots]: - row = await db.fetchone( - "SELECT * FROM copilot.newer_copilots WHERE id = ?", (copilot_id,) - ) - return Copilots(**row) if row else None - - -async def get_copilots(user: str) -> List[Copilots]: - rows = await db.fetchall( - 'SELECT * FROM copilot.newer_copilots WHERE "user" = ?', (user,) - ) - return [Copilots(**row) for row in rows] - - -async def delete_copilot(copilot_id: str) -> None: - await db.execute("DELETE FROM copilot.newer_copilots WHERE id = ?", (copilot_id,)) diff --git a/lnbits/extensions/copilot/lnurl.py b/lnbits/extensions/copilot/lnurl.py deleted file mode 100644 index b0bc83bc..00000000 --- a/lnbits/extensions/copilot/lnurl.py +++ /dev/null @@ -1,82 +0,0 @@ -import hashlib -import json -from http import HTTPStatus - -from fastapi import Request -from fastapi.param_functions import Query -from lnurl.types import LnurlPayMetadata -from starlette.exceptions import HTTPException -from starlette.responses import HTMLResponse - -from lnbits.core.services import create_invoice - -from . import copilot_ext -from .crud import get_copilot - - -@copilot_ext.get( - "/lnurl/{cp_id}", response_class=HTMLResponse, name="copilot.lnurl_response" -) -async def lnurl_response(req: Request, cp_id: str = Query(None)): - cp = await get_copilot(cp_id) - if not cp: - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, detail="Copilot not found" - ) - - payResponse = { - "tag": "payRequest", - "callback": req.url_for("copilot.lnurl_callback", cp_id=cp_id), - "metadata": LnurlPayMetadata(json.dumps([["text/plain", str(cp.lnurl_title)]])), - "maxSendable": 50000000, - "minSendable": 10000, - } - - if cp.show_message: - payResponse["commentAllowed"] = 300 - return json.dumps(payResponse) - - -@copilot_ext.get( - "/lnurl/cb/{cp_id}", response_class=HTMLResponse, name="copilot.lnurl_callback" -) -async def lnurl_callback( - cp_id: str = Query(None), amount: str = Query(None), comment: str = Query(None) -): - cp = await get_copilot(cp_id) - if not cp: - raise HTTPException( - status_code=HTTPStatus.NOT_FOUND, detail="Copilot not found" - ) - amount_received = int(amount) - - if amount_received < 10000: - raise HTTPException( - status_code=HTTPStatus.FORBIDDEN, - detail="Amount {round(amount_received / 1000)} is smaller than minimum 10 sats.", - ) - elif amount_received / 1000 > 10000000: - raise HTTPException( - status_code=HTTPStatus.FORBIDDEN, - detail="Amount {round(amount_received / 1000)} is greater than maximum 50000.", - ) - comment = "" - if comment: - if len(comment or "") > 300: - raise HTTPException( - status_code=HTTPStatus.FORBIDDEN, - detail="Got a comment with {len(comment)} characters, but can only accept 300", - ) - if len(comment) < 1: - comment = "none" - _, payment_request = await create_invoice( - wallet_id=cp.wallet, - amount=int(amount_received / 1000), - memo=cp.lnurl_title, - unhashed_description=( - LnurlPayMetadata(json.dumps([["text/plain", str(cp.lnurl_title)]])) - ).encode(), - extra={"tag": "copilot", "copilotid": cp.id, "comment": comment}, - ) - payResponse = {"pr": payment_request, "routes": []} - return json.dumps(payResponse) diff --git a/lnbits/extensions/copilot/migrations.py b/lnbits/extensions/copilot/migrations.py deleted file mode 100644 index b1c16dcc..00000000 --- a/lnbits/extensions/copilot/migrations.py +++ /dev/null @@ -1,79 +0,0 @@ -async def m001_initial(db): - """ - Initial copilot table. - """ - - await db.execute( - f""" - CREATE TABLE copilot.copilots ( - id TEXT NOT NULL PRIMARY KEY, - "user" TEXT, - title TEXT, - lnurl_toggle INTEGER, - wallet TEXT, - animation1 TEXT, - animation2 TEXT, - animation3 TEXT, - animation1threshold INTEGER, - animation2threshold INTEGER, - animation3threshold INTEGER, - animation1webhook TEXT, - animation2webhook TEXT, - animation3webhook TEXT, - lnurl_title TEXT, - show_message INTEGER, - show_ack INTEGER, - show_price INTEGER, - amount_made INTEGER, - fullscreen_cam INTEGER, - iframe_url TEXT, - timestamp TIMESTAMP NOT NULL DEFAULT {db.timestamp_now} - ); - """ - ) - - -async def m002_fix_data_types(db): - """ - Fix data types. - """ - - if db.type != "SQLITE": - await db.execute( - "ALTER TABLE copilot.copilots ALTER COLUMN show_price TYPE TEXT;" - ) - - -async def m003_fix_data_types(db): - await db.execute( - f""" - CREATE TABLE copilot.newer_copilots ( - id TEXT NOT NULL PRIMARY KEY, - "user" TEXT, - title TEXT, - lnurl_toggle INTEGER, - wallet TEXT, - animation1 TEXT, - animation2 TEXT, - animation3 TEXT, - animation1threshold INTEGER, - animation2threshold INTEGER, - animation3threshold INTEGER, - animation1webhook TEXT, - animation2webhook TEXT, - animation3webhook TEXT, - lnurl_title TEXT, - show_message INTEGER, - show_ack INTEGER, - show_price TEXT, - amount_made INTEGER, - fullscreen_cam INTEGER, - iframe_url TEXT, - timestamp TIMESTAMP NOT NULL DEFAULT {db.timestamp_now} - ); - """ - ) - - await db.execute( - "INSERT INTO copilot.newer_copilots SELECT * FROM copilot.copilots" - ) diff --git a/lnbits/extensions/copilot/models.py b/lnbits/extensions/copilot/models.py deleted file mode 100644 index 7ca2fc96..00000000 --- a/lnbits/extensions/copilot/models.py +++ /dev/null @@ -1,66 +0,0 @@ -import json -from sqlite3 import Row -from typing import Dict, Optional -from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse - -from fastapi.param_functions import Query -from lnurl.types import LnurlPayMetadata -from pydantic import BaseModel -from starlette.requests import Request - -from lnbits.lnurl import encode as lnurl_encode - - -class CreateCopilotData(BaseModel): - user: str = Query(None) - title: str = Query(None) - lnurl_toggle: int = Query(0) - wallet: str = Query(None) - animation1: str = Query(None) - animation2: str = Query(None) - animation3: str = Query(None) - animation1threshold: int = Query(None) - animation2threshold: int = Query(None) - animation3threshold: int = Query(None) - animation1webhook: str = Query(None) - animation2webhook: str = Query(None) - animation3webhook: str = Query(None) - lnurl_title: str = Query(None) - show_message: int = Query(0) - show_ack: int = Query(0) - show_price: str = Query(None) - amount_made: int = Query(0) - timestamp: int = Query(0) - fullscreen_cam: int = Query(0) - iframe_url: str = Query(None) - success_url: str = Query(None) - - -class Copilots(BaseModel): - id: str - user: str = Query(None) - title: str = Query(None) - lnurl_toggle: int = Query(0) - wallet: str = Query(None) - animation1: str = Query(None) - animation2: str = Query(None) - animation3: str = Query(None) - animation1threshold: int = Query(None) - animation2threshold: int = Query(None) - animation3threshold: int = Query(None) - animation1webhook: str = Query(None) - animation2webhook: str = Query(None) - animation3webhook: str = Query(None) - lnurl_title: str = Query(None) - show_message: int = Query(0) - show_ack: int = Query(0) - show_price: str = Query(None) - amount_made: int = Query(0) - timestamp: int = Query(0) - fullscreen_cam: int = Query(0) - iframe_url: str = Query(None) - success_url: str = Query(None) - - def lnurl(self, req: Request) -> str: - url = req.url_for("copilot.lnurl_response", cp_id=self.id) - return lnurl_encode(url) diff --git a/lnbits/extensions/copilot/static/bitcoin-streaming.png b/lnbits/extensions/copilot/static/bitcoin-streaming.png deleted file mode 100644 index 1022baf2260fa01586ba481b9eb9695525cc0c5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23465 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 F0su%gPPqU8 diff --git a/lnbits/extensions/copilot/static/bitcoin.gif b/lnbits/extensions/copilot/static/bitcoin.gif deleted file mode 100644 index ef8c2ecd5219b4f21a712c91db0c02c50ca5830d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314831 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�gi2 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

~HRazAeHxO<^;+K={`OFQRSRL){Czy3MWs!9F) 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�slyL?Rv%M1EI22jx99Z%rmC$RQ70CO?+my< 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⩔Zw%>8HJq=Ji7%ZuLzl4xMP>>;Rd6L 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 z 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 diff --git a/lnbits/extensions/copilot/static/face.gif b/lnbits/extensions/copilot/static/face.gif deleted file mode 100644 index 3e70d779c926b946365ea9258c6f8281be04b0ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549051 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%0DnG*bO`qSCjGBa+^$Ubu|LGPEs48^du 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

cq`Y(*h@+ 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

From 8d64c6d877250bb7fffa674b63591159bf790396 Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 21:20:20 +0000 Subject: [PATCH 160/168] Adde trim to manifest upload --- lnbits/core/templates/admin/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/templates/admin/index.html b/lnbits/core/templates/admin/index.html index 9bbadbd6..3ce0eb9f 100644 --- a/lnbits/core/templates/admin/index.html +++ b/lnbits/core/templates/admin/index.html @@ -390,7 +390,7 @@ ) }, addExtensionsManifest() { - const addManifest = this.formAddExtensionsManifest + const addManifest = this.formAddExtensionsManifest.trim() const manifests = this.formData.lnbits_extensions_manifests if (addManifest && addManifest.length && !manifests.includes(addManifest)) { this.formData.lnbits_extensions_manifests = [...manifests, addManifest] From 9bf2c231f8f9d51332de303ad5d765f33b14a1ef Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 21:21:36 +0000 Subject: [PATCH 161/168] 5 stars! --- lnbits/core/templates/core/install.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 700fabd4..c4184b1b 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -327,7 +327,7 @@ showUpgradeDialog: false, selectedExtension: null, selectedExtensionRepos: null, - maxStars: 0 + maxStars: 5 } }, watch: { From 75e8683fb191c5fed1af378fd69b7e4ace9c38c9 Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 21:24:59 +0000 Subject: [PATCH 162/168] Default featured --- lnbits/core/templates/core/install.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index c4184b1b..be55d361 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -30,14 +30,14 @@ active-color="primary" align="left" > - Date: Wed, 25 Jan 2023 21:25:49 +0000 Subject: [PATCH 163/168] format --- lnbits/core/templates/core/install.html | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index be55d361..9141d345 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -30,7 +30,7 @@ active-color="primary" align="left" > - {{ extension.shortDescription }} -
{% endraw %}
@@ -477,4 +476,4 @@ mixins: [windowMixin] }) -{% endblock %} \ No newline at end of file +{% endblock %} From 1df9664937d6220c0d0c16c3671c3b46465c5c51 Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 21:45:01 +0000 Subject: [PATCH 164/168] Added notify for non admins --- lnbits/core/templates/core/install.html | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 9141d345..78d009e4 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -2,9 +2,7 @@ %} {{ window_vars(user, extensions) }}{% block page %}
-

- Add Extensions(admin only) -

+

Add Extensions

@@ -467,6 +465,13 @@ } }, created: function () { + if (!this.g.user.admin) { + this.$q.notify({ + timeout: 3000, + message: 'Only Admins can install extensions', + icon: null + }) + } this.extensions = JSON.parse('{{extensions | tojson | safe}}').map(e => ({ ...e, inProgress: false From a2fc34c08ea5e05559ee6ed4eebd76047a8933a5 Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 25 Jan 2023 21:45:54 +0000 Subject: [PATCH 165/168] reworded --- lnbits/core/templates/core/install.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 78d009e4..d9f61844 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -468,7 +468,7 @@ if (!this.g.user.admin) { this.$q.notify({ timeout: 3000, - message: 'Only Admins can install extensions', + message: 'Only admin accounts can install extensions', icon: null }) } From 6276a7a4db8f65dc96f9cb32e465c579eaa7ccc3 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 26 Jan 2023 12:30:42 +0200 Subject: [PATCH 166/168] fix: icon missing after extension install --- lnbits/core/crud.py | 6 ++---- lnbits/core/migrations.py | 1 - lnbits/core/views/api.py | 2 +- lnbits/extension_manager.py | 19 +++++++++++++------ 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index 46f76596..efb594a1 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -88,9 +88,9 @@ async def add_installed_extension( await (conn or db).execute( """ - INSERT INTO installed_extensions (id, version, name, short_description, icon, icon_url, stars, meta) VALUES (?, ?, ?, ?, ?, ?, ?, ?) + INSERT INTO installed_extensions (id, version, name, short_description, icon, stars, meta) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT (id) DO - UPDATE SET (version, name, active, short_description, icon, icon_url, stars, meta) = (?, ?, ?, ?, ?, ?, ?, ?) + UPDATE SET (version, name, active, short_description, icon, stars, meta) = (?, ?, ?, ?, ?, ?, ?) """, ( ext.id, @@ -98,7 +98,6 @@ async def add_installed_extension( ext.name, ext.short_description, ext.icon, - ext.icon_url, ext.stars, json.dumps(meta), version, @@ -106,7 +105,6 @@ async def add_installed_extension( False, ext.short_description, ext.icon, - ext.icon_url, ext.stars, json.dumps(meta), ), diff --git a/lnbits/core/migrations.py b/lnbits/core/migrations.py index 1cdaebaa..9ce3e51b 100644 --- a/lnbits/core/migrations.py +++ b/lnbits/core/migrations.py @@ -294,7 +294,6 @@ async def m010_create_installed_extensions_table(db): name TEXT NOT NULL, short_description TEXT, icon TEXT, - icon_url TEXT, stars INT NOT NULL DEFAULT 0, active BOOLEAN DEFAULT false, meta TEXT NOT NULL DEFAULT '{}' diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index e28cdd3c..6393385f 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -736,7 +736,7 @@ async def api_install_extension( status_code=HTTPStatus.NOT_FOUND, detail="Release not found" ) ext_info = InstallableExtension( - id=data.ext_id, name=data.ext_id, installed_release=release + id=data.ext_id, name=data.ext_id, installed_release=release, icon=release.icon ) ext_info.download_archive() diff --git a/lnbits/extension_manager.py b/lnbits/extension_manager.py index 9c6cd14c..7955c791 100644 --- a/lnbits/extension_manager.py +++ b/lnbits/extension_manager.py @@ -106,10 +106,12 @@ class ExtensionRelease(BaseModel): version: str archive: str source_repo: str + is_github_release = False hash: Optional[str] html_url: Optional[str] description: Optional[str] details_html: Optional[str] = None + icon: Optional[str] @classmethod def from_github_release( @@ -121,6 +123,7 @@ class ExtensionRelease(BaseModel): version=r.tag_name, archive=r.zipball_url, source_repo=source_repo, + is_github_release=True, # description=r.body, # bad for JSON html_url=r.html_url, ) @@ -181,7 +184,7 @@ class GitHubRepo(BaseModel): class ExtensionConfig(BaseModel): name: str short_description: str - tile: str + tile: str = "" class InstallableExtension(BaseModel): @@ -189,7 +192,6 @@ class InstallableExtension(BaseModel): name: str short_description: Optional[str] = None icon: Optional[str] = None - icon_url: Optional[str] = None dependencies: List[str] = [] is_admin_only: bool = False stars: int = 0 @@ -287,9 +289,13 @@ class InstallableExtension(BaseModel): self.name = config_json.get("name") self.short_description = config_json.get("short_description") - self.icon = config_json.get("icon") - if self.installed_release and config_json.get("tile"): - self.icon_url = icon_to_github_url( + + if ( + self.installed_release + and self.installed_release.is_github_release + and config_json.get("tile") + ): + self.icon = icon_to_github_url( self.installed_release.source_repo, config_json.get("tile") ) @@ -345,7 +351,7 @@ class InstallableExtension(BaseModel): short_description=config.short_description, version="0", stars=repo.stargazers_count, - icon_url=icon_to_github_url( + icon=icon_to_github_url( f"{github_release.organisation}/{github_release.repository}", config.tile, ), @@ -427,6 +433,7 @@ class InstallableExtension(BaseModel): description=e.short_description, details_html=e.details, html_url=e.html_url, + icon=e.icon, ) ] From 850169b3bd7ab724f630d0ef9b7bfd98d24fce8e Mon Sep 17 00:00:00 2001 From: ben Date: Thu, 26 Jan 2023 10:32:00 +0000 Subject: [PATCH 167/168] Ignore extensions and upgrades --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 6f5ee023..3b0b00ba 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,7 @@ docker # Nix *result* + +# Ignore extensions (post installable extension PR) +extensions/ +upgrades/ \ No newline at end of file From e4479fcb781cd4e8ca5389f741ec34d617bf2af5 Mon Sep 17 00:00:00 2001 From: ben Date: Thu, 26 Jan 2023 12:51:13 +0000 Subject: [PATCH 168/168] removed copilot from mock data --- tests/data/mock_data.zip | Bin 47284 -> 45695 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/data/mock_data.zip b/tests/data/mock_data.zip index 8356cd5474bf6b97754537bcf43ff3287b2d14ef..fb6e5122128d6c16c4ad3945196032e3902c1b7f 100644 GIT binary patch delta 1697 zcmdn;k?H>vCiVbtW)=|!hRJ=)#W%`LmXQYY7&sW_)M|zOtzEr2hJk@$0|NttG=suq zffY8B-=+CaPM75uf~oty=10h`?h39dw#_qSceAlFvv4smOwLg8gR)Mmc)`_5)M|yr zcsI;Bsj=Byl}!_F*VJ0AumB%EE=DE>28IL%20;de$#JWUHt!2$W`Zj^nDQ~?Mbe3) z6h;OHh5!ZzF$RUndsmrnRt`yHWCgos^50eBo41C}XM$QCyIOp5Lxd?*a^Gt4%?~32 zVUn_I#3vt!W|{1^#t5ps9xP%8RsL{|_-3V;JSMo~f35iu@{`5lm;lq}O>sd8aiz6C zLjKHAnD>Tpvs$7q%=nCCZ@A7SYk!1j*#x!cF>St@ypBl_>{td429S8j`^3dDlg}@c zn*4vA!Q^*oad2IFAYFT=BwI3V&P%TWnG1@hx$DIzi)Af@I+AyT_~yr1!pu+~!2G0^ z2l5k0`S}gvn_KdpvOv}AZxr7=wO9(_c-yr0P_)=Os1F_Yz* zmP1{6t0@f1I;|o-IiXn}>bSry;+uCji@|)levA0#zpWjJ-~y$R^A~T5$4p+^35*Nd$dnU4**xI`~c673^1^yaaI(=P^mdip;k043q1U zO`%p~u2W?0jc1sAFWD5T>GV29Cf}sV@78%TGEBBuugJod%)l^NF-v9goOEHRnz`#0 znWm&pKCs@0kzq3L21Ta8w8;h=Kz;@Js3CLmgbg4co!_9ycPW#BA+@3;J~y!_JGEr; z$7Q0E<#tFjGECOrsK|Udk74qZVl$AbV9z1)1p@Vv{1XK^enj#cG&ec5PB*I#fCN?j}&kOK(C2ysOy|YUlbbip;AU7$*N| zwStO>ZB=CUZ)TXhp~Dp_(y>*MnYV>ua$Tn-ROH=OMW)kjlLfaqfIW%G6Ob4bLh)p6 zC&OgEeq)eU6;OO5atZ?jg8>7B0E+6%-IK3wvtneJEU;aXc}g$CWY@{C@G0G{$jmo^ yVe!;OB)GK%aR-=6M#lqkc% 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