mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2024-11-20 10:39:59 +01:00
invoice gets undefined
This commit is contained in:
parent
d9aaae7872
commit
683f138f1b
@ -1,12 +1,26 @@
|
||||
from quart import Blueprint
|
||||
import asyncio
|
||||
|
||||
from fastapi import APIRouter
|
||||
|
||||
from lnbits.db import Database
|
||||
from lnbits.helpers import template_renderer
|
||||
from lnbits.tasks import catch_everything_and_restart
|
||||
|
||||
db = Database("ext_tpos")
|
||||
|
||||
tpos_ext: Blueprint = Blueprint(
|
||||
"tpos", __name__, static_folder="static", template_folder="templates"
|
||||
tpos_ext: APIRouter = APIRouter(
|
||||
prefix="/tpos",
|
||||
tags=["TPoS"]
|
||||
# "tpos", __name__, static_folder="static", template_folder="templates"
|
||||
)
|
||||
|
||||
def tpos_renderer():
|
||||
return template_renderer(
|
||||
[
|
||||
"lnbits/extensions/tpos/templates",
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
from .views_api import * # noqa
|
||||
from .views import * # noqa
|
||||
|
@ -3,17 +3,17 @@ from typing import List, Optional, Union
|
||||
from lnbits.helpers import urlsafe_short_hash
|
||||
|
||||
from . import db
|
||||
from .models import TPoS
|
||||
from .models import TPoS, CreateTposData
|
||||
|
||||
|
||||
async def create_tpos(*, wallet_id: str, name: str, currency: str) -> TPoS:
|
||||
async def create_tpos(wallet_id: str, data: CreateTposData) -> TPoS:
|
||||
tpos_id = urlsafe_short_hash()
|
||||
await db.execute(
|
||||
"""
|
||||
INSERT INTO tpos.tposs (id, wallet, name, currency)
|
||||
VALUES (?, ?, ?, ?)
|
||||
""",
|
||||
(tpos_id, wallet_id, name, currency),
|
||||
(tpos_id, wallet_id, data.name, data.currency),
|
||||
)
|
||||
|
||||
tpos = await get_tpos(tpos_id)
|
||||
|
@ -1,8 +1,13 @@
|
||||
from sqlite3 import Row
|
||||
from typing import NamedTuple
|
||||
from fastapi.param_functions import Query
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class TPoS(NamedTuple):
|
||||
class CreateTposData(BaseModel):
|
||||
name: str
|
||||
currency: str
|
||||
|
||||
class TPoS(BaseModel):
|
||||
id: str
|
||||
wallet: str
|
||||
name: str
|
||||
|
@ -354,7 +354,7 @@
|
||||
LNbits.api
|
||||
.request(
|
||||
'GET',
|
||||
'/tpos/api/v1/tposs?all_wallets',
|
||||
'/tpos/api/v1/tposs?all_wallets=true',
|
||||
this.g.user.wallets[0].inkey
|
||||
)
|
||||
.then(function (response) {
|
||||
|
@ -188,6 +188,7 @@
|
||||
return Math.ceil((this.amount / this.exchangeRate) * 100000000)
|
||||
},
|
||||
fsat: function () {
|
||||
console.log('sat', this.sat, LNbits.utils.formatSat(this.sat))
|
||||
return LNbits.utils.formatSat(this.sat)
|
||||
}
|
||||
},
|
||||
@ -203,12 +204,16 @@
|
||||
showInvoice: function () {
|
||||
var self = this
|
||||
var dialog = this.invoiceDialog
|
||||
|
||||
console.log(this.sat, this.tposId)
|
||||
axios
|
||||
.post('/tpos/api/v1/tposs/' + this.tposId + '/invoices/', {
|
||||
amount: this.sat
|
||||
})
|
||||
.post(
|
||||
'/tpos/api/v1/tposs/' + this.tposId + '/invoices',
|
||||
JSON.stringify({
|
||||
amount: this.sat
|
||||
})
|
||||
)
|
||||
.then(function (response) {
|
||||
console.log(response.data)
|
||||
dialog.data = response.data
|
||||
dialog.show = true
|
||||
|
||||
|
@ -1,23 +1,33 @@
|
||||
from quart import g, abort, render_template
|
||||
from starlette.exceptions import HTTPException
|
||||
from starlette.responses import HTMLResponse
|
||||
from lnbits.core.models import User
|
||||
from lnbits.core.crud import get_wallet
|
||||
from lnbits.decorators import check_user_exists
|
||||
from http import HTTPStatus
|
||||
|
||||
from lnbits.decorators import check_user_exists, validate_uuids
|
||||
|
||||
from . import tpos_ext
|
||||
from . import tpos_ext, tpos_renderer
|
||||
from .crud import get_tpos
|
||||
from fastapi import FastAPI, Request
|
||||
from fastapi.params import Depends
|
||||
from fastapi.templating import Jinja2Templates
|
||||
|
||||
templates = Jinja2Templates(directory="templates")
|
||||
|
||||
@tpos_ext.get("/", response_class=HTMLResponse)
|
||||
# @validate_uuids(["usr"], required=True)
|
||||
# @check_user_exists()
|
||||
async def index(request: Request, user: User = Depends(check_user_exists)):
|
||||
return tpos_renderer().TemplateResponse("tpos/index.html", {"request": request,"user": user.dict()})
|
||||
|
||||
|
||||
@tpos_ext.route("/")
|
||||
@validate_uuids(["usr"], required=True)
|
||||
@check_user_exists()
|
||||
async def index():
|
||||
return await render_template("tpos/index.html", user=g.user)
|
||||
|
||||
|
||||
@tpos_ext.route("/<tpos_id>")
|
||||
async def tpos(tpos_id):
|
||||
@tpos_ext.get("/{tpos_id}")
|
||||
async def tpos(request: Request, tpos_id):
|
||||
tpos = await get_tpos(tpos_id)
|
||||
if not tpos:
|
||||
abort(HTTPStatus.NOT_FOUND, "TPoS does not exist.")
|
||||
raise HTTPException(
|
||||
status_code=HTTPStatus.NOT_FOUND,
|
||||
detail="TPoS does not exist."
|
||||
)
|
||||
# abort(HTTPStatus.NOT_FOUND, "TPoS does not exist.")
|
||||
|
||||
return await render_template("tpos/tpos.html", tpos=tpos)
|
||||
return tpos_renderer().TemplateResponse("tpos/tpos.html", {"request": request, "tpos": tpos})
|
||||
|
@ -1,101 +1,115 @@
|
||||
from quart import g, jsonify, request
|
||||
from http import HTTPStatus
|
||||
|
||||
from fastapi import Query
|
||||
from fastapi.params import Depends
|
||||
|
||||
from pydantic import BaseModel
|
||||
from starlette.exceptions import HTTPException
|
||||
from starlette.requests import Request
|
||||
from starlette.responses import HTMLResponse, JSONResponse # type: ignore
|
||||
|
||||
from lnbits.core.crud import get_user, get_wallet
|
||||
from lnbits.core.services import create_invoice, check_invoice_status
|
||||
from lnbits.decorators import api_check_wallet_key, api_validate_post_request
|
||||
from lnbits.decorators import WalletTypeInfo, get_key_type
|
||||
|
||||
from . import tpos_ext
|
||||
from .crud import create_tpos, get_tpos, get_tposs, delete_tpos
|
||||
from .models import TPoS, CreateTposData
|
||||
|
||||
|
||||
@tpos_ext.route("/api/v1/tposs", methods=["GET"])
|
||||
@api_check_wallet_key("invoice")
|
||||
async def api_tposs():
|
||||
wallet_ids = [g.wallet.id]
|
||||
if "all_wallets" in request.args:
|
||||
wallet_ids = (await get_user(g.wallet.user)).wallet_ids
|
||||
@tpos_ext.get("/api/v1/tposs", status_code=HTTPStatus.OK)
|
||||
async def api_tposs(
|
||||
all_wallets: bool = Query(None),
|
||||
wallet: WalletTypeInfo = Depends(get_key_type)
|
||||
):
|
||||
wallet_ids = [wallet.wallet.id]
|
||||
if all_wallets:
|
||||
wallet_ids = (await get_user(wallet.wallet.user)).wallet_ids
|
||||
|
||||
return (
|
||||
jsonify([tpos._asdict() for tpos in await get_tposs(wallet_ids)]),
|
||||
HTTPStatus.OK,
|
||||
)
|
||||
return [tpos.dict() for tpos in await get_tposs(wallet_ids)]
|
||||
|
||||
|
||||
@tpos_ext.route("/api/v1/tposs", methods=["POST"])
|
||||
@api_check_wallet_key("invoice")
|
||||
@api_validate_post_request(
|
||||
schema={
|
||||
"name": {"type": "string", "empty": False, "required": True},
|
||||
"currency": {"type": "string", "empty": False, "required": True},
|
||||
}
|
||||
)
|
||||
async def api_tpos_create():
|
||||
tpos = await create_tpos(wallet_id=g.wallet.id, **g.data)
|
||||
return jsonify(tpos._asdict()), HTTPStatus.CREATED
|
||||
@tpos_ext.post("/api/v1/tposs", status_code=HTTPStatus.CREATED)
|
||||
async def api_tpos_create(data: CreateTposData, wallet: WalletTypeInfo = Depends(get_key_type)):
|
||||
tpos = await create_tpos(wallet_id=wallet.wallet.id, data=data)
|
||||
return tpos.dict()
|
||||
|
||||
|
||||
@tpos_ext.route("/api/v1/tposs/<tpos_id>", methods=["DELETE"])
|
||||
@api_check_wallet_key("admin")
|
||||
async def api_tpos_delete(tpos_id):
|
||||
@tpos_ext.delete("/api/v1/tposs/{tpos_id}")
|
||||
async def api_tpos_delete(tpos_id: str, wallet: WalletTypeInfo = Depends(get_key_type)):
|
||||
tpos = await get_tpos(tpos_id)
|
||||
|
||||
if not tpos:
|
||||
return jsonify({"message": "TPoS does not exist."}), HTTPStatus.NOT_FOUND
|
||||
raise HTTPException(
|
||||
status_code=HTTPStatus.NOT_FOUND,
|
||||
detail="TPoS does not exist."
|
||||
)
|
||||
# return {"message": "TPoS does not exist."}, HTTPStatus.NOT_FOUND
|
||||
|
||||
if tpos.wallet != g.wallet.id:
|
||||
return jsonify({"message": "Not your TPoS."}), HTTPStatus.FORBIDDEN
|
||||
if tpos.wallet != wallet.wallet.id:
|
||||
raise HTTPException(
|
||||
status_code=HTTPStatus.FORBIDDEN,
|
||||
detail="Not your TPoS."
|
||||
)
|
||||
# return {"message": "Not your TPoS."}, HTTPStatus.FORBIDDEN
|
||||
|
||||
await delete_tpos(tpos_id)
|
||||
|
||||
return "", HTTPStatus.NO_CONTENT
|
||||
raise HTTPException(status_code=HTTPStatus.NO_CONTENT)
|
||||
# return "", HTTPStatus.NO_CONTENT
|
||||
|
||||
|
||||
@tpos_ext.route("/api/v1/tposs/<tpos_id>/invoices/", methods=["POST"])
|
||||
@api_validate_post_request(
|
||||
schema={"amount": {"type": "integer", "min": 1, "required": True}}
|
||||
)
|
||||
async def api_tpos_create_invoice(tpos_id):
|
||||
@tpos_ext.post("/api/v1/tposs/{tpos_id}/invoices", status_code=HTTPStatus.CREATED)
|
||||
async def api_tpos_create_invoice(amount: int = Query(..., ge=1), tpos_id: str = None):
|
||||
print("TPOS", tpos_id, amount)
|
||||
tpos = await get_tpos(tpos_id)
|
||||
|
||||
if not tpos:
|
||||
return jsonify({"message": "TPoS does not exist."}), HTTPStatus.NOT_FOUND
|
||||
raise HTTPException(
|
||||
status_code=HTTPStatus.NOT_FOUND,
|
||||
detail="TPoS does not exist."
|
||||
)
|
||||
# return {"message": "TPoS does not exist."}, HTTPStatus.NOT_FOUND
|
||||
|
||||
try:
|
||||
payment_hash, payment_request = await create_invoice(
|
||||
wallet_id=tpos.wallet,
|
||||
amount=g.data["amount"],
|
||||
amount=amount,
|
||||
memo=f"{tpos.name}",
|
||||
extra={"tag": "tpos"},
|
||||
)
|
||||
except Exception as e:
|
||||
return jsonify({"message": str(e)}), HTTPStatus.INTERNAL_SERVER_ERROR
|
||||
|
||||
return (
|
||||
jsonify({"payment_hash": payment_hash, "payment_request": payment_request}),
|
||||
HTTPStatus.CREATED,
|
||||
)
|
||||
print("ERROR", e)
|
||||
raise HTTPException(
|
||||
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
|
||||
detail=str(e)
|
||||
)
|
||||
# return {"message": str(e)}, HTTPStatus.INTERNAL_SERVER_ERROR
|
||||
print("INV", payment_hash)
|
||||
return {"payment_hash": payment_hash, "payment_request": payment_request}
|
||||
|
||||
|
||||
@tpos_ext.route("/api/v1/tposs/<tpos_id>/invoices/<payment_hash>", methods=["GET"])
|
||||
async def api_tpos_check_invoice(tpos_id, payment_hash):
|
||||
@tpos_ext.get("/api/v1/tposs/{tpos_id}/invoices/{payment_hash}", status_code=HTTPStatus.OK)
|
||||
async def api_tpos_check_invoice(tpos_id: str, payment_hash: str):
|
||||
tpos = await get_tpos(tpos_id)
|
||||
|
||||
if not tpos:
|
||||
return jsonify({"message": "TPoS does not exist."}), HTTPStatus.NOT_FOUND
|
||||
raise HTTPException(
|
||||
status_code=HTTPStatus.NOT_FOUND,
|
||||
detail="TPoS does not exist."
|
||||
)
|
||||
# return {"message": "TPoS does not exist."}, HTTPStatus.NOT_FOUND
|
||||
|
||||
try:
|
||||
status = await check_invoice_status(tpos.wallet, payment_hash)
|
||||
is_paid = not status.pending
|
||||
except Exception as exc:
|
||||
print(exc)
|
||||
return jsonify({"paid": False}), HTTPStatus.OK
|
||||
return {"paid": False}
|
||||
|
||||
if is_paid:
|
||||
wallet = await get_wallet(tpos.wallet)
|
||||
payment = await wallet.get_payment(payment_hash)
|
||||
await payment.set_pending(False)
|
||||
|
||||
return jsonify({"paid": True}), HTTPStatus.OK
|
||||
return {"paid": True}
|
||||
|
||||
return jsonify({"paid": False}), HTTPStatus.OK
|
||||
return {"paid": False}
|
||||
|
Loading…
Reference in New Issue
Block a user