fix: main page and creating a user and a wallet

The wallet page will still not renders correctly, but the backend does
create the user his first wallet.
This commit is contained in:
Stefan Stammberger 2021-08-24 21:23:18 +02:00
parent de4d3b012c
commit f119053953
No known key found for this signature in database
GPG key ID: 645FA807E935D9D5
3 changed files with 47 additions and 49 deletions

View file

@ -54,20 +54,14 @@ async def get_user(user_id: str, conn: Optional[Connection] = None) -> Optional[
""",
(user_id,),
)
else:
return None
return (
User(
**{
**user,
**{
"extensions": [e[0] for e in extensions],
"wallets": [Wallet(**w) for w in wallets],
},
}
)
if user
else None
)
return User(
id = user['id'],
email = user['email'],
extensions = [e[0] for e in extensions],
wallets = [Wallet(**w) for w in wallets])
async def update_user_extension(

View file

@ -10,22 +10,6 @@ from pydantic import BaseModel
from lnbits.settings import WALLET
class User(BaseModel):
id: str
email: str
extensions: List[str] = []
wallets: List["Wallet"] = []
password: Optional[str] = None
@property
def wallet_ids(self) -> List[str]:
return [wallet.id for wallet in self.wallets]
def get_wallet(self, wallet_id: str) -> Optional["Wallet"]:
w = [wallet for wallet in self.wallets if wallet.id == wallet_id]
return w[0] if w else None
class Wallet(BaseModel):
id: str
name: str
@ -73,6 +57,22 @@ class Wallet(BaseModel):
return await get_wallet_payment(self.id, payment_hash)
class User(BaseModel):
id: str
email: Optional[str] = None
extensions: List[str] = []
wallets: List[Wallet] = []
password: Optional[str] = None
@property
def wallet_ids(self) -> List[str]:
return [wallet.id for wallet in self.wallets]
def get_wallet(self, wallet_id: str) -> Optional["Wallet"]:
w = [wallet for wallet in self.wallets if wallet.id == wallet_id]
return w[0] if w else None
class Payment(BaseModel):
checking_id: str
pending: bool

View file

@ -1,5 +1,8 @@
from lnbits.core.models import Wallet
from fastapi.params import Query
from fastapi.routing import APIRouter
from fastapi.responses import RedirectResponse
from fastapi import status
from lnbits.requestvars import g
from os import path
from http import HTTPStatus
@ -60,11 +63,15 @@ async def extensions(enable: str, disable: str):
return await templates.TemplateResponse("core/extensions.html", {"request": request, "user": get_user(g.user.id)})
@core_html_routes.get("/wallet")
@core_html_routes.get("/wallet", response_class=HTMLResponse)
#Not sure how to validate
@validate_uuids(["usr", "wal"])
async def wallet(request: Request, usr: Optional[str] = Query(None),
wal: Optional[str]=Query(None, description=""), nme: Optional[str]=Query(None)):
async def wallet(request: Request,
usr: Optional[str] = Query(None),
wal: Optional[str] = Query(None),
nme: Optional[str] = Query(None),
):
user_id = usr
wallet_id = wal
wallet_name = nme
@ -77,30 +84,27 @@ async def wallet(request: Request, usr: Optional[str] = Query(None),
# nothing: create everything
if not user_id:
user = await get_user((await create_account()).id)
usr = await get_user((await create_account()).id)
else:
user = await get_user(user_id)
if not user:
abort(HTTPStatus.NOT_FOUND, "User does not exist.")
return
usr = await get_user(user_id)
if not usr:
return g().templates.TemplateResponse("error.html", {"request": request, "err": "User does not exist."})
if LNBITS_ALLOWED_USERS and user_id not in LNBITS_ALLOWED_USERS:
abort(HTTPStatus.UNAUTHORIZED, "User not authorized.")
return g().templates.TemplateResponse("error.html", {"request": request, "err": "User not authorized."})
if not wallet_id:
if user.wallets and not wallet_name:
wallet = user.wallets[0]
if usr.wallets and not wallet_name:
wal = usr.wallets[0]
else:
wallet = await create_wallet(user_id=user.id, wallet_name=wallet_name)
wal = await create_wallet(user_id=usr.id, wallet_name=wallet_name)
return redirect(url_for("core.wallet", usr=user.id, wal=wallet.id))
return RedirectResponse(f"/wallet?usr={usr.id}&wal={wal.id}", status_code=status.HTTP_307_TEMPORARY_REDIRECT)
wallet = user.get_wallet(wallet_id)
if not wallet:
abort(HTTPStatus.FORBIDDEN, "Not your wallet.")
wal = usr.get_wallet(wallet_id)
if not wal:
return g().templates.TemplateResponse("error.html", {"request": request, ...})
return await templates.TemplateResponse(
"core/wallet.html", {"request":request,"user":user, "wallet":wallet, "service_fee":service_fee}
return g().templates.TemplateResponse(
"core/wallet.html", {"request":request,"user":usr, "wallet":wal, "service_fee":service_fee}
)