mirror of
https://github.com/lnbits/lnbits.git
synced 2025-10-10 20:42:32 +02:00
Added wallet authentication to creat, get and delete tinyurls
This commit is contained in:
@@ -628,34 +628,38 @@ async def create_admin_settings(super_user: str, new_settings: dict):
|
|||||||
# -------
|
# -------
|
||||||
|
|
||||||
|
|
||||||
async def create_tinyurl(domain: str, endless: bool, conn: Optional[Connection] = None):
|
async def create_tinyurl(domain: str, endless: bool, wallet: str):
|
||||||
tinyurl_id = shortuuid.uuid()[:8]
|
tinyurl_id = shortuuid.uuid()[:8]
|
||||||
await (conn or db).execute(
|
await db.execute(
|
||||||
f"INSERT INTO tiny_url (id, url, endless) VALUES (?, ?, ?)",
|
f"INSERT INTO tiny_url (id, url, endless, wallet) VALUES (?, ?, ?, ?)",
|
||||||
(
|
(
|
||||||
tinyurl_id,
|
tinyurl_id,
|
||||||
domain,
|
domain,
|
||||||
endless,
|
endless,
|
||||||
|
wallet,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
return await get_tinyurl(tinyurl_id)
|
return await get_tinyurl(tinyurl_id)
|
||||||
|
|
||||||
|
|
||||||
async def get_tinyurl(
|
async def get_tinyurl(tinyurl_id: str) -> Optional[TinyURL]:
|
||||||
tinyurl_id: str, conn: Optional[Connection] = None
|
row = await db.fetchone(
|
||||||
) -> Optional[TinyURL]:
|
|
||||||
row = await (conn or db).fetchone(
|
|
||||||
f"SELECT * FROM tiny_url WHERE id = ?",
|
f"SELECT * FROM tiny_url WHERE id = ?",
|
||||||
(tinyurl_id,),
|
(tinyurl_id,),
|
||||||
)
|
)
|
||||||
return TinyURL.from_row(row) if row else None
|
return TinyURL.from_row(row) if row else None
|
||||||
|
|
||||||
|
|
||||||
async def get_tinyurl_by_url(
|
async def get_tinyurl_by_url(url: str) -> List[TinyURL]:
|
||||||
url: str, conn: Optional[Connection] = None
|
rows = await db.fetchall(
|
||||||
) -> Optional[TinyURL]:
|
|
||||||
row = await (conn or db).fetchone(
|
|
||||||
f"SELECT * FROM tiny_url WHERE url = ?",
|
f"SELECT * FROM tiny_url WHERE url = ?",
|
||||||
(url,),
|
(url,),
|
||||||
)
|
)
|
||||||
return TinyURL.from_row(row) if row else None
|
return [TinyURL.from_row(row) for row in rows]
|
||||||
|
|
||||||
|
|
||||||
|
async def delete_tinyurl(tinyurl_id: str):
|
||||||
|
row = await db.execute(
|
||||||
|
f"DELETE FROM tiny_url WHERE id = ?",
|
||||||
|
(tinyurl_id,),
|
||||||
|
)
|
||||||
|
@@ -278,6 +278,7 @@ async def m009_create_tinyurl_table(db):
|
|||||||
id TEXT PRIMARY KEY,
|
id TEXT PRIMARY KEY,
|
||||||
url TEXT,
|
url TEXT,
|
||||||
endless BOOL NOT NULL DEFAULT false,
|
endless BOOL NOT NULL DEFAULT false,
|
||||||
|
wallet TEXT,
|
||||||
time TIMESTAMP NOT NULL DEFAULT {db.timestamp_now}
|
time TIMESTAMP NOT NULL DEFAULT {db.timestamp_now}
|
||||||
);
|
);
|
||||||
"""
|
"""
|
||||||
|
@@ -219,6 +219,7 @@ class TinyURL(BaseModel):
|
|||||||
id: str
|
id: str
|
||||||
url: str
|
url: str
|
||||||
endless: bool
|
endless: bool
|
||||||
|
wallet: str
|
||||||
time: float
|
time: float
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@@ -48,6 +48,7 @@ from lnbits.utils.exchange_rates import (
|
|||||||
from .. import core_app, db
|
from .. import core_app, db
|
||||||
from ..crud import (
|
from ..crud import (
|
||||||
create_tinyurl,
|
create_tinyurl,
|
||||||
|
delete_tinyurl,
|
||||||
get_payments,
|
get_payments,
|
||||||
get_standalone_payment,
|
get_standalone_payment,
|
||||||
get_tinyurl,
|
get_tinyurl,
|
||||||
@@ -715,23 +716,67 @@ async def websocket_update_get(item_id: str, data: str):
|
|||||||
|
|
||||||
|
|
||||||
@core_app.post("/api/v1/tinyurl")
|
@core_app.post("/api/v1/tinyurl")
|
||||||
async def api_create_tinyurl(url: str, endless: bool = False):
|
async def api_create_tinyurl(
|
||||||
tinyurl = await get_tinyurl_by_url(url)
|
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:
|
||||||
|
if tinyurl.wallet == wallet.wallet.inkey:
|
||||||
return tinyurl
|
return tinyurl
|
||||||
return await create_tinyurl(url, endless)
|
return await create_tinyurl(url, endless, wallet.wallet.inkey)
|
||||||
|
except:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.BAD_REQUEST, detail="Unable to create tinyurl"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@core_app.get("/api/v1/tinyurl/{tinyurl_id}")
|
@core_app.get("/api/v1/tinyurl/{tinyurl_id}")
|
||||||
async def api_get_tinyurl(tinyurl_id: str):
|
async def api_get_tinyurl(
|
||||||
return await get_tinyurl(tinyurl_id)
|
tinyurl_id: str, wallet: WalletTypeInfo = Depends(get_key_type)
|
||||||
|
):
|
||||||
|
try:
|
||||||
|
tinyurl = await get_tinyurl(tinyurl_id)
|
||||||
|
if tinyurl.wallet == wallet.wallet.inkey:
|
||||||
|
return tinyurl
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.FORBIDDEN, detail="Wrong key provided."
|
||||||
|
)
|
||||||
|
except:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.NOT_FOUND, detail="Unable to fetch tinyurl"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@core_app.delete("/api/v1/tinyurl/{tinyurl_id}")
|
||||||
|
async def api_delete_tinyurl(
|
||||||
|
tinyurl_id: str, wallet: WalletTypeInfo = Depends(get_key_type)
|
||||||
|
):
|
||||||
|
try:
|
||||||
|
tinyurl = await get_tinyurl(tinyurl_id)
|
||||||
|
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:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.BAD_REQUEST, detail="Unable to delete"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@core_app.get("/t/{tinyurl_id}")
|
@core_app.get("/t/{tinyurl_id}")
|
||||||
async def api_tinyurl(tinyurl_id: str):
|
async def api_tinyurl(tinyurl_id: str):
|
||||||
|
try:
|
||||||
tinyurl = await get_tinyurl(tinyurl_id)
|
tinyurl = await get_tinyurl(tinyurl_id)
|
||||||
if tinyurl:
|
if tinyurl:
|
||||||
response = RedirectResponse(url=tinyurl.url)
|
response = RedirectResponse(url=tinyurl.url)
|
||||||
return response
|
return response
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
except:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.NOT_FOUND, detail="unable to find tinyurl"
|
||||||
|
)
|
||||||
|
Reference in New Issue
Block a user