From 33f9ae9f66f8e1185f907691d467a8a9486d2f64 Mon Sep 17 00:00:00 2001
From: ben
Date: Mon, 29 Aug 2022 15:37:31 +0100
Subject: [PATCH] Added some unique checks so only 1 record can be made per
card
---
lnbits/extensions/boltcards/migrations.py | 8 +-
.../boltcards/templates/boltcards/index.html | 272 ++++--------------
lnbits/extensions/boltcards/views_api.py | 6 +-
3 files changed, 59 insertions(+), 227 deletions(-)
diff --git a/lnbits/extensions/boltcards/migrations.py b/lnbits/extensions/boltcards/migrations.py
index c20ef449c..5be3d08fb 100644
--- a/lnbits/extensions/boltcards/migrations.py
+++ b/lnbits/extensions/boltcards/migrations.py
@@ -5,10 +5,10 @@ async def m001_initial(db):
await db.execute(
"""
CREATE TABLE boltcards.cards (
- id TEXT PRIMARY KEY,
+ id TEXT PRIMARY KEY UNIQUE,
wallet TEXT NOT NULL,
card_name TEXT NOT NULL,
- uid TEXT NOT NULL,
+ uid TEXT NOT NULL UNIQUE,
counter INT NOT NULL DEFAULT 0,
tx_limit TEXT NOT NULL,
daily_limit TEXT NOT NULL,
@@ -30,7 +30,7 @@ async def m001_initial(db):
await db.execute(
"""
CREATE TABLE boltcards.hits (
- id TEXT PRIMARY KEY,
+ id TEXT PRIMARY KEY UNIQUE,
card_id TEXT NOT NULL,
ip TEXT NOT NULL,
spent BOOL NOT NULL DEFAULT True,
@@ -48,7 +48,7 @@ async def m001_initial(db):
await db.execute(
"""
CREATE TABLE boltcards.refunds (
- id TEXT PRIMARY KEY,
+ id TEXT PRIMARY KEY UNIQUE,
hit_id TEXT NOT NULL,
refund_amount INT NOT NULL,
time TIMESTAMP NOT NULL DEFAULT """
diff --git a/lnbits/extensions/boltcards/templates/boltcards/index.html b/lnbits/extensions/boltcards/templates/boltcards/index.html
index ec2611a98..43901f724 100644
--- a/lnbits/extensions/boltcards/templates/boltcards/index.html
+++ b/lnbits/extensions/boltcards/templates/boltcards/index.html
@@ -12,33 +12,18 @@
Cards
-
+
Add card
- Export to CSV
+ Export to CSV
-
+
{% raw %}
@@ -53,13 +38,8 @@
-
+
Card key credentials
@@ -67,45 +47,19 @@
{{ col.value }}
- DISABLE
- ENABLE
+ DISABLE
+ ENABLE
-
+
Edit card
-
- Deleting card will also delete all records
+
+ Deleting card will also delete all records
@@ -121,19 +75,11 @@
Hits
- Export to CSV
+ Export to CSV
-
+
{% raw %}
@@ -160,19 +106,11 @@
Refunds
- Export to CSV
+ Export to CSV
-
+
{% raw %}
@@ -209,148 +147,55 @@
-
+
-
+
-
- Get from the card you'll use, using an NFC app
+
+ Get from the card you'll use, using an NFC app
-
+
Tap card to scan UID
-
+
-
+
-
-
+
+
-
- Zero if you don't know.
+
+ Zero if you don't know.
- Generate keys
+ Generate keys
- Update Card
- Create Card
+ Update Card
+ Create Card
- Cancel
+ Cancel
@@ -360,11 +205,7 @@
{% raw %}
-
+
(Keys for bolt-nfc-android-app)
@@ -375,27 +216,14 @@
Lock key: {{ qrCodeDialog.data.k0 }}
Meta key: {{ qrCodeDialog.data.k1 }}
File key: {{ qrCodeDialog.data.k2 }}
-
-
-
-
-
-
+
+
+
+
+
Click to copy, then add to NFC card
-
+
{% endraw %}
Close
@@ -406,4 +234,4 @@
{% endblock %} {% block scripts %} {{ window_vars(user) }}
-{% endblock %}
+{% endblock %}
\ No newline at end of file
diff --git a/lnbits/extensions/boltcards/views_api.py b/lnbits/extensions/boltcards/views_api.py
index f1e02810f..358dd0b4d 100644
--- a/lnbits/extensions/boltcards/views_api.py
+++ b/lnbits/extensions/boltcards/views_api.py
@@ -74,7 +74,11 @@ async def api_card_create_or_update(
raise HTTPException(
detail="Invalid byte data provided.", status_code=HTTPStatus.BAD_REQUEST
)
-
+ checkUid = await get_card_by_uid(data.uid)
+ if checkUid:
+ raise HTTPException(
+ detail="UID already registered. Delete registered card and try again.", status_code=HTTPStatus.BAD_REQUEST
+ )
if card_id:
card = await get_card(card_id)
if not card: