mirror of
https://github.com/lnbits/lnbits.git
synced 2025-09-19 20:14:59 +02:00
added migrate
This commit is contained in:
@@ -23,9 +23,22 @@ async def create_lnurldevice(
|
|||||||
currency,
|
currency,
|
||||||
device,
|
device,
|
||||||
profit,
|
profit,
|
||||||
amount
|
amount,
|
||||||
|
pin,
|
||||||
|
profit1,
|
||||||
|
amount1,
|
||||||
|
pin1,
|
||||||
|
profit2,
|
||||||
|
amount2,
|
||||||
|
pin2,
|
||||||
|
profit3,
|
||||||
|
amount3,
|
||||||
|
pin3,
|
||||||
|
profit4,
|
||||||
|
amount4,
|
||||||
|
pin4,
|
||||||
)
|
)
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||||
""",
|
""",
|
||||||
(
|
(
|
||||||
lnurldevice_id,
|
lnurldevice_id,
|
||||||
@@ -36,6 +49,19 @@ async def create_lnurldevice(
|
|||||||
data.device,
|
data.device,
|
||||||
data.profit,
|
data.profit,
|
||||||
data.amount,
|
data.amount,
|
||||||
|
data.pin,
|
||||||
|
data.profit1,
|
||||||
|
data.amount1,
|
||||||
|
data.pin1,
|
||||||
|
data.profit2,
|
||||||
|
data.amount2,
|
||||||
|
data.pin2,
|
||||||
|
data.profit3,
|
||||||
|
data.amount3,
|
||||||
|
data.pin3,
|
||||||
|
data.profit4,
|
||||||
|
data.amount4,
|
||||||
|
data.pin4
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
return await get_lnurldevice(lnurldevice_id)
|
return await get_lnurldevice(lnurldevice_id)
|
||||||
|
@@ -92,6 +92,8 @@ async def lnurl_v1_params(
|
|||||||
p: str = Query(None),
|
p: str = Query(None),
|
||||||
atm: str = Query(None),
|
atm: str = Query(None),
|
||||||
gpio: str = Query(None),
|
gpio: str = Query(None),
|
||||||
|
profit: str = Query(None),
|
||||||
|
amount: str = Query(None),
|
||||||
):
|
):
|
||||||
device = await get_lnurldevice(device_id)
|
device = await get_lnurldevice(device_id)
|
||||||
if not device:
|
if not device:
|
||||||
@@ -106,14 +108,14 @@ async def lnurl_v1_params(
|
|||||||
if device.device == "switch":
|
if device.device == "switch":
|
||||||
|
|
||||||
price_msat = (
|
price_msat = (
|
||||||
await fiat_amount_as_satoshis(float(device.profit), device.currency)
|
await fiat_amount_as_satoshis(float(profit), device.currency)
|
||||||
if device.currency != "sat"
|
if device.currency != "sat"
|
||||||
else amount_in_cent
|
else amount_in_cent
|
||||||
) * 1000
|
) * 1000
|
||||||
|
|
||||||
lnurldevicepayment = await create_lnurldevicepayment(
|
lnurldevicepayment = await create_lnurldevicepayment(
|
||||||
deviceid=device.id,
|
deviceid=device.id,
|
||||||
payload="bla",
|
payload=amount,
|
||||||
sats=price_msat,
|
sats=price_msat,
|
||||||
pin=gpio,
|
pin=gpio,
|
||||||
payhash="bla",
|
payhash="bla",
|
||||||
@@ -237,7 +239,7 @@ async def lnurl_callback(
|
|||||||
amount=lnurldevicepayment.sats / 1000,
|
amount=lnurldevicepayment.sats / 1000,
|
||||||
memo=device.title + "-" + lnurldevicepayment.id,
|
memo=device.title + "-" + lnurldevicepayment.id,
|
||||||
unhashed_description=(await device.lnurlpay_metadata()).encode("utf-8"),
|
unhashed_description=(await device.lnurlpay_metadata()).encode("utf-8"),
|
||||||
extra={"tag": "Switch", "pin": ,"id": paymentid, "time": device.amount},
|
extra={"tag": "Switch", "pin": lnurldevicepayment.pin,"amount": int(lnurldevicepayment.payload),"id": paymentid},
|
||||||
)
|
)
|
||||||
lnurldevicepayment = await update_lnurldevicepayment(
|
lnurldevicepayment = await update_lnurldevicepayment(
|
||||||
lnurldevicepayment_id=paymentid, payhash=payment_hash
|
lnurldevicepayment_id=paymentid, payhash=payment_hash
|
||||||
|
@@ -93,23 +93,20 @@ async def m004_redux(db):
|
|||||||
"""
|
"""
|
||||||
Add 'meta' for storing various metadata about the wallet
|
Add 'meta' for storing various metadata about the wallet
|
||||||
"""
|
"""
|
||||||
await db.execute(
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN pin INT DEFAULT 0")
|
||||||
"""
|
|
||||||
ALTER TABLE lnurldevice.lnurldevices ADD COLUMN (
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN profit1 FLOAT DEFAULT 0")
|
||||||
amount1,
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN amount1 INT DEFAULT 0")
|
||||||
amount2,
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN pin1 INT DEFAULT 0")
|
||||||
amount3,
|
|
||||||
amount4,
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN profit2 FLOAT DEFAULT 0")
|
||||||
time,
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN amount2 INT DEFAULT 0")
|
||||||
time1,
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN pin2 INT DEFAULT 0")
|
||||||
time2,
|
|
||||||
time3,
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN profit3 FLOAT DEFAULT 0")
|
||||||
time4,
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN amount3 INT DEFAULT 0")
|
||||||
pin1,
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN pin3 INT DEFAULT 0")
|
||||||
pin2,
|
|
||||||
pin3,
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN profit4 FLOAT DEFAULT 0")
|
||||||
pin4,
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN amount4 INT DEFAULT 0")
|
||||||
)
|
await db.execute("ALTER TABLE lnurldevice.lnurldevices ADD COLUMN pin4 INT DEFAULT 0")
|
||||||
INT DEFAULT 0;
|
|
||||||
"""
|
|
||||||
)
|
|
@@ -18,20 +18,19 @@ class createLnurldevice(BaseModel):
|
|||||||
device: str
|
device: str
|
||||||
profit: float
|
profit: float
|
||||||
amount: int
|
amount: int
|
||||||
amount1: int
|
|
||||||
amount2: int
|
|
||||||
amount3: int
|
|
||||||
amount4: int
|
|
||||||
pin: int
|
pin: int
|
||||||
|
profit1: float
|
||||||
|
amount1: int
|
||||||
pin1: int
|
pin1: int
|
||||||
|
profit2: float
|
||||||
|
amount2: int
|
||||||
pin2: int
|
pin2: int
|
||||||
|
profit3: float
|
||||||
|
amount3: int
|
||||||
pin3: int
|
pin3: int
|
||||||
|
profit4: float
|
||||||
|
amount4: int
|
||||||
pin4: int
|
pin4: int
|
||||||
time: int
|
|
||||||
time1: int
|
|
||||||
time2: int
|
|
||||||
time3: int
|
|
||||||
time4: int
|
|
||||||
|
|
||||||
|
|
||||||
class lnurldevices(BaseModel):
|
class lnurldevices(BaseModel):
|
||||||
@@ -43,6 +42,19 @@ class lnurldevices(BaseModel):
|
|||||||
device: str
|
device: str
|
||||||
profit: float
|
profit: float
|
||||||
amount: int
|
amount: int
|
||||||
|
pin: int
|
||||||
|
profit1: float
|
||||||
|
amount1: int
|
||||||
|
pin1: int
|
||||||
|
profit2: float
|
||||||
|
amount2: int
|
||||||
|
pin2: int
|
||||||
|
profit3: float
|
||||||
|
amount3: int
|
||||||
|
pin3: int
|
||||||
|
profit4: float
|
||||||
|
amount4: int
|
||||||
|
pin4: int
|
||||||
timestamp: str
|
timestamp: str
|
||||||
|
|
||||||
def from_row(cls, row: Row) -> "lnurldevices":
|
def from_row(cls, row: Row) -> "lnurldevices":
|
||||||
|
@@ -36,5 +36,5 @@ async def on_invoice_paid(payment: Payment) -> None:
|
|||||||
lnurldevicepayment = await update_lnurldevicepayment(
|
lnurldevicepayment = await update_lnurldevicepayment(
|
||||||
lnurldevicepayment_id=payment.extra.get("id"), payhash="used"
|
lnurldevicepayment_id=payment.extra.get("id"), payhash="used"
|
||||||
)
|
)
|
||||||
return await updater(lnurldevicepayment.deviceid, lnurldevicepayment.pin)
|
return await updater(lnurldevicepayment.deviceid, lnurldevicepayment.pin, lnurldevicepayment.amount)
|
||||||
return
|
return
|
||||||
|
@@ -230,6 +230,18 @@
|
|||||||
label="Profit margin (% added to invoices/deducted from faucets)"
|
label="Profit margin (% added to invoices/deducted from faucets)"
|
||||||
></q-input>
|
></q-input>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
|
<p>Switches</p>
|
||||||
|
<q-toggle v-model="switch1" color="primary" label="1"></q-toggle>
|
||||||
|
|
||||||
|
<q-toggle v-model="switch2" color="primary" label="2"></q-toggle>
|
||||||
|
|
||||||
|
<q-toggle v-model="switch3" color="primary" label="3"></q-toggle>
|
||||||
|
|
||||||
|
<q-toggle v-model="switch4" color="primary" label="4"></q-toggle>
|
||||||
|
|
||||||
|
<q-toggle v-model="switch5" color="primary" label="5"></q-toggle>
|
||||||
|
|
||||||
|
<div v-if="switch1">
|
||||||
<q-input
|
<q-input
|
||||||
ref="setAmount"
|
ref="setAmount"
|
||||||
filled
|
filled
|
||||||
@@ -251,6 +263,134 @@
|
|||||||
value="1000"
|
value="1000"
|
||||||
label="milesecs to turn Switch on for (1sec = 1000ms)"
|
label="milesecs to turn Switch on for (1sec = 1000ms)"
|
||||||
></q-input>
|
></q-input>
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.pin"
|
||||||
|
type="number"
|
||||||
|
label="GPIO to turn on"
|
||||||
|
></q-input>
|
||||||
|
</div>
|
||||||
|
<div v-if="switch2">
|
||||||
|
<q-input
|
||||||
|
ref="setAmount"
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.profit1"
|
||||||
|
class="q-pb-md"
|
||||||
|
:label="'Amount (' + formDialoglnurldevice.data.currency + ') *'"
|
||||||
|
:mask="'#.##'"
|
||||||
|
fill-mask="0"
|
||||||
|
reverse-fill-mask
|
||||||
|
:step="'0.01'"
|
||||||
|
value="0.00"
|
||||||
|
></q-input>
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.amount1"
|
||||||
|
type="number"
|
||||||
|
value="1000"
|
||||||
|
label="milesecs to turn Switch on for (1sec = 1000ms)"
|
||||||
|
></q-input>
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.pin1"
|
||||||
|
type="number"
|
||||||
|
label="GPIO to turn on"
|
||||||
|
></q-input>
|
||||||
|
</div>
|
||||||
|
<div v-if="switch3">
|
||||||
|
<q-input
|
||||||
|
ref="setAmount"
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.profit2"
|
||||||
|
class="q-pb-md"
|
||||||
|
:label="'Amount (' + formDialoglnurldevice.data.currency + ') *'"
|
||||||
|
:mask="'#.##'"
|
||||||
|
fill-mask="0"
|
||||||
|
reverse-fill-mask
|
||||||
|
:step="'0.01'"
|
||||||
|
value="0.00"
|
||||||
|
></q-input>
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.amount2"
|
||||||
|
type="number"
|
||||||
|
value="1000"
|
||||||
|
label="milesecs to turn Switch on for (1sec = 1000ms)"
|
||||||
|
></q-input>
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.pin2"
|
||||||
|
type="number"
|
||||||
|
label="GPIO to turn on"
|
||||||
|
></q-input>
|
||||||
|
</div>
|
||||||
|
<div v-if="switch4">
|
||||||
|
<q-input
|
||||||
|
ref="setAmount"
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.profit3"
|
||||||
|
class="q-pb-md"
|
||||||
|
:label="'Amount (' + formDialoglnurldevice.data.currency + ') *'"
|
||||||
|
:mask="'#.##'"
|
||||||
|
fill-mask="0"
|
||||||
|
reverse-fill-mask
|
||||||
|
:step="'0.01'"
|
||||||
|
value="0.00"
|
||||||
|
></q-input>
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.amount3"
|
||||||
|
type="number"
|
||||||
|
value="1000"
|
||||||
|
label="milesecs to turn Switch on for (1sec = 1000ms)"
|
||||||
|
></q-input>
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.pin3"
|
||||||
|
type="number"
|
||||||
|
label="GPIO to turn on"
|
||||||
|
></q-input>
|
||||||
|
</div>
|
||||||
|
<div v-if="switch4">
|
||||||
|
<q-input
|
||||||
|
ref="setAmount"
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.profit4"
|
||||||
|
class="q-pb-md"
|
||||||
|
:label="'Amount (' + formDialoglnurldevice.data.currency + ') *'"
|
||||||
|
:mask="'#.##'"
|
||||||
|
fill-mask="0"
|
||||||
|
reverse-fill-mask
|
||||||
|
:step="'0.01'"
|
||||||
|
value="0.00"
|
||||||
|
></q-input>
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.amount4"
|
||||||
|
type="number"
|
||||||
|
value="1000"
|
||||||
|
label="milesecs to turn Switch on for (1sec = 1000ms)"
|
||||||
|
></q-input>
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialoglnurldevice.data.pin4"
|
||||||
|
type="number"
|
||||||
|
label="GPIO to turn on"
|
||||||
|
></q-input>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row q-mt-lg">
|
<div class="row q-mt-lg">
|
||||||
@@ -338,6 +478,11 @@
|
|||||||
wslocation: window.location.hostname,
|
wslocation: window.location.hostname,
|
||||||
filter: '',
|
filter: '',
|
||||||
currency: 'USD',
|
currency: 'USD',
|
||||||
|
switch1: false,
|
||||||
|
switch2: false,
|
||||||
|
switch3: false,
|
||||||
|
switch4: false,
|
||||||
|
switch5: false,
|
||||||
lnurldeviceLinks: [],
|
lnurldeviceLinks: [],
|
||||||
lnurldeviceLinksObj: [],
|
lnurldeviceLinksObj: [],
|
||||||
devices: [
|
devices: [
|
||||||
@@ -592,7 +737,7 @@
|
|||||||
LNbits.utils.notifyApiError(error)
|
LNbits.utils.notifyApiError(error)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
clearFormDialoglnurldevice() {
|
clearFormDialoglnurldevice () {
|
||||||
this.formDialoglnurldevice.data = {
|
this.formDialoglnurldevice.data = {
|
||||||
lnurl_toggle: false,
|
lnurl_toggle: false,
|
||||||
show_message: false,
|
show_message: false,
|
||||||
|
@@ -103,8 +103,8 @@ async def websocket_endpoint(websocket: WebSocket, lnurldevice_id: str):
|
|||||||
manager.disconnect(websocket)
|
manager.disconnect(websocket)
|
||||||
|
|
||||||
|
|
||||||
async def updater(lnurldevice_id, lnurldevice_pin):
|
async def updater(lnurldevice_id, lnurldevice_pin, lnurldevice_amount):
|
||||||
lnurldevice = await get_lnurldevice(lnurldevice_id)
|
lnurldevice = await get_lnurldevice(lnurldevice_id)
|
||||||
if not lnurldevice:
|
if not lnurldevice:
|
||||||
return
|
return
|
||||||
return await manager.send_personal_message(f"pin:{lnurldevice.pin},amount:{lnurldevice.amount}", lnurldevice_id)
|
return await manager.send_personal_message(f"pin:{lnurldevice_pin},amount:{lnurldevice_amount}", lnurldevice_id)
|
||||||
|
Reference in New Issue
Block a user