lnbits-legend/lnbits/extensions/lnurlp/models.py

51 lines
1.6 KiB
Python
Raw Normal View History

2020-08-28 23:03:12 -03:00
import json
from urllib.parse import urlparse, urlunparse, parse_qs, urlencode, ParseResult
from quart import url_for
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
2020-08-28 23:03:12 -03:00
class PayLink(NamedTuple):
2020-09-27 23:12:55 -03:00
id: int
2020-08-28 23:03:12 -03:00
wallet: str
description: str
min: int
2020-08-28 23:03:12 -03:00
served_meta: int
served_pr: int
2020-09-27 23:12:55 -03:00
webhook_url: str
success_text: str
success_url: str
currency: str
comment_chars: int
max: int
2020-08-28 23:03:12 -03:00
@classmethod
def from_row(cls, row: Row) -> "PayLink":
data = dict(row)
return cls(**data)
@property
def lnurl(self) -> Lnurl:
url = url_for("lnurlp.api_lnurl_response", link_id=self.id, _external=True)
2020-08-28 23:03:12 -03:00
return lnurl_encode(url)
@property
def lnurlpay_metadata(self) -> LnurlPayMetadata:
return LnurlPayMetadata(json.dumps([["text/plain", self.description]]))
2020-09-27 23:12:55 -03:00
def success_action(self, payment_hash: str) -> Optional[LnurlPaySuccessAction]:
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)
elif self.success_text:
return MessageAction(message=self.success_text)
else:
return None