Browse Source

fix perform_lnurl error handling.

livestream
fiatjaf 4 years ago
parent
commit
bb94dc6526
  1. 12
      lnbits/core/services.py
  2. 16
      lnbits/core/static/js/wallet.js
  3. 9
      lnbits/core/views/api.py

12
lnbits/core/services.py

@ -5,8 +5,8 @@ from binascii import unhexlify
from typing import Optional, Tuple, Dict from typing import Optional, Tuple, Dict
from urllib.parse import urlparse, parse_qs from urllib.parse import urlparse, parse_qs
from quart import g from quart import g
from lnurl import LnurlWithdrawResponse # type: ignore
from ecdsa.util import sigencode_der # type: ignore from ecdsa.util import sigencode_der # type: ignore
from lnurl import LnurlErrorResponse, LnurlWithdrawResponse # type: ignore
try: try:
from typing import TypedDict # type: ignore from typing import TypedDict # type: ignore
@ -159,7 +159,7 @@ async def redeem_lnurl_withdraw(wallet_id: str, res: LnurlWithdrawResponse, memo
) )
async def perform_lnurlauth(callback: str): async def perform_lnurlauth(callback: str) -> Optional[LnurlErrorResponse]:
k1 = unhexlify(parse_qs(urlparse(callback).query)["k1"][0]) k1 = unhexlify(parse_qs(urlparse(callback).query)["k1"][0])
key = g.wallet.lnurlauth_key key = g.wallet.lnurlauth_key
sig = key.sign_digest_deterministic(k1, sigencode=sigencode_der) sig = key.sign_digest_deterministic(k1, sigencode=sigencode_der)
@ -178,11 +178,11 @@ async def perform_lnurlauth(callback: str):
if resp["status"] == "OK": if resp["status"] == "OK":
return None return None
return resp["reason"] return LnurlErrorResponse(reason=resp["reason"])
except (KeyError, json.decoder.JSONDecodeError): except (KeyError, json.decoder.JSONDecodeError):
return r.text[:200] + "..." if len(r.text) > 200 else r.text return LnurlErrorResponse(
reason=r.text[:200] + "..." if len(r.text) > 200 else r.text,
return None )
def check_invoice_status(wallet_id: str, payment_hash: str) -> PaymentStatus: def check_invoice_status(wallet_id: str, payment_hash: str) -> PaymentStatus:

16
lnbits/core/static/js/wallet.js

@ -565,12 +565,16 @@ new Vue({
}) })
.catch(err => { .catch(err => {
dismissAuthMsg() dismissAuthMsg()
this.$q.notify({ if (err.response.data.reason) {
message: `Authentication failed. ${this.parse.lnurlauth.domain} says:`, this.$q.notify({
caption: err.response.data.message, message: `Authentication failed. ${this.parse.lnurlauth.domain} says:`,
type: 'warning', caption: err.response.data.reason,
timeout: 5000 type: 'warning',
}) timeout: 5000
})
} else {
LNbits.utils.notifyApiError(err)
}
}) })
}, },
deleteWallet: function (walletId, user) { deleteWallet: function (walletId, user) {

9
lnbits/core/views/api.py

@ -367,8 +367,7 @@ async def api_lnurlscan(code: str):
} }
) )
async def api_perform_lnurlauth(): async def api_perform_lnurlauth():
try: err = await perform_lnurlauth(g.data["callback"])
await perform_lnurlauth(g.data["callback"]) if err:
return "", HTTPStatus.OK return jsonify({"reason": err.reason}), HTTPStatus.SERVICE_UNAVAILABLE
except Exception as exc: return "", HTTPStatus.OK
return jsonify({"message": str(exc)}), HTTPStatus.SERVICE_UNAVAILABLE

Loading…
Cancel
Save