Making universal tinyurl function

This commit is contained in:
ben 2023-01-12 15:16:37 +00:00
parent 492eda5fdc
commit 2b3a2afe83
4 changed files with 69 additions and 1 deletions

View File

@ -9,7 +9,7 @@ from lnbits.db import COCKROACH, POSTGRES, Connection
from lnbits.settings import AdminSettings, EditableSettings, SuperSettings, settings from lnbits.settings import AdminSettings, EditableSettings, SuperSettings, settings
from . import db from . import db
from .models import BalanceCheck, Payment, User, Wallet from .models import BalanceCheck, Payment, TinyURL, User, Wallet
# accounts # accounts
# -------- # --------
@ -620,3 +620,30 @@ async def create_admin_settings(super_user: str, new_settings: dict):
sql = f"INSERT INTO settings (super_user, editable_settings) VALUES (?, ?)" sql = f"INSERT INTO settings (super_user, editable_settings) VALUES (?, ?)"
await db.execute(sql, (super_user, json.dumps(new_settings))) await db.execute(sql, (super_user, json.dumps(new_settings)))
return await get_super_settings() return await get_super_settings()
# tinyurl
# -------
async def create_tinyurl(tiny_url: str):
tinyurl_id = uuid4().hex[:8]
await (conn or db).execute(
"""
INSERT INTO tiny_url (id, url) VALUES (?, ?)
""",
(tinyurl_id, domain),
)
return await get_tinyurl(tinyurl_id)
async def get_tinyurl(tinyurl_id: str) -> Optional[BalanceCheck]:
row = await (conn or db).fetchone(
"""
SELECT *
FROM tiny_url
WHERE id = ?
""",
(tinyurl_id),
)
return TinyURL.from_row(row) if row else None

View File

@ -269,3 +269,12 @@ async def m008_create_admin_settings_table(db):
); );
""" """
) )
await db.execute(
"""
CREATE TABLE IF NOT EXISTS tinyurl (
id TEXT PRIMARY KEY,
url TEXT,
);
"""
)

View File

@ -213,3 +213,12 @@ class BalanceCheck(BaseModel):
@classmethod @classmethod
def from_row(cls, row: Row): def from_row(cls, row: Row):
return cls(wallet=row["wallet"], service=row["service"], url=row["url"]) return cls(wallet=row["wallet"], service=row["service"], url=row["url"])
class TinyURL(BaseModel):
id: str
url: str
@classmethod
def from_row(cls, row: Row) -> "TinyURL":
return cls(**dict(row))

View File

@ -706,3 +706,26 @@ async def websocket_update_get(item_id: str, data: str):
return {"sent": True, "data": data} return {"sent": True, "data": data}
except: except:
return {"sent": False, "data": data} return {"sent": False, "data": data}
############################TINYURL##################################
@core_app.post("/api/v1/tinyurl")
async def api_create_tinyurl(url: str):
return await create_tinyurl(url)
@core_app.get("/api/v1/tinyurl/{tinyurl_id}")
async def api_get_tinyurl(tinyurl_id: str):
return await get_tinyurl(tinyurl_id)
@core_app.get("/{tinyurl_id}")
async def api_tinyurl(tinyurl_id: str):
tinyurl = await get_tinyurl(tinyurl_id)
if tinyurl:
response = RedirectResponse(url=tinyurl.url)
return response
else:
return