diff --git a/lnbits/extensions/withdraw/crud.py b/lnbits/extensions/withdraw/crud.py
index 01a841cfe..911a8e635 100644
--- a/lnbits/extensions/withdraw/crud.py
+++ b/lnbits/extensions/withdraw/crud.py
@@ -56,12 +56,7 @@ async def get_withdraw_link(link_id: str, num=0) -> Optional[WithdrawLink]:
if not row:
return None
- # link = []
- # for item in row:
- # link.append(item)
- # link.append(num)
- # print("GET_LINK", WithdrawLink.from_row(row))
- return WithdrawLink.from_row(row)
+ return WithdrawLink(**row) if row else None
async def get_withdraw_link_by_hash(unique_hash: str, num=0) -> Optional[WithdrawLink]:
@@ -70,12 +65,7 @@ async def get_withdraw_link_by_hash(unique_hash: str, num=0) -> Optional[Withdra
)
if not row:
return None
-
- # link = []
- # for item in row:
- # link.append(item)
- # link.append(num)
- return WithdrawLink.from_row(row)
+ return WithdrawLink(**row) if row else None
async def get_withdraw_links(wallet_ids: Union[str, List[str]]) -> List[WithdrawLink]:
@@ -86,14 +76,12 @@ async def get_withdraw_links(wallet_ids: Union[str, List[str]]) -> List[Withdraw
rows = await db.fetchall(
f"SELECT * FROM withdraw.withdraw_link WHERE wallet IN ({q})", (*wallet_ids,)
)
-
- return [WithdrawLink.from_row(row) for row in rows]
+ return [WithdrawLink(**row) for row in rows]
async def update_withdraw_link(link_id: str, **kwargs) -> Optional[WithdrawLink]:
if "is_unique" in kwargs:
kwargs["is_unique"] = int(kwargs["is_unique"])
-
q = ", ".join([f"{field[0]} = ?" for field in kwargs.items()])
await db.execute(
f"UPDATE withdraw.withdraw_link SET {q} WHERE id = ?",
@@ -102,7 +90,7 @@ async def update_withdraw_link(link_id: str, **kwargs) -> Optional[WithdrawLink]
row = await db.fetchone(
"SELECT * FROM withdraw.withdraw_link WHERE id = ?", (link_id,)
)
- return WithdrawLink.from_row(row) if row else None
+ return WithdrawLink(**row) if row else None
async def delete_withdraw_link(link_id: str) -> None:
diff --git a/lnbits/extensions/withdraw/lnurl.py b/lnbits/extensions/withdraw/lnurl.py
index f47288195..918ebadf2 100644
--- a/lnbits/extensions/withdraw/lnurl.py
+++ b/lnbits/extensions/withdraw/lnurl.py
@@ -54,25 +54,22 @@ async def api_lnurl_callback(
):
link = await get_withdraw_link_by_hash(unique_hash)
now = int(datetime.now().timestamp())
-
+ print("link")
if not link:
raise HTTPException(
status_code=HTTPStatus.NOT_FOUND, detail="LNURL-withdraw not found."
)
-
+ print("link")
if link.is_spent:
- raise HTTPException(
- # WHAT STATUS_CODE TO USE??
- detail="Withdraw is spent."
- )
-
+ raise HTTPException(status_code=HTTPStatus.OK, detail="Withdraw is spent.")
+ print("link")
if link.k1 != k1:
- raise HTTPException(status_code=HTTPStatus.BAD_REQUEST, detail="Bad request.")
-
+ raise HTTPException(status_code=HTTPStatus.OK, detail="Bad request.")
+ print("link")
if now < link.open_time:
return {"status": "ERROR", "reason": f"Wait {link.open_time - now} seconds."}
-
+ print("link")
try:
usescsv = ""
for x in range(1, link.uses - link.used):
@@ -92,7 +89,6 @@ async def api_lnurl_callback(
"used": link.used + 1,
"usescsv": usescsv,
}
-
await update_withdraw_link(link.id, **changes)
await pay_invoice(
@@ -101,18 +97,11 @@ async def api_lnurl_callback(
max_sat=link.max_withdrawable,
extra={"tag": "withdraw"},
)
- # should these be "raise" instead of the "return" ??
- except ValueError as e:
- await update_withdraw_link(link.id, **changesback)
- return {"status": "ERROR", "reason": str(e)}
- except PermissionError:
- await update_withdraw_link(link.id, **changesback)
- return {"status": "ERROR", "reason": "Withdraw link is empty."}
- except Exception as e:
- await update_withdraw_link(link.id, **changesback)
- return {"status": "ERROR", "reason": str(e)}
+ return {"status": "OK"}
- return {"status": "OK"}
+ except Exception as e:
+ wibble = await update_withdraw_link(link.id, **changesback)
+ return {"status": "ERROR", "reason": str(e)}
# FOR LNURLs WHICH ARE UNIQUE
@@ -128,22 +117,11 @@ async def api_lnurl_multi_response(request: Request, unique_hash, id_unique_hash
if not link:
raise HTTPException(
- status_code=HTTPStatus.NOT_FOUND, detail="LNURL-withdraw not found."
+ status_code=HTTPStatus.OK, detail="LNURL-withdraw not found."
)
- # return (
- # {"status": "ERROR", "reason": "LNURL-withdraw not found."},
- # HTTPStatus.OK,
- # )
if link.is_spent:
- raise HTTPException(
- # WHAT STATUS_CODE TO USE??
- detail="Withdraw is spent."
- )
- # return (
- # {"status": "ERROR", "reason": "Withdraw is spent."},
- # HTTPStatus.OK,
- # )
+ raise HTTPException(status_code=HTTPStatus.OK, detail="Withdraw is spent.")
useslist = link.usescsv.split(",")
found = False
@@ -153,11 +131,7 @@ async def api_lnurl_multi_response(request: Request, unique_hash, id_unique_hash
found = True
if not found:
raise HTTPException(
- status_code=HTTPStatus.NOT_FOUND, detail="LNURL-withdraw not found."
+ status_code=HTTPStatus.OK, detail="LNURL-withdraw not found."
)
- # return (
- # {"status": "ERROR", "reason": "LNURL-withdraw not found."},
- # HTTPStatus.OK,
- # )
return link.lnurl_response(request).dict()
diff --git a/lnbits/extensions/withdraw/models.py b/lnbits/extensions/withdraw/models.py
index 8de38e389..a03c7db87 100644
--- a/lnbits/extensions/withdraw/models.py
+++ b/lnbits/extensions/withdraw/models.py
@@ -19,26 +19,19 @@ class CreateWithdrawData(BaseModel):
class WithdrawLink(BaseModel):
id: str
- wallet: str
- title: str
- min_withdrawable: int
- max_withdrawable: int
- uses: int
- wait_time: int
- is_unique: bool
- unique_hash: str
- k1: str
- open_time: int
- used: int
- usescsv: str
- number: int
-
- @classmethod
- def from_row(cls, row: Row) -> "WithdrawLink":
- data = dict(row)
- data["is_unique"] = bool(data["is_unique"])
- data["number"] = 0
- return cls(**data)
+ wallet: str = Query(None)
+ title: str = Query(None)
+ min_withdrawable: int = Query(0)
+ max_withdrawable: int = Query(0)
+ uses: int = Query(0)
+ wait_time: int = Query(0)
+ is_unique: bool = Query(False)
+ unique_hash: str = Query(0)
+ k1: str = Query(None)
+ open_time: int = Query(0)
+ used: int = Query(0)
+ usescsv: str = Query(None)
+ number: int = Query(0)
@property
def is_spent(self) -> bool:
diff --git a/lnbits/extensions/withdraw/templates/withdraw/index.html b/lnbits/extensions/withdraw/templates/withdraw/index.html
index 3cdabb3ba..4cffbc383 100644
--- a/lnbits/extensions/withdraw/templates/withdraw/index.html
+++ b/lnbits/extensions/withdraw/templates/withdraw/index.html
@@ -150,14 +150,16 @@
dense
v-model.number="formDialog.data.min_withdrawable"
type="number"
- label="Min withdrawable (sat) *"
+ min="10"
+ label="Min withdrawable (sat, at least 10) *"
>