From a9b6dd3d30711296a7d9134dc59caf6d5ccda154 Mon Sep 17 00:00:00 2001 From: ben Date: Wed, 21 Sep 2022 15:16:38 +0100 Subject: [PATCH] Broke, started added private/public key --- lnbits/extensions/cashu/crud.py | 26 +++++++++++++++++++++++--- lnbits/extensions/cashu/migrations.py | 5 +++-- lnbits/extensions/cashu/models.py | 3 ++- lnbits/extensions/cashu/views_api.py | 12 +++++++++++- 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/lnbits/extensions/cashu/crud.py b/lnbits/extensions/cashu/crud.py index ce83653fc..f50da111a 100644 --- a/lnbits/extensions/cashu/crud.py +++ b/lnbits/extensions/cashu/crud.py @@ -5,13 +5,20 @@ from lnbits.helpers import urlsafe_short_hash from . import db from .models import Cashu, Pegs +from embit import script +from embit import ec +from embit.networks import NETWORKS +from binascii import unhexlify, hexlify async def create_cashu(wallet_id: str, data: Cashu) -> Cashu: cashu_id = urlsafe_short_hash() + prv = ec.PrivateKey.from_wif(urlsafe_short_hash()) + pub = prv.get_public_key() + await db.execute( """ - INSERT INTO cashu.cashu (id, wallet, name, tickershort, fraction, maxsats, coins) - VALUES (?, ?, ?, ?, ?, ?, ?) + INSERT INTO cashu.cashu (id, wallet, name, tickershort, fraction, maxsats, coins, prvkey, pubkey) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) """, ( cashu_id, @@ -20,7 +27,9 @@ async def create_cashu(wallet_id: str, data: Cashu) -> Cashu: data.tickershort, data.fraction, data.maxsats, - data.coins + data.coins, + prv, + pub ), ) @@ -29,6 +38,17 @@ async def create_cashu(wallet_id: str, data: Cashu) -> Cashu: return cashu +async def update_cashu_keys(cashu_id, wif: str = None) -> Optional[Cashu]: + if not wif: + prv = ec.PrivateKey.from_wif(urlsafe_short_hash()) + else: + prv = ec.PrivateKey.from_wif(wif) + pub = prv.get_public_key() + await db.execute("UPDATE cashu.cashu SET prv = ?, pub = ? WHERE id = ?", (hexlify(prv.serialize()), hexlify(pub.serialize()), cashu_id)) + row = await db.fetchone("SELECT * FROM cashu.cashu WHERE id = ?", (cashu_id,)) + return Cashu(**row) if row else None + + async def get_cashu(cashu_id: str) -> Optional[Cashu]: row = await db.fetchone("SELECT * FROM cashu.cashu WHERE id = ?", (cashu_id,)) return Cashu(**row) if row else None diff --git a/lnbits/extensions/cashu/migrations.py b/lnbits/extensions/cashu/migrations.py index 95dc48152..534200624 100644 --- a/lnbits/extensions/cashu/migrations.py +++ b/lnbits/extensions/cashu/migrations.py @@ -11,8 +11,9 @@ async def m001_initial(db): tickershort TEXT NOT NULL, fraction BOOL, maxsats INT, - coins INT - + coins INT, + prvkey TEXT NOT NULL, + pubkey TEXT NOT NULL ); """ ) diff --git a/lnbits/extensions/cashu/models.py b/lnbits/extensions/cashu/models.py index 0de153622..892abdf10 100644 --- a/lnbits/extensions/cashu/models.py +++ b/lnbits/extensions/cashu/models.py @@ -13,7 +13,8 @@ class Cashu(BaseModel): fraction: bool = Query(None) maxsats: int = Query(0) coins: int = Query(0) - + prvkey: str = Query(None) + pubkey: str = Query(None) @classmethod def from_row(cls, row: Row) -> "TPoS": diff --git a/lnbits/extensions/cashu/views_api.py b/lnbits/extensions/cashu/views_api.py index 0b16e4bad..493839457 100644 --- a/lnbits/extensions/cashu/views_api.py +++ b/lnbits/extensions/cashu/views_api.py @@ -13,7 +13,7 @@ from lnbits.core.views.api import api_payment from lnbits.decorators import WalletTypeInfo, get_key_type, require_admin_key from . import cashu_ext -from .crud import create_cashu, delete_cashu, get_cashu, get_cashus +from .crud import create_cashu, delete_cashu, get_cashu, get_cashus, update_cashu_keys from .models import Cashu, Pegs, PayLnurlWData @@ -36,6 +36,16 @@ async def api_cashu_create( logger.debug(cashu) return cashu.dict() +@cashu_ext.post("/api/v1/cashus/upodatekeys", status_code=HTTPStatus.CREATED) +async def api_cashu_update_keys( + data: Cashu, wallet: WalletTypeInfo = Depends(get_key_type) +): + cashu = await get_cashu(data.id) + + cashu = await create_cashu(wallet_id=wallet.wallet.id, data=data) + logger.debug(cashu) + return cashu.dict() + @cashu_ext.delete("/api/v1/cashus/{cashu_id}") async def api_cashu_delete(