mirror of
https://github.com/lnbits/lnbits.git
synced 2025-09-19 20:14:59 +02:00
refactor: move tinyurl to its own router (#2154)
small little refactor getting to a cleaner `views/api.py`
This commit is contained in:
@@ -8,6 +8,7 @@ from .views.api import api_router
|
|||||||
from .views.generic import generic_router, update_user_extension
|
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
|
||||||
|
|
||||||
# backwards compatibility for extensions
|
# backwards compatibility for extensions
|
||||||
core_app = APIRouter(tags=["Core"])
|
core_app = APIRouter(tags=["Core"])
|
||||||
@@ -22,3 +23,4 @@ def init_core_routers(app):
|
|||||||
app.include_router(super_node_router)
|
app.include_router(super_node_router)
|
||||||
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)
|
||||||
|
@@ -23,7 +23,7 @@ from fastapi.exceptions import HTTPException
|
|||||||
from fastapi.responses import JSONResponse
|
from fastapi.responses import JSONResponse
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
from sse_starlette.sse import EventSourceResponse
|
from sse_starlette.sse import EventSourceResponse
|
||||||
from starlette.responses import RedirectResponse, StreamingResponse
|
from starlette.responses import StreamingResponse
|
||||||
|
|
||||||
from lnbits import bolt11, lnurl
|
from lnbits import bolt11, lnurl
|
||||||
from lnbits.core.db import core_app_extra, db
|
from lnbits.core.db import core_app_extra, db
|
||||||
@@ -77,12 +77,10 @@ from ..crud import (
|
|||||||
DateTrunc,
|
DateTrunc,
|
||||||
add_installed_extension,
|
add_installed_extension,
|
||||||
create_account,
|
create_account,
|
||||||
create_tinyurl,
|
|
||||||
create_wallet,
|
create_wallet,
|
||||||
create_webpush_subscription,
|
create_webpush_subscription,
|
||||||
delete_dbversion,
|
delete_dbversion,
|
||||||
delete_installed_extension,
|
delete_installed_extension,
|
||||||
delete_tinyurl,
|
|
||||||
delete_wallet,
|
delete_wallet,
|
||||||
delete_webpush_subscription,
|
delete_webpush_subscription,
|
||||||
drop_extension_db,
|
drop_extension_db,
|
||||||
@@ -91,8 +89,6 @@ from ..crud import (
|
|||||||
get_payments_history,
|
get_payments_history,
|
||||||
get_payments_paginated,
|
get_payments_paginated,
|
||||||
get_standalone_payment,
|
get_standalone_payment,
|
||||||
get_tinyurl,
|
|
||||||
get_tinyurl_by_url,
|
|
||||||
get_wallet_for_key,
|
get_wallet_for_key,
|
||||||
get_webpush_subscription,
|
get_webpush_subscription,
|
||||||
save_balance_check,
|
save_balance_check,
|
||||||
@@ -952,88 +948,6 @@ async def delete_extension_db(ext_id: str):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@api_router.post(
|
|
||||||
"/api/v1/tinyurl",
|
|
||||||
name="Tinyurl",
|
|
||||||
description="creates a tinyurl",
|
|
||||||
)
|
|
||||||
async def api_create_tinyurl(
|
|
||||||
url: str, endless: bool = False, wallet: WalletTypeInfo = Depends(get_key_type)
|
|
||||||
):
|
|
||||||
tinyurls = await get_tinyurl_by_url(url)
|
|
||||||
try:
|
|
||||||
for tinyurl in tinyurls:
|
|
||||||
if tinyurl:
|
|
||||||
if tinyurl.wallet == wallet.wallet.inkey:
|
|
||||||
return tinyurl
|
|
||||||
return await create_tinyurl(url, endless, wallet.wallet.inkey)
|
|
||||||
except Exception:
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=HTTPStatus.BAD_REQUEST, detail="Unable to create tinyurl"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@api_router.get(
|
|
||||||
"/api/v1/tinyurl/{tinyurl_id}",
|
|
||||||
name="Tinyurl",
|
|
||||||
description="get a tinyurl by id",
|
|
||||||
)
|
|
||||||
async def api_get_tinyurl(
|
|
||||||
tinyurl_id: str, wallet: WalletTypeInfo = Depends(get_key_type)
|
|
||||||
):
|
|
||||||
try:
|
|
||||||
tinyurl = await get_tinyurl(tinyurl_id)
|
|
||||||
if tinyurl:
|
|
||||||
if tinyurl.wallet == wallet.wallet.inkey:
|
|
||||||
return tinyurl
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=HTTPStatus.FORBIDDEN, detail="Wrong key provided."
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=HTTPStatus.NOT_FOUND, detail="Unable to fetch tinyurl"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@api_router.delete(
|
|
||||||
"/api/v1/tinyurl/{tinyurl_id}",
|
|
||||||
name="Tinyurl",
|
|
||||||
description="delete a tinyurl by id",
|
|
||||||
)
|
|
||||||
async def api_delete_tinyurl(
|
|
||||||
tinyurl_id: str, wallet: WalletTypeInfo = Depends(get_key_type)
|
|
||||||
):
|
|
||||||
try:
|
|
||||||
tinyurl = await get_tinyurl(tinyurl_id)
|
|
||||||
if tinyurl:
|
|
||||||
if tinyurl.wallet == wallet.wallet.inkey:
|
|
||||||
await delete_tinyurl(tinyurl_id)
|
|
||||||
return {"deleted": True}
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=HTTPStatus.FORBIDDEN, detail="Wrong key provided."
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=HTTPStatus.BAD_REQUEST, detail="Unable to delete"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@api_router.get(
|
|
||||||
"/t/{tinyurl_id}",
|
|
||||||
name="Tinyurl",
|
|
||||||
description="redirects a tinyurl by id",
|
|
||||||
)
|
|
||||||
async def api_tinyurl(tinyurl_id: str):
|
|
||||||
tinyurl = await get_tinyurl(tinyurl_id)
|
|
||||||
if tinyurl:
|
|
||||||
response = RedirectResponse(url=tinyurl.url)
|
|
||||||
return response
|
|
||||||
else:
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=HTTPStatus.NOT_FOUND, detail="unable to find tinyurl"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@api_router.post("/api/v1/webpush", status_code=HTTPStatus.CREATED)
|
@api_router.post("/api/v1/webpush", status_code=HTTPStatus.CREATED)
|
||||||
async def api_create_webpush_subscription(
|
async def api_create_webpush_subscription(
|
||||||
request: Request,
|
request: Request,
|
||||||
|
104
lnbits/core/views/tinyurl_api.py
Normal file
104
lnbits/core/views/tinyurl_api.py
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
from http import HTTPStatus
|
||||||
|
|
||||||
|
from fastapi import (
|
||||||
|
APIRouter,
|
||||||
|
Depends,
|
||||||
|
HTTPException,
|
||||||
|
)
|
||||||
|
from starlette.responses import RedirectResponse
|
||||||
|
|
||||||
|
from lnbits.decorators import (
|
||||||
|
WalletTypeInfo,
|
||||||
|
get_key_type,
|
||||||
|
)
|
||||||
|
|
||||||
|
from ..crud import (
|
||||||
|
create_tinyurl,
|
||||||
|
delete_tinyurl,
|
||||||
|
get_tinyurl,
|
||||||
|
get_tinyurl_by_url,
|
||||||
|
)
|
||||||
|
|
||||||
|
tinyurl_router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
|
@tinyurl_router.post(
|
||||||
|
"/api/v1/tinyurl",
|
||||||
|
name="Tinyurl",
|
||||||
|
description="creates a tinyurl",
|
||||||
|
)
|
||||||
|
async def api_create_tinyurl(
|
||||||
|
url: str, endless: bool = False, wallet: WalletTypeInfo = Depends(get_key_type)
|
||||||
|
):
|
||||||
|
tinyurls = await get_tinyurl_by_url(url)
|
||||||
|
try:
|
||||||
|
for tinyurl in tinyurls:
|
||||||
|
if tinyurl:
|
||||||
|
if tinyurl.wallet == wallet.wallet.inkey:
|
||||||
|
return tinyurl
|
||||||
|
return await create_tinyurl(url, endless, wallet.wallet.inkey)
|
||||||
|
except Exception:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.BAD_REQUEST, detail="Unable to create tinyurl"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@tinyurl_router.get(
|
||||||
|
"/api/v1/tinyurl/{tinyurl_id}",
|
||||||
|
name="Tinyurl",
|
||||||
|
description="get a tinyurl by id",
|
||||||
|
)
|
||||||
|
async def api_get_tinyurl(
|
||||||
|
tinyurl_id: str, wallet: WalletTypeInfo = Depends(get_key_type)
|
||||||
|
):
|
||||||
|
try:
|
||||||
|
tinyurl = await get_tinyurl(tinyurl_id)
|
||||||
|
if tinyurl:
|
||||||
|
if tinyurl.wallet == wallet.wallet.inkey:
|
||||||
|
return tinyurl
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.FORBIDDEN, detail="Wrong key provided."
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.NOT_FOUND, detail="Unable to fetch tinyurl"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@tinyurl_router.delete(
|
||||||
|
"/api/v1/tinyurl/{tinyurl_id}",
|
||||||
|
name="Tinyurl",
|
||||||
|
description="delete a tinyurl by id",
|
||||||
|
)
|
||||||
|
async def api_delete_tinyurl(
|
||||||
|
tinyurl_id: str, wallet: WalletTypeInfo = Depends(get_key_type)
|
||||||
|
):
|
||||||
|
try:
|
||||||
|
tinyurl = await get_tinyurl(tinyurl_id)
|
||||||
|
if tinyurl:
|
||||||
|
if tinyurl.wallet == wallet.wallet.inkey:
|
||||||
|
await delete_tinyurl(tinyurl_id)
|
||||||
|
return {"deleted": True}
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.FORBIDDEN, detail="Wrong key provided."
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.BAD_REQUEST, detail="Unable to delete"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@tinyurl_router.get(
|
||||||
|
"/t/{tinyurl_id}",
|
||||||
|
name="Tinyurl",
|
||||||
|
description="redirects a tinyurl by id",
|
||||||
|
)
|
||||||
|
async def api_tinyurl(tinyurl_id: str):
|
||||||
|
tinyurl = await get_tinyurl(tinyurl_id)
|
||||||
|
if tinyurl:
|
||||||
|
response = RedirectResponse(url=tinyurl.url)
|
||||||
|
return response
|
||||||
|
else:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.NOT_FOUND, detail="unable to find tinyurl"
|
||||||
|
)
|
Reference in New Issue
Block a user