refactor: move webpush to it own router
refactor to make `views/api.py` cleaner
This commit is contained in:
parent
fa49133bd7
commit
5fc472a8d9
3 changed files with 63 additions and 40 deletions
|
|
@ -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)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue