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) *" >