Browse Source

Fixed LNticket extension

LNURLwalletsupport
arcbtc 5 years ago
parent
commit
0603e525ff
  1. 0
      lnbits/extensions/lnticket/config.json
  2. 33
      lnbits/extensions/lnticket/crud.py
  3. 1
      lnbits/extensions/lnticket/migrations.py
  4. 1
      lnbits/extensions/lnticket/models.py
  5. 29
      lnbits/extensions/lnticket/templates/lnticket/display.html
  6. 49
      lnbits/extensions/lnticket/views_api.py

0
lnbits/extensions/lnticket/config.json.example → lnbits/extensions/lnticket/config.json

33
lnbits/extensions/lnticket/crud.py

@ -10,28 +10,43 @@ from .models import Tickets, Forms
#######TICKETS######## #######TICKETS########
def create_ticket(checking_id: str, wallet: str, form: str, name: str, email: str, ltext: str, sats: int) -> Tickets:
with open_ext_db("lnticket") as db:
db.execute(
"""
INSERT INTO tickets (id, paid, form, email, ltext, name, wallet, sats)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
""",
(checking_id, False, form, email, ltext, name, wallet, sats),
)
return get_ticket(checking_id)
def create_ticket(wallet: str, form: str, name: str, email: str, ltext: str, sats: int) -> Tickets: def update_ticket(paid: bool, checking_id: str) -> Tickets:
formdata = get_form(form)
amount = formdata.amountmade + sats
with open_ext_db("lnticket") as db: with open_ext_db("lnticket") as db:
ticket_id = urlsafe_short_hash() row = db.fetchone("SELECT * FROM tickets WHERE id = ?", (checking_id,))
if row[1] == True:
return get_ticket(checking_id)
db.execute( db.execute(
""" """
INSERT INTO tickets (id, form, email, ltext, name, wallet, sats) UPDATE tickets
VALUES (?, ?, ?, ?, ?, ?, ?) SET paid = ?
WHERE id = ?
""", """,
(ticket_id, form, email, ltext, name, wallet, sats), (paid, checking_id),
) )
formdata = get_form(row[2])
amount = formdata.amountmade + row[7]
db.execute( db.execute(
""" """
UPDATE forms UPDATE forms
SET amountmade = ? SET amountmade = ?
WHERE id = ? WHERE id = ?
""", """,
(amount, form), (amount, row[2]),
) )
return get_ticket(ticket_id) return get_ticket(checking_id)
def get_ticket(ticket_id: str) -> Optional[Tickets]: def get_ticket(ticket_id: str) -> Optional[Tickets]:

1
lnbits/extensions/lnticket/migrations.py

