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

84 lines
1.8 KiB
Python
Raw Normal View History

2023-01-05 12:27:43 +01:00
import json
2022-08-22 23:29:42 +01:00
from sqlite3 import Row
2023-01-05 12:27:43 +01:00
from fastapi import Query, Request
2022-08-22 23:29:42 +01:00
from lnurl import Lnurl
2023-01-05 12:27:43 +01:00
from lnurl import encode as lnurl_encode
from lnurl.types import LnurlPayMetadata
2022-08-22 23:29:42 +01:00
from pydantic import BaseModel
2022-07-15 16:43:06 +02:00
2022-08-14 23:52:55 +02:00
ZERO_KEY = "00000000000000000000000000000000"
2022-06-13 21:08:06 +02:00
class Card(BaseModel):
id: str
wallet: str
card_name: str
uid: str
2022-08-29 14:51:18 -06:00
external_id: str
2022-06-13 21:08:06 +02:00
counter: int
2022-08-22 22:33:20 +01:00
tx_limit: int
daily_limit: int
2022-08-28 10:58:17 +01:00
enable: bool
2022-08-14 23:52:55 +02:00
k0: str
k1: str
k2: str
prev_k0: str
prev_k1: str
prev_k2: str
otp: str
2022-06-13 21:08:06 +02:00
time: int
2023-01-05 12:27:43 +01:00
@classmethod
2022-08-22 22:33:20 +01:00
def from_row(cls, row: Row) -> "Card":
return cls(**dict(row))
def lnurl(self, req: Request) -> Lnurl:
2022-08-29 14:18:18 +01:00
url = req.url_for("boltcard.lnurl_response", device_id=self.id, _external=True)
2022-08-22 22:33:20 +01:00
return lnurl_encode(url)
async def lnurlpay_metadata(self) -> LnurlPayMetadata:
2023-01-05 12:27:43 +01:00
return LnurlPayMetadata(json.dumps([["text/plain", self.card_name]]))
2022-07-15 16:43:06 +02:00
2022-08-29 14:18:18 +01:00
2022-06-13 21:08:06 +02:00
class CreateCardData(BaseModel):
card_name: str = Query(...)
uid: str = Query(...)
2022-08-14 23:52:55 +02:00
counter: int = Query(0)
2022-08-22 22:33:20 +01:00
tx_limit: int = Query(0)
daily_limit: int = Query(0)
2022-08-28 11:05:26 +01:00
enable: bool = Query(True)
2022-08-14 23:52:55 +02:00
k0: str = Query(ZERO_KEY)
k1: str = Query(ZERO_KEY)
k2: str = Query(ZERO_KEY)
prev_k0: str = Query(ZERO_KEY)
prev_k1: str = Query(ZERO_KEY)
prev_k2: str = Query(ZERO_KEY)
2022-06-21 18:03:20 +02:00
2022-08-29 14:18:18 +01:00
2022-06-21 18:03:20 +02:00
class Hit(BaseModel):
id: str
card_id: str
ip: str
2022-08-22 22:33:20 +01:00
spent: bool
2022-06-21 18:03:20 +02:00
useragent: str
old_ctr: int
new_ctr: int
2022-08-26 19:22:03 +01:00
amount: int
2022-06-21 18:03:20 +02:00
time: int
2022-08-22 22:33:20 +01:00
2023-01-05 12:27:43 +01:00
@classmethod
2022-08-22 23:29:42 +01:00
def from_row(cls, row: Row) -> "Hit":
return cls(**dict(row))
2022-08-29 14:18:18 +01:00
2022-08-22 22:33:20 +01:00
class Refund(BaseModel):
id: str
hit_id: str
refund_amount: int
2022-08-22 23:29:42 +01:00
time: int
2023-01-05 12:27:43 +01:00
@classmethod
2022-08-22 23:29:42 +01:00
def from_row(cls, row: Row) -> "Refund":
2022-08-29 14:18:18 +01:00
return cls(**dict(row))