From 10b8f90fccd46a8c0c286e243f8940b108740a19 Mon Sep 17 00:00:00 2001 From: Arc <33088785+arcbtc@users.noreply.github.com> Date: Sat, 18 Apr 2020 01:35:59 +0100 Subject: [PATCH] Update views_api.py --- lnbits/extensions/amilk/views_api.py | 52 ++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/lnbits/extensions/amilk/views_api.py b/lnbits/extensions/amilk/views_api.py index e3fe61040..2aaa29dfb 100644 --- a/lnbits/extensions/amilk/views_api.py +++ b/lnbits/extensions/amilk/views_api.py @@ -6,7 +6,14 @@ from lnbits.helpers import Status from lnbits.extensions.amilk import amilk_ext from .crud import create_amilk, get_amilk, get_amilks, delete_amilk +from lnbits.core.services import create_invoice +from flask import abort, redirect, request, url_for +from lnurl import LnurlWithdrawResponse, handle as handle_lnurl +from lnurl.exceptions import LnurlException +from time import sleep +import requests +from lnbits.settings import WALLET @amilk_ext.route("/api/v1/amilk", methods=["GET"]) @api_check_wallet_key("invoice") @@ -19,15 +26,54 @@ def api_amilks(): return jsonify([amilk._asdict() for amilk in get_amilks(wallet_ids)]), Status.OK +@amilk_ext.route("/api/v1/amilk/milk/", methods=["GET"]) +def api_amilkit(amilk_id): + milk = get_amilk(amilk_id) + memo = milk.id + + try: + withdraw_res = handle_lnurl(milk.lnurl, response_class=LnurlWithdrawResponse) + except LnurlException: + abort(Status.INTERNAL_SERVER_ERROR, "Could not process withdraw LNURL.") + print(withdraw_res.max_sats) + + + try: + checking_id, payment_request = create_invoice(wallet_id=milk.wallet, amount=withdraw_res.max_sats, memo=memo) + #print(payment_request) + except Exception as e: + error_message = False, str(e) + + r = requests.get( + withdraw_res.callback.base, + params={**withdraw_res.callback.query_params, **{"k1": withdraw_res.k1, "pr": payment_request}}, + ) + + if not r.ok: + + abort(Status.INTERNAL_SERVER_ERROR, "Could not process withdraw LNURL.") + + for i in range(10): + invoice_status = WALLET.get_invoice_status(checking_id) + sleep(i) + if not invoice_status.paid: + continue + else: + return jsonify({"paid": False}), Status.OK + break + + return jsonify({"paid": True}), Status.OK + + @amilk_ext.route("/api/v1/amilk", methods=["POST"]) @api_check_wallet_key("invoice") @api_validate_post_request(schema={ - "url": {"type": "string", "empty": False, "required": True}, - "memo": {"type": "string", "empty": False, "required": True}, + "lnurl": {"type": "string", "empty": False, "required": True}, + "atime": {"type": "integer", "min": 0, "required": True}, "amount": {"type": "integer", "min": 0, "required": True}, }) def api_amilk_create(): - amilk = create_amilk(wallet_id=g.wallet.id, **g.data) + amilk = create_amilk(wallet_id=g.wallet.id, lnurl=g.data["lnurl"], atime=g.data["atime"], amount=g.data["amount"]) return jsonify(amilk._asdict()), Status.CREATED