Browse Source

black

fee_issues
fiatjaf 5 years ago
parent
commit
7440602acd
  1. 58
      lnbits/__init__.py

58
lnbits/__init__.py

@ -53,25 +53,27 @@ def deletewallet():
return redirect(url_for("home")) return redirect(url_for("home"))
@app.route("/lnurl") @app.route("/lnurl")
def lnurl(): def lnurl():
lnurl = request.args.get("lightning") lnurl = request.args.get("lightning")
return render_template("lnurl.html", lnurl=lnurl) return render_template("lnurl.html", lnurl=lnurl)
@app.route("/lnurlwallet") @app.route("/lnurlwallet")
def lnurlwallet(): def lnurlwallet():
lnurl = Lnurl(request.args.get("lightning")) lnurl = Lnurl(request.args.get("lightning"))
r = requests.get(lnurl.url) r = requests.get(lnurl.url)
if not r.ok: if not r.ok:
return redirect(url_for('home')) return redirect(url_for("home"))
data = json.loads(r.text) data = json.loads(r.text)
if data.get('status') == 'ERROR': if data.get("status") == "ERROR":
return redirect(url_for('home')) return redirect(url_for("home"))
withdraw_res = LnurlWithdrawResponse(**data) withdraw_res = LnurlWithdrawResponse(**data)
invoice = WALLET.create_invoice(withdraw_res.max_sats, 'lnbits lnurl funding').json() invoice = WALLET.create_invoice(withdraw_res.max_sats, "lnbits lnurl funding").json()
payment_hash = invoice["payment_hash"] payment_hash = invoice["payment_hash"]
r = requests.get( r = requests.get(
@ -79,7 +81,7 @@ def lnurlwallet():
params={**withdraw_res.callback.query_params, **{"k1": withdraw_res.k1, "pr": invoice["pay_req"]}}, params={**withdraw_res.callback.query_params, **{"k1": withdraw_res.k1, "pr": invoice["pay_req"]}},
) )
if not r.ok: if not r.ok:
return redirect(url_for('home')) return redirect(url_for("home"))
data = json.loads(r.text) data = json.loads(r.text)
for i in range(10): for i in range(10):
@ -172,10 +174,16 @@ def wallet():
coalesce((SELECT inkey FROM wallets WHERE id = ?), ?) coalesce((SELECT inkey FROM wallets WHERE id = ?), ?)
) )
""", """,
(wallet_id, usr, (
wallet_id, wallet_name or DEFAULT_USER_WALLET_NAME, wallet_id,
wallet_id, uuid.uuid4().hex, usr,
wallet_id, uuid.uuid4().hex), wallet_id,
wallet_name or DEFAULT_USER_WALLET_NAME,
wallet_id,
uuid.uuid4().hex,
wallet_id,
uuid.uuid4().hex,
),
) )
# finally, get the wallet with balance and transactions # finally, get the wallet with balance and transactions
@ -192,7 +200,7 @@ def wallet():
FROM wallets FROM wallets
WHERE user = ? AND id = ? WHERE user = ? AND id = ?
""", """,
(FEE_RESERVE, usr, wallet_id), (1 - FEE_RESERVE, usr, wallet_id),
) )
transactions = db.fetchall("SELECT * FROM apipayments WHERE wallet = ? AND pending = 0", (wallet_id,)) transactions = db.fetchall("SELECT * FROM apipayments WHERE wallet = ? AND pending = 0", (wallet_id,))
@ -231,7 +239,7 @@ def api_invoices():
return jsonify({"ERROR": "NO KEY"}), 200 return jsonify({"ERROR": "NO KEY"}), 200
r = WALLET.create_invoice(postedjson["value"], postedjson["memo"]) r = WALLET.create_invoice(postedjson["value"], postedjson["memo"])
if not r.ok or r.json().get('error'): if not r.ok or r.json().get("error"):
return jsonify({"ERROR": "UNEXPECTED BACKEND ERROR"}), 500 return jsonify({"ERROR": "UNEXPECTED BACKEND ERROR"}), 500
data = r.json() data = r.json()
@ -294,7 +302,7 @@ def api_transactions():
else: else:
# actually send the payment # actually send the payment
r = WALLET.pay_invoice(data["payment_request"]) r = WALLET.pay_invoice(data["payment_request"])
if not r.ok or r.json().get('error'): if not r.ok or r.json().get("error"):
return jsonify({"ERROR": "UNEXPECTED PAYMENT ERROR"}), 500 return jsonify({"ERROR": "UNEXPECTED PAYMENT ERROR"}), 500
data = r.json() data = r.json()
@ -307,7 +315,7 @@ def api_transactions():
# payment went through, not pending anymore, save actual fees # payment went through, not pending anymore, save actual fees
db.execute( db.execute(
"UPDATE apipayments SET pending = 0, fee = ? WHERE payhash = ? AND wallet = ?", "UPDATE apipayments SET pending = 0, fee = ? WHERE payhash = ? AND wallet = ?",
(data["fee_msat"], invoice.payment_hash, wallet['id']), (data["fee_msat"], invoice.payment_hash, wallet["id"]),
) )
return jsonify({"PAID": "TRUE"}), 200 return jsonify({"PAID": "TRUE"}), 200
@ -336,7 +344,7 @@ def api_checkinvoice(payhash):
return jsonify({"PAID": "TRUE"}), 200 return jsonify({"PAID": "TRUE"}), 200
r = WALLET.get_invoice_status(payhash) r = WALLET.get_invoice_status(payhash)
if not r.ok or r.json().get('error'): if not r.ok or r.json().get("error"):
return jsonify({"PAID": "FALSE"}), 400 return jsonify({"PAID": "FALSE"}), 400
data = r.json() data = r.json()
@ -346,10 +354,12 @@ def api_checkinvoice(payhash):
db.execute("UPDATE apipayments SET pending = 0 WHERE payhash = ?", (payhash,)) db.execute("UPDATE apipayments SET pending = 0 WHERE payhash = ?", (payhash,))
return jsonify({"PAID": "TRUE"}), 200 return jsonify({"PAID": "TRUE"}), 200
@app.route("/v1/checkpending", methods=["POST"]) @app.route("/v1/checkpending", methods=["POST"])
def api_checkpending(): def api_checkpending():
with Database() as db: with Database() as db:
for pendingtx in db.fetchall(""" for pendingtx in db.fetchall(
"""
SELECT SELECT
payhash, payhash,
CASE CASE
@ -361,18 +371,20 @@ def api_checkpending():
WHERE time > strftime('%s', 'now') - 86400 WHERE time > strftime('%s', 'now') - 86400
AND pending = 1 AND pending = 1
AND (adminkey = ? OR inkey = ?) AND (adminkey = ? OR inkey = ?)
""", (request.headers["Grpc-Metadata-macaroon"], request.headers["Grpc-Metadata-macaroon"])): """,
payhash = pendingtx['payhash'] (request.headers["Grpc-Metadata-macaroon"], request.headers["Grpc-Metadata-macaroon"]),
kind = pendingtx['kind'] ):
payhash = pendingtx["payhash"]
kind = pendingtx["kind"]
if kind == 'send': if kind == "send":
status = WALLET.get_final_payment_status(payhash) status = WALLET.get_final_payment_status(payhash)
if status == 'complete': if status == "complete":
db.execute("UPDATE apipayments SET pending = 0 WHERE payhash = ?", (payhash,)) db.execute("UPDATE apipayments SET pending = 0 WHERE payhash = ?", (payhash,))
elif status == 'failed': elif status == "failed":
db.execute("DELETE FROM apipayments WHERE payhash = ?", (payhash,)) db.execute("DELETE FROM apipayments WHERE payhash = ?", (payhash,))
elif kind == 'recv': elif kind == "recv":
if WALLET.is_invoice_paid(payhash): if WALLET.is_invoice_paid(payhash):
db.execute("UPDATE apipayments SET pending = 0 WHERE payhash = ?", (payhash,)) db.execute("UPDATE apipayments SET pending = 0 WHERE payhash = ?", (payhash,))
return '' return ""

Loading…
Cancel
Save