lnurlp: only send success_action when it exists.

This commit is contained in:
fiatjaf
2021-06-05 15:20:05 -03:00
parent 7412373f11
commit 5fbd1f08c4
2 changed files with 19 additions and 11 deletions

View File

@@ -95,10 +95,13 @@ async def api_lnurl_callback(link_id):
extra={"tag": "lnurlp", "link": link.id, "comment": comment},
)
resp = LnurlPayActionResponse(
pr=payment_request,
success_action=link.success_action(payment_hash),
routes=[],
)
resp = {
"routes": [],
"pr": payment_request,
}
return jsonify(resp.dict()), HTTPStatus.OK
success_action = link.success_action(payment_hash)
if success_action:
resp["success_action"] = success_action
return jsonify(), HTTPStatus.OK

View File

@@ -5,7 +5,6 @@ from typing import NamedTuple, Optional, Dict
from sqlite3 import Row
from lnurl import Lnurl, encode as lnurl_encode # type: ignore
from lnurl.types import LnurlPayMetadata # type: ignore
from lnurl.models import LnurlPaySuccessAction, MessageAction, UrlAction # type: ignore
class PayLink(NamedTuple):
@@ -36,15 +35,21 @@ class PayLink(NamedTuple):
def lnurlpay_metadata(self) -> LnurlPayMetadata:
return LnurlPayMetadata(json.dumps([["text/plain", self.description]]))
def success_action(self, payment_hash: str) -> Optional[LnurlPaySuccessAction]:
def success_action(self, payment_hash: str) -> Optional[Dict]:
if self.success_url:
url: ParseResult = urlparse(self.success_url)
qs: Dict = parse_qs(url.query)
qs["payment_hash"] = payment_hash
url = url._replace(query=urlencode(qs, doseq=True))
raw: str = urlunparse(url)
return UrlAction(url=raw, description=self.success_text)
return {
"tag": "url",
"description": self.success_text or "~",
"url": urlunparse(url),
}
elif self.success_text:
return MessageAction(message=self.success_text)
return {
"tag": "message",
"message": self.success_text,
}
else:
return None