mirror of
https://github.com/lnbits/lnbits.git
synced 2025-10-05 19:22:34 +02:00
refactor: move webpush to it own router
refactor to make `views/api.py` cleaner
This commit is contained in:
@@ -9,6 +9,7 @@ from .views.generic import generic_router, update_user_extension
|
|||||||
from .views.node_api import node_router, public_node_router, super_node_router
|
from .views.node_api import node_router, public_node_router, super_node_router
|
||||||
from .views.public_api import public_router
|
from .views.public_api import public_router
|
||||||
from .views.tinyurl_api import tinyurl_router
|
from .views.tinyurl_api import tinyurl_router
|
||||||
|
from .views.webpush_api import webpush_router
|
||||||
|
|
||||||
# backwards compatibility for extensions
|
# backwards compatibility for extensions
|
||||||
core_app = APIRouter(tags=["Core"])
|
core_app = APIRouter(tags=["Core"])
|
||||||
@@ -24,3 +25,4 @@ def init_core_routers(app):
|
|||||||
app.include_router(public_node_router)
|
app.include_router(public_node_router)
|
||||||
app.include_router(admin_router)
|
app.include_router(admin_router)
|
||||||
app.include_router(tinyurl_router)
|
app.include_router(tinyurl_router)
|
||||||
|
app.include_router(webpush_router)
|
||||||
|
@@ -1,12 +1,11 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import base64
|
|
||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
import uuid
|
import uuid
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from typing import Dict, List, Optional, Union
|
from typing import Dict, List, Optional, Union
|
||||||
from urllib.parse import ParseResult, parse_qs, unquote, urlencode, urlparse, urlunparse
|
from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
import pyqrcode
|
import pyqrcode
|
||||||
@@ -37,7 +36,6 @@ from lnbits.core.models import (
|
|||||||
CreateLnurl,
|
CreateLnurl,
|
||||||
CreateLnurlAuth,
|
CreateLnurlAuth,
|
||||||
CreateWallet,
|
CreateWallet,
|
||||||
CreateWebPushSubscription,
|
|
||||||
DecodePayment,
|
DecodePayment,
|
||||||
Payment,
|
Payment,
|
||||||
PaymentFilters,
|
PaymentFilters,
|
||||||
@@ -46,7 +44,6 @@ from lnbits.core.models import (
|
|||||||
User,
|
User,
|
||||||
Wallet,
|
Wallet,
|
||||||
WalletType,
|
WalletType,
|
||||||
WebPushSubscription,
|
|
||||||
)
|
)
|
||||||
from lnbits.db import Filters, Page
|
from lnbits.db import Filters, Page
|
||||||
from lnbits.decorators import (
|
from lnbits.decorators import (
|
||||||
@@ -78,11 +75,9 @@ from ..crud import (
|
|||||||
add_installed_extension,
|
add_installed_extension,
|
||||||
create_account,
|
create_account,
|
||||||
create_wallet,
|
create_wallet,
|
||||||
create_webpush_subscription,
|
|
||||||
delete_dbversion,
|
delete_dbversion,
|
||||||
delete_installed_extension,
|
delete_installed_extension,
|
||||||
delete_wallet,
|
delete_wallet,
|
||||||
delete_webpush_subscription,
|
|
||||||
drop_extension_db,
|
drop_extension_db,
|
||||||
get_dbversions,
|
get_dbversions,
|
||||||
get_payments,
|
get_payments,
|
||||||
@@ -90,7 +85,6 @@ from ..crud import (
|
|||||||
get_payments_paginated,
|
get_payments_paginated,
|
||||||
get_standalone_payment,
|
get_standalone_payment,
|
||||||
get_wallet_for_key,
|
get_wallet_for_key,
|
||||||
get_webpush_subscription,
|
|
||||||
save_balance_check,
|
save_balance_check,
|
||||||
update_pending_payments,
|
update_pending_payments,
|
||||||
update_wallet,
|
update_wallet,
|
||||||
@@ -946,36 +940,3 @@ async def delete_extension_db(ext_id: str):
|
|||||||
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
|
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
|
||||||
detail=f"Cannot delete data for extension '{ext_id}'",
|
detail=f"Cannot delete data for extension '{ext_id}'",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@api_router.post("/api/v1/webpush", status_code=HTTPStatus.CREATED)
|
|
||||||
async def api_create_webpush_subscription(
|
|
||||||
request: Request,
|
|
||||||
data: CreateWebPushSubscription,
|
|
||||||
wallet: WalletTypeInfo = Depends(require_admin_key),
|
|
||||||
) -> WebPushSubscription:
|
|
||||||
subscription = json.loads(data.subscription)
|
|
||||||
endpoint = subscription["endpoint"]
|
|
||||||
host = urlparse(str(request.url)).netloc
|
|
||||||
|
|
||||||
subscription = await get_webpush_subscription(endpoint, wallet.wallet.user)
|
|
||||||
if subscription:
|
|
||||||
return subscription
|
|
||||||
else:
|
|
||||||
return await create_webpush_subscription(
|
|
||||||
endpoint,
|
|
||||||
wallet.wallet.user,
|
|
||||||
data.subscription,
|
|
||||||
host,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@api_router.delete("/api/v1/webpush", status_code=HTTPStatus.OK)
|
|
||||||
async def api_delete_webpush_subscription(
|
|
||||||
request: Request,
|
|
||||||
wallet: WalletTypeInfo = Depends(require_admin_key),
|
|
||||||
):
|
|
||||||
endpoint = unquote(
|
|
||||||
base64.b64decode(str(request.query_params.get("endpoint"))).decode("utf-8")
|
|
||||||
)
|
|
||||||
await delete_webpush_subscription(endpoint, wallet.wallet.user)
|
|
||||||
|
60
lnbits/core/views/webpush_api.py
Normal file
60
lnbits/core/views/webpush_api.py
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
import base64
|
||||||
|
import json
|
||||||
|
from http import HTTPStatus
|
||||||
|
from urllib.parse import unquote, urlparse
|
||||||
|
|
||||||
|
from fastapi import (
|
||||||
|
APIRouter,
|
||||||
|
Depends,
|
||||||
|
Request,
|
||||||
|
)
|
||||||
|
|
||||||
|
from lnbits.core.models import (
|
||||||
|
CreateWebPushSubscription,
|
||||||
|
WebPushSubscription,
|
||||||
|
)
|
||||||
|
from lnbits.decorators import (
|
||||||
|
WalletTypeInfo,
|
||||||
|
require_admin_key,
|
||||||
|
)
|
||||||
|
|
||||||
|
from ..crud import (
|
||||||
|
create_webpush_subscription,
|
||||||
|
delete_webpush_subscription,
|
||||||
|
get_webpush_subscription,
|
||||||
|
)
|
||||||
|
|
||||||
|
webpush_router = APIRouter(prefix="/api/v1/webpush", tags=["webpush"])
|
||||||
|
|
||||||
|
|
||||||
|
@webpush_router.post("/", status_code=HTTPStatus.CREATED)
|
||||||
|
async def api_create_webpush_subscription(
|
||||||
|
request: Request,
|
||||||
|
data: CreateWebPushSubscription,
|
||||||
|
wallet: WalletTypeInfo = Depends(require_admin_key),
|
||||||
|
) -> WebPushSubscription:
|
||||||
|
subscription = json.loads(data.subscription)
|
||||||
|
endpoint = subscription["endpoint"]
|
||||||
|
host = urlparse(str(request.url)).netloc
|
||||||
|
|
||||||
|
subscription = await get_webpush_subscription(endpoint, wallet.wallet.user)
|
||||||
|
if subscription:
|
||||||
|
return subscription
|
||||||
|
else:
|
||||||
|
return await create_webpush_subscription(
|
||||||
|
endpoint,
|
||||||
|
wallet.wallet.user,
|
||||||
|
data.subscription,
|
||||||
|
host,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@webpush_router.delete("/", status_code=HTTPStatus.OK)
|
||||||
|
async def api_delete_webpush_subscription(
|
||||||
|
request: Request,
|
||||||
|
wallet: WalletTypeInfo = Depends(require_admin_key),
|
||||||
|
):
|
||||||
|
endpoint = unquote(
|
||||||
|
base64.b64decode(str(request.query_params.get("endpoint"))).decode("utf-8")
|
||||||
|
)
|
||||||
|
await delete_webpush_subscription(endpoint, wallet.wallet.user)
|
Reference in New Issue
Block a user