Browse Source

Adding funding source balance to admin ext

So far only lnpay works
adminvar
benarc 4 years ago
parent
commit
7533b1b0b0
  1. 1
      lnbits/core/crud.py
  2. 3
      lnbits/core/migrations.py
  3. 1
      lnbits/core/models.py
  4. 36
      lnbits/extensions/admin/templates/admin/index.html
  5. 8
      lnbits/extensions/admin/views.py
  6. 4
      lnbits/wallets/base.py
  7. 10
      lnbits/wallets/lndrest.py
  8. 9
      lnbits/wallets/lnpay.py

1
lnbits/core/crud.py

@ -342,4 +342,3 @@ def get_funding() -> List[Funding]:
return [Funding(**row) for row in rows]

3
lnbits/core/migrations.py

@ -213,7 +213,8 @@ def m003_create_funding_table(db):
invoice_key TEXT,
admin_key TEXT,
cert TEXT,
active BOOLEAN DEFAULT 0
active BOOLEAN DEFAULT 0,
balance int
);
"""
)

1
lnbits/core/models.py

@ -43,6 +43,7 @@ class Funding(NamedTuple):
admin_key: str
cert: str
active: bool
balance: int
class Wallet(NamedTuple):

36
lnbits/extensions/admin/templates/admin/index.html

@ -454,6 +454,12 @@
<div class="col">
<q-card class="q-mr-md q-mb-md">
<div class="q-px-md q-py-md" @submit="topupWallet">
<div class="text-h6" class="q-px-md"> Main funding source: <strong>{{balance[1]}} ({{balance[0]}}sats)</strong></div>
</div>
</q-card>
<q-card class="q-mr-md">
<q-form class="q-px-md q-py-md" @submit="topupWallet">
<div class="text-h6" class="q-px-md">Wallet topup</div>
@ -486,6 +492,8 @@
</div></div>
</q-form>
</q-card>
</div>
@ -502,7 +510,6 @@
mixins: [windowMixin],
data: function () {
return {
tab: 'branding',
wallet: {
data:{}
},
@ -540,16 +547,16 @@
},
created: function () {
var self = this
;(self.data.admin.user = '{{ admin_user }}'),
(self.data.admin.allowed_users = ''),
(self.data.admin.site_title = '{{admin.site_title}}'),
(self.data.admin.tagline = '{{admin.tagline}}'),
(self.data.admin.primary_color = '{{admin.primary_color}}'),
(self.data.admin.secondary_color = '{{admin.secondary_color}}'),
(self.data.admin.service_fee = parseInt('{{admin.service_fee}}')),
(self.data.admin.default_wallet_name = '{{admin.default_wallet_name}}'),
(self.data.admin.data_folder = '{{admin.data_folder}}'),
(self.data.admin.disabled_ext = '{{admin.disabled_ext}}'.split(','))
self.data.admin.user = '{{ admin_user }}'
self.data.admin.allowed_users = ''
self.data.admin.site_title = '{{admin.site_title}}'
self.data.admin.tagline = '{{admin.tagline}}'
self.data.admin.primary_color = '{{admin.primary_color}}'
self.data.admin.secondary_color = '{{admin.secondary_color}}'
self.data.admin.service_fee = parseInt('{{admin.service_fee}}')
self.data.admin.default_wallet_name = '{{admin.default_wallet_name}}'
self.data.admin.data_folder = '{{admin.data_folder}}'
self.data.admin.disabled_ext = '{{admin.disabled_ext}}'.split(',')
if (usr != null) {
self.cancel.on = true
@ -568,6 +575,7 @@
self.data.clightning.endpoint = funding[i][2]
if (funding[i][8] == 1) {
self.data.clightning.label = 'CLightning GRPC (main funding source)'
self.funding_source.name = funding[i][1]
}
}
if (funding[i][1] == 'LndRestWallet') {
@ -578,6 +586,7 @@
self.data.lndrest.cert = funding[i][7]
if (funding[i][8] == 1) {
self.data.lndrest.label = 'LND REST (main funding source)'
self.funding_source.name = funding[i][1]
}
}
if (funding[i][1] == 'LndWallet') {
@ -589,6 +598,7 @@
self.data.lndgrpc.cert = funding[i][7]
if (funding[i][8] == 1) {
self.data.lndgrpc.label = 'LND GRPC (main funding source)'
self.funding_source.name = funding[i][1]
}
}
if (funding[i][1] == 'LntxbotWallet') {
@ -597,6 +607,7 @@
if (funding[i][8] == 1) {
self.data.lntxbot.label = 'LNTXBOT (main funding source)'
self.funding_source.name = funding[i][1]
}
}
if (funding[i][1] == 'LNPayWallet') {
@ -607,6 +618,7 @@
if (funding[i][8] == 1) {
self.data.lnpay.label = 'LNpay (main funding source)'
self.funding_source.name = funding[i][1]
}
}
if (funding[i][1] == 'LnbitsWallet') {
@ -617,6 +629,7 @@
if (funding[i][8] == 1) {
self.data.lnbits.label = 'LNbits (main funding source)'
self.funding_source.name = funding[i][1]
}
}
if (funding[i][1] == 'OpenNodeWallet') {
@ -626,6 +639,7 @@
if (funding[i][8] == 1) {
self.data.opennode.label = 'Opennode (main funding source)'
self.funding_source.name = funding[i][1]
}
}
}

8
lnbits/extensions/admin/views.py

@ -3,7 +3,7 @@ from flask import g, render_template, request
from lnbits.decorators import check_user_exists, validate_uuids
from lnbits.extensions.admin import admin_ext
from lnbits.core.crud import get_admin, get_funding
from lnbits.settings import WALLET
@admin_ext.route("/")
@ -19,4 +19,8 @@ def index():
admin_user = admin[0]
if admin.user != None and admin.user != user_id:
abort(HTTPStatus.FORBIDDEN, "Admin only")
return render_template("admin/index.html", user=g.user, admin=admin, funding=funding)
balance = [WALLET.get_balance()]
for source in funding:
if source[8] == 1:
balance.append(source[1])
return render_template("admin/index.html", user=g.user, admin=admin, funding=funding, balance=balance)

4
lnbits/wallets/base.py

@ -43,6 +43,10 @@ class Wallet(ABC):
def get_payment_status(self, checking_id: str) -> PaymentStatus:
pass
@abstractmethod
def get_balance(self):
pass
class Unsupported(Exception):
pass

10
lnbits/wallets/lndrest.py

@ -111,3 +111,13 @@ class LndRestWallet(Wallet):
statuses = {"UNKNOWN": None, "IN_FLIGHT": None, "SUCCEEDED": True, "FAILED": False}
return PaymentStatus(statuses[payment["status"]])
def get_balance(self):
r = get(
url=f"{self.endpoint}/v1/balance/channels",
headers=self.auth_admin,
verify=self.auth_cert
)
if not r.ok:
return None
return r.json()["balance"]

9
lnbits/wallets/lnpay.py

@ -62,3 +62,12 @@ class LNPayWallet(Wallet):
statuses = {0: None, 1: True, -1: False}
return PaymentStatus(statuses[r.json()["settled"]])
def get_balance(self):
r = get(
url=f"{self.endpoint}/wallet/{self.auth_read}",
headers=self.auth_api
)
if not r.ok:
return None
return r.json()["balance"]
Loading…
Cancel
Save