mirror of
https://github.com/lnbits/lnbits.git
synced 2025-10-09 20:12:34 +02:00
Cleaning up watchonly
This commit is contained in:
@@ -2,18 +2,7 @@ async def m001_initial(db):
|
|||||||
"""
|
"""
|
||||||
Initial wallet table.
|
Initial wallet table.
|
||||||
"""
|
"""
|
||||||
await db.execute(
|
|
||||||
"""
|
|
||||||
CREATE TABLE IF NOT EXISTS wallets (
|
|
||||||
id TEXT NOT NULL PRIMARY KEY,
|
|
||||||
user TEXT,
|
|
||||||
masterpub TEXT NOT NULL,
|
|
||||||
title TEXT NOT NULL,
|
|
||||||
address_no INTEGER NOT NULL DEFAULT 0,
|
|
||||||
balance INTEGER NOT NULL
|
|
||||||
);
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
|
|
||||||
await db.execute(
|
await db.execute(
|
||||||
"""
|
"""
|
||||||
@@ -30,11 +19,3 @@ async def m001_initial(db):
|
|||||||
);
|
);
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
await db.execute(
|
|
||||||
"""
|
|
||||||
CREATE TABLE IF NOT EXISTS mempool (
|
|
||||||
user TEXT NOT NULL,
|
|
||||||
endpoint TEXT NOT NULL
|
|
||||||
);
|
|
||||||
"""
|
|
||||||
)
|
|
@@ -170,6 +170,14 @@
|
|||||||
label="Time (secs)"
|
label="Time (secs)"
|
||||||
> </q-input>
|
> </q-input>
|
||||||
|
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
dense
|
||||||
|
v-model.trim="formDialogCharge.data.webhook"
|
||||||
|
type="url"
|
||||||
|
label="Webhook"
|
||||||
|
> </q-input>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div v-if="walletLinks.length > 0">
|
<div v-if="walletLinks.length > 0">
|
||||||
@@ -375,7 +383,7 @@
|
|||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
|
|
||||||
for (i = 0; i < response.data.length; i++) {
|
for (i = 0; i < response.data.length; i++) {
|
||||||
self.walletLinks.push(response.data[i].title + " " + response.data[i].id)
|
self.walletLinks.push(response.data[i].id)
|
||||||
}
|
}
|
||||||
console.log(self.walletLinks)
|
console.log(self.walletLinks)
|
||||||
|
|
||||||
|
@@ -195,62 +195,6 @@
|
|||||||
</q-card>
|
</q-card>
|
||||||
</q-dialog>
|
</q-dialog>
|
||||||
|
|
||||||
|
|
||||||
<q-dialog v-model="formDialogCharge.show" position="top" @hide="closeFormDialog">
|
|
||||||
<q-card class="q-pa-lg q-pt-xl lnbits__dialog-card">
|
|
||||||
<q-form @submit="sendFormDataCharge" class="q-gutter-md">
|
|
||||||
|
|
||||||
<q-input
|
|
||||||
filled
|
|
||||||
dense
|
|
||||||
v-model.trim="formDialogCharge.data.title"
|
|
||||||
type="text"
|
|
||||||
label="Title"
|
|
||||||
></q-input>
|
|
||||||
|
|
||||||
<q-input
|
|
||||||
filled
|
|
||||||
dense
|
|
||||||
v-model.trim="formDialogCharge.data.amount"
|
|
||||||
type="number"
|
|
||||||
label="Amount (sats)"
|
|
||||||
></q-input>
|
|
||||||
|
|
||||||
<q-input
|
|
||||||
filled
|
|
||||||
dense
|
|
||||||
v-model.trim="formDialogCharge.data.time"
|
|
||||||
type="number"
|
|
||||||
label="Time (secs)"
|
|
||||||
> </q-input>
|
|
||||||
|
|
||||||
<div class="row q-mt-lg">
|
|
||||||
<q-btn
|
|
||||||
v-if="formDialogCharge.data.id"
|
|
||||||
unelevated
|
|
||||||
color="deep-purple"
|
|
||||||
type="submit"
|
|
||||||
>Update Paylink</q-btn
|
|
||||||
>
|
|
||||||
<q-btn
|
|
||||||
v-else
|
|
||||||
unelevated
|
|
||||||
color="deep-purple"
|
|
||||||
:disable="
|
|
||||||
formDialogCharge.data.time == null ||
|
|
||||||
formDialogCharge.data.amount == null"
|
|
||||||
type="submit"
|
|
||||||
>Create Paylink</q-btn
|
|
||||||
>
|
|
||||||
<q-btn v-close-popup flat color="grey" class="q-ml-auto"
|
|
||||||
>Cancel</q-btn
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</q-form>
|
|
||||||
</q-card>
|
|
||||||
</q-dialog>
|
|
||||||
|
|
||||||
|
|
||||||
<q-dialog v-model="Addresses.show" position="top">
|
<q-dialog v-model="Addresses.show" position="top">
|
||||||
<q-card v-if="Addresses.data" class="q-pa-lg lnbits__dialog-card">
|
<q-card v-if="Addresses.data" class="q-pa-lg lnbits__dialog-card">
|
||||||
{% raw %}
|
{% raw %}
|
||||||
@@ -378,6 +322,7 @@
|
|||||||
label: 'Title',
|
label: 'Title',
|
||||||
field: 'title'
|
field: 'title'
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
name: 'amount',
|
name: 'amount',
|
||||||
align: 'left',
|
align: 'left',
|
||||||
@@ -443,10 +388,7 @@
|
|||||||
show: false,
|
show: false,
|
||||||
data: {}
|
data: {}
|
||||||
},
|
},
|
||||||
formDialogCharge: {
|
|
||||||
show: false,
|
|
||||||
data: {}
|
|
||||||
},
|
|
||||||
qrCodeDialog: {
|
qrCodeDialog: {
|
||||||
show: false,
|
show: false,
|
||||||
data: null
|
data: null
|
||||||
@@ -494,9 +436,7 @@
|
|||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
chargeRedirect: function (address){
|
|
||||||
window.location.href = this.mempool.endpoint + "/address/" + address;
|
|
||||||
},
|
|
||||||
getMempool: function () {
|
getMempool: function () {
|
||||||
var self = this
|
var self = this
|
||||||
|
|
||||||
@@ -580,105 +520,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
getCharges: function () {
|
|
||||||
var self = this
|
|
||||||
var getAddressBalance = this.getAddressBalance
|
|
||||||
|
|
||||||
LNbits.api
|
|
||||||
.request(
|
|
||||||
'GET',
|
|
||||||
'/watchonly/api/v1/ChargeLinks',
|
|
||||||
this.g.user.wallets[0].inkey
|
|
||||||
)
|
|
||||||
.then(function (response) {
|
|
||||||
var i
|
|
||||||
var now = parseInt(new Date() / 1000)
|
|
||||||
for (i = 0; i < response.data.length; i++) {
|
|
||||||
timeleft = response.data[i].time_to_pay - (now - response.data[i].time)
|
|
||||||
if (timeleft < 1) {
|
|
||||||
response.data[i].timeleft = 0
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
response.data[i].timeleft = timeleft
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
self.ChargeLinks = response.data.map(function (obj) {
|
|
||||||
return mapCharge(obj)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
.catch(function (error) {
|
|
||||||
LNbits.utils.notifyApiError(error)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
sendFormDataCharge: function () {
|
|
||||||
var self = this
|
|
||||||
var wallet = self.g.user.wallets[0]
|
|
||||||
var data = self.formDialogCharge.data
|
|
||||||
data.amount = parseInt(data.amount)
|
|
||||||
data.time = parseInt(data.time)
|
|
||||||
if (data.id) {
|
|
||||||
this.updateCharge(wallet, data)
|
|
||||||
} else {
|
|
||||||
this.createCharge(wallet, data)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
updateCharge: function (wallet, data) {
|
|
||||||
var self = this
|
|
||||||
|
|
||||||
LNbits.api
|
|
||||||
.request(
|
|
||||||
'PUT',
|
|
||||||
'/watchonly/api/v1/Charge/' + data.id,
|
|
||||||
wallet.inkey, data)
|
|
||||||
.then(function (response) {
|
|
||||||
self.Charge = _.reject(self.Charge, function (obj) {
|
|
||||||
return obj.id === data.id
|
|
||||||
})
|
|
||||||
self.Charge.push(mapCharge(response.data))
|
|
||||||
self.formDialogPayLink.show = false
|
|
||||||
})
|
|
||||||
.catch(function (error) {
|
|
||||||
LNbits.utils.notifyApiError(error)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
createCharge: function (wallet, data) {
|
|
||||||
var self = this
|
|
||||||
|
|
||||||
LNbits.api
|
|
||||||
.request('POST', '/watchonly/api/v1/Charge', wallet.inkey, data)
|
|
||||||
.then(function (response) {
|
|
||||||
self.ChargeLinks.push(mapCharge(response.data))
|
|
||||||
self.formDialogCharge.show = false
|
|
||||||
})
|
|
||||||
.catch(function (error) {
|
|
||||||
LNbits.utils.notifyApiError(error)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
deleteCharge: function (linkId) {
|
|
||||||
var self = this
|
|
||||||
var link = _.findWhere(this.Charge, {id: linkId})
|
|
||||||
console.log(self.g.user.wallets[0].adminkey)
|
|
||||||
LNbits.utils
|
|
||||||
.confirmDialog('Are you sure you want to delete this pay link?')
|
|
||||||
.onOk(function () {
|
|
||||||
LNbits.api
|
|
||||||
.request(
|
|
||||||
'DELETE',
|
|
||||||
'/watchonly/api/v1/Charge/' + linkId,
|
|
||||||
self.g.user.wallets[0].inkey
|
|
||||||
)
|
|
||||||
.then(function (response) {
|
|
||||||
self.Charge = _.reject(self.Charge, function (obj) {
|
|
||||||
return obj.id === linkId
|
|
||||||
})})
|
|
||||||
.catch(function (error) {
|
|
||||||
LNbits.utils.notifyApiError(error)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
updateWalletLink: function (wallet, data) {
|
updateWalletLink: function (wallet, data) {
|
||||||
var self = this
|
var self = this
|
||||||
|
|
||||||
@@ -743,8 +584,6 @@
|
|||||||
if (this.g.user.wallets.length) {
|
if (this.g.user.wallets.length) {
|
||||||
var getWalletLinks = this.getWalletLinks
|
var getWalletLinks = this.getWalletLinks
|
||||||
getWalletLinks()
|
getWalletLinks()
|
||||||
var getCharges = this.getCharges
|
|
||||||
getCharges()
|
|
||||||
var getMempool = this.getMempool
|
var getMempool = this.getMempool
|
||||||
getMempool()
|
getMempool()
|
||||||
|
|
||||||
|
@@ -82,67 +82,6 @@ async def api_wallet_delete(wallet_id):
|
|||||||
return jsonify({"deleted": "true"}), HTTPStatus.NO_CONTENT
|
return jsonify({"deleted": "true"}), HTTPStatus.NO_CONTENT
|
||||||
|
|
||||||
|
|
||||||
#############################CHARGES##########################
|
|
||||||
|
|
||||||
@watchonly_ext.route("/api/v1/charges", methods=["GET"])
|
|
||||||
@api_check_wallet_key("invoice")
|
|
||||||
async def api_charges_retrieve():
|
|
||||||
|
|
||||||
charges = await get_charges(g.wallet.user)
|
|
||||||
if not charges:
|
|
||||||
return (
|
|
||||||
jsonify(""),
|
|
||||||
HTTPStatus.OK
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
return jsonify([charge._asdict() for charge in charges]), HTTPStatus.OK
|
|
||||||
|
|
||||||
|
|
||||||
@watchonly_ext.route("/api/v1/charge/<charge_id>", methods=["GET"])
|
|
||||||
@api_check_wallet_key("invoice")
|
|
||||||
async def api_charge_retrieve(charge_id):
|
|
||||||
charge = get_charge(charge_id)
|
|
||||||
|
|
||||||
if not charge:
|
|
||||||
return jsonify({"message": "charge does not exist"}), HTTPStatus.NOT_FOUND
|
|
||||||
|
|
||||||
return jsonify({charge}), HTTPStatus.OK
|
|
||||||
|
|
||||||
|
|
||||||
@watchonly_ext.route("/api/v1/charge", methods=["POST"])
|
|
||||||
@watchonly_ext.route("/api/v1/charge/<charge_id>", methods=["PUT"])
|
|
||||||
@api_check_wallet_key("invoice")
|
|
||||||
@api_validate_post_request(
|
|
||||||
schema={
|
|
||||||
"walletid": {"type": "string", "empty": False, "required": True},
|
|
||||||
"title": {"type": "string", "empty": False, "required": True},
|
|
||||||
"time": {"type": "integer", "min": 1, "required": True},
|
|
||||||
"amount": {"type": "integer", "min": 1, "required": True},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
async def api_charge_create_or_update(charge_id=None):
|
|
||||||
|
|
||||||
if not charge_id:
|
|
||||||
charge = await create_charge(user = g.wallet.user, **g.data)
|
|
||||||
return jsonify(charge), HTTPStatus.CREATED
|
|
||||||
|
|
||||||
else:
|
|
||||||
charge = await update_charge(user = g.wallet.user, **g.data)
|
|
||||||
return jsonify(charge), HTTPStatus.OK
|
|
||||||
|
|
||||||
|
|
||||||
@watchonly_ext.route("/api/v1/charge/<charge_id>", methods=["DELETE"])
|
|
||||||
@api_check_wallet_key("invoice")
|
|
||||||
async def api_charge_delete(charge_id):
|
|
||||||
charge = await get_watch_wallet(charge_id)
|
|
||||||
|
|
||||||
if not charge:
|
|
||||||
return jsonify({"message": "Wallet link does not exist."}), HTTPStatus.NOT_FOUND
|
|
||||||
|
|
||||||
await delete_watch_wallet(charge_id)
|
|
||||||
|
|
||||||
return "", HTTPStatus.NO_CONTENT
|
|
||||||
|
|
||||||
#############################MEMPOOL##########################
|
#############################MEMPOOL##########################
|
||||||
|
|
||||||
@watchonly_ext.route("/api/v1/mempool", methods=["PUT"])
|
@watchonly_ext.route("/api/v1/mempool", methods=["PUT"])
|
||||||
|
Reference in New Issue
Block a user