@ -20,6 +20,7 @@ def m001_initial(db):
""" """
CREATE TABLE IF NOT EXISTS tickets ( CREATE TABLE IF NOT EXISTS tickets (
id TEXT PRIMARY KEY, id TEXT PRIMARY KEY,
paid BOOLEAN NOT NULL,
form TEXT NOT NULL, form TEXT NOT NULL,
email TEXT NOT NULL, email TEXT NOT NULL,
ltext TEXT NOT NULL, ltext TEXT NOT NULL,

1
lnbits/extensions/lnticket/models.py

@ -13,6 +13,7 @@ class Forms(NamedTuple):
class Tickets(NamedTuple): class Tickets(NamedTuple):
id: str id: str
paid: bool
form: str form: str
email: str email: str
ltext: str ltext: str

29
lnbits/extensions/lnticket/templates/lnticket/display.html

@ -138,14 +138,18 @@
Invoice: function () { Invoice: function () {
var self = this var self = this
axios axios
.post(
.get(
'/lnticket/api/v1/tickets/' + '/lnticket/api/v1/tickets/' +
'{{ form_id }}' + '{{ form_id }}/' +
'/' + self.formDialog.data.sats,
self.formDialog.data.sats {
form: '{{ form_id }}',
name: self.formDialog.data.name,
email: self.formDialog.data.email,
ltext: self.formDialog.data.text,
sats: self.formDialog.data.sats
}
) )
.then(function (response) { .then(function (response) {
self.paymentReq = response.data.payment_request self.paymentReq = response.data.payment_request
self.paymentCheck = response.data.checking_id self.paymentCheck = response.data.checking_id
@ -160,21 +164,10 @@
status: 'pending', status: 'pending',
paymentReq: self.paymentReq paymentReq: self.paymentReq
} }
if (self.formDialog.data.email == '') {
daemail = 'null'
} else {
daemail = self.formDialog.data.email
}
paymentChecker = setInterval(function () { paymentChecker = setInterval(function () {
axios axios
.post('/lnticket/api/v1/tickets/' + self.paymentCheck, { .get('/lnticket/api/v1/tickets/' + self.paymentCheck)
form: '{{ form_id }}',
name: self.formDialog.data.name,
email: daemail,
ltext: self.formDialog.data.text,
sats: self.formDialog.data.sats
})
.then(function (res) { .then(function (res) {
if (res.data.paid) { if (res.data.paid) {
clearInterval(paymentChecker) clearInterval(paymentChecker)

49
lnbits/extensions/lnticket/views_api.py

@ -7,7 +7,7 @@ from lnbits.decorators import api_check_wallet_key, api_validate_post_request
from lnbits.settings import WALLET from lnbits.settings import WALLET
from lnbits.extensions.lnticket import lnticket_ext from lnbits.extensions.lnticket import lnticket_ext
from .crud import create_ticket, get_ticket, get_tickets, delete_ticket, create_form, update_form, get_form, get_forms, delete_form from .crud import create_ticket, update_ticket, get_ticket, get_tickets, delete_ticket, create_form, update_form, get_form, get_forms, delete_form
#########FORMS########## #########FORMS##########
@ -82,51 +82,56 @@ def api_tickets():
return jsonify([form._asdict() for form in get_tickets(wallet_ids)]), HTTPStatus.OK return jsonify([form._asdict() for form in get_tickets(wallet_ids)]), HTTPStatus.OK
@lnticket_ext.route("/api/v1/tickets/<form_id>/<sats>", methods=["GET"]) @lnticket_ext.route("/api/v1/tickets/<form_id>/<sats>", methods=["POST"])
def api_ticket_create(form_id, sats): @api_validate_post_request(
form = get_form(form_id) schema={
"form": {"type": "string", "empty": False, "required": True},
"name": {"type": "string", "empty": False, "required": True},
"email": {"type": "string", "empty": False, "required": True},
"ltext": {"type": "string", "empty": False, "required": True},
"sats": {"type": "integer", "min": 0, "required": True}
})
def api_ticket_make_ticket(form_id, sats):
event = get_form(form_id)
if not event:
return jsonify({"message": "LNTicket does not exist."}), HTTPStatus.NOT_FOUND
try: try:
checking_id, payment_request = create_invoice( checking_id, payment_request = create_invoice(
wallet_id=form.wallet, amount=int(sats), memo=f"#lnticket {form_id}" wallet_id=event.wallet, amount=int(sats), memo=f"#lnticket {form_id}"
) )
except Exception as e: except Exception as e:
return jsonify({"message": str(e)}), HTTPStatus.INTERNAL_SERVER_ERROR return jsonify({"message": str(e)}), HTTPStatus.INTERNAL_SERVER_ERROR
return jsonify({"checking_id": checking_id, "payment_request": payment_request}), HTTPStatus.OK ticket = create_ticket(checking_id=checking_id, wallet=event.wallet, **g.data)
if not ticket:
return jsonify({"message": "LNTicket could not be fetched."}), HTTPStatus.NOT_FOUND
return jsonify({"checking_id": checking_id, "payment_request": payment_request}), HTTPStatus.OK
@lnticket_ext.route("/api/v1/tickets/<checking_id>", methods=["POST"])
@api_validate_post_request(
schema={
"form": {"type": "string", "empty": False, "required": True},
"name": {"type": "string", "empty": False, "required": True},
"email": {"type": "string", "empty": False, "required": True},
"ltext": {"type": "string", "empty": False, "required": True},
"sats": {"type": "integer", "min": 0, "required": True}
})
def api_ticket_send_ticket(checking_id):
form = get_form(g.data['form']) @lnticket_ext.route("/api/v1/tickets/<checking_id>", methods=["GET"])
if not form: def api_ticket_send_ticket(checking_id):
return jsonify({"message": "LNTicket does not exist."}), HTTPStatus.NOT_FOUND theticket = get_ticket(checking_id)
try: try:
is_paid = not WALLET.get_invoice_status(checking_id).pending is_paid = not WALLET.get_invoice_status(checking_id).pending
except Exception: except Exception:
return jsonify({"message": "Not paid."}), HTTPStatus.NOT_FOUND return jsonify({"message": "Not paid."}), HTTPStatus.NOT_FOUND
if is_paid: if is_paid:
wallet = get_wallet(form.wallet) wallet = get_wallet(theticket.wallet)
payment = wallet.get_payment(checking_id) payment = wallet.get_payment(checking_id)
payment.set_pending(False) payment.set_pending(False)
create_ticket(wallet=form.wallet, **g.data) ticket = update_ticket(paid=True, checking_id=checking_id)
return jsonify({"paid": True}), HTTPStatus.OK return jsonify({"paid": True, "ticket_id": ticket.id}), HTTPStatus.OK
return jsonify({"paid": False}), HTTPStatus.OK return jsonify({"paid": False}), HTTPStatus.OK
@lnticket_ext.route("/api/v1/tickets/<ticket_id>", methods=["DELETE"]) @lnticket_ext.route("/api/v1/tickets/<ticket_id>", methods=["DELETE"])
@api_check_wallet_key("invoice") @api_check_wallet_key("invoice")
def api_ticket_delete(ticket_id): def api_ticket_delete(ticket_id):

Loading…
Cancel
Save