diff --git a/__init__.py b/__init__.py index 735e95d..8616343 100644 --- a/__init__.py +++ b/__init__.py @@ -2,6 +2,7 @@ from fastapi import APIRouter from starlette.staticfiles import StaticFiles +from typing import List from lnbits.db import Database from lnbits.helpers import template_renderer @@ -9,6 +10,7 @@ db = Database("ext_invoices") + invoices_static_files = [ { "path": "/invoices/static", @@ -26,10 +28,12 @@ def invoices_renderer(): from .tasks import wait_for_paid_invoices +scheduled_tasks: List[asyncio.Task] = [] def invoices_start(): loop = asyncio.get_event_loop() - loop.create_task(catch_everything_and_restart(wait_for_paid_invoices)) + task = loop.create_task(catch_everything_and_restart(wait_for_paid_invoices)) + scheduled_tasks.append(task) from .views import * # noqa: F401,F403 diff --git a/views_api.py b/views_api.py index 1a7762a..60dea9a 100644 --- a/views_api.py +++ b/views_api.py @@ -6,10 +6,10 @@ from lnbits.core.crud import get_user from lnbits.core.services import create_invoice from lnbits.core.views.api import api_payment -from lnbits.decorators import WalletTypeInfo, get_key_type +from lnbits.decorators import WalletTypeInfo, get_key_type, check_admin from lnbits.utils.exchange_rates import fiat_amount_as_satoshis -from . import invoices_ext +from . import invoices_ext, scheduled_tasks from .crud import ( create_invoice_internal, create_invoice_items, @@ -131,3 +131,14 @@ async def api_invoices_check_payment(invoice_id: str, payment_hash: str): logger.error(exc) return {"paid": False} return status + + +@invoices_ext.delete("/api/v1", status_code=HTTPStatus.OK, dependencies=[Depends(check_admin)]) +async def api_stop(): + for t in scheduled_tasks: + try: + t.cancel() + except Exception as ex: + logger.warning(ex) + + return {"success": True}