From 7533b1b0b062358433a322a4e28b83bb8a8d46bf Mon Sep 17 00:00:00 2001 From: benarc Date: Fri, 18 Sep 2020 21:22:25 +0100 Subject: [PATCH] Adding funding source balance to admin ext So far only lnpay works --- lnbits/core/crud.py | 1 - lnbits/core/migrations.py | 3 +- lnbits/core/models.py | 1 + .../admin/templates/admin/index.html | 36 +++++++++++++------ lnbits/extensions/admin/views.py | 8 +++-- lnbits/wallets/base.py | 4 +++ lnbits/wallets/lndrest.py | 10 ++++++ lnbits/wallets/lnpay.py | 9 +++++ 8 files changed, 57 insertions(+), 15 deletions(-) diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index 4b7279b..7472ab6 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -342,4 +342,3 @@ def get_funding() -> List[Funding]: return [Funding(**row) for row in rows] - diff --git a/lnbits/core/migrations.py b/lnbits/core/migrations.py index 4c329dc..c6fae3f 100644 --- a/lnbits/core/migrations.py +++ b/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 ); """ ) diff --git a/lnbits/core/models.py b/lnbits/core/models.py index 5532f2c..8d9504f 100644 --- a/lnbits/core/models.py +++ b/lnbits/core/models.py @@ -43,6 +43,7 @@ class Funding(NamedTuple): admin_key: str cert: str active: bool + balance: int class Wallet(NamedTuple): diff --git a/lnbits/extensions/admin/templates/admin/index.html b/lnbits/extensions/admin/templates/admin/index.html index 87f2ad2..74d74ec 100644 --- a/lnbits/extensions/admin/templates/admin/index.html +++ b/lnbits/extensions/admin/templates/admin/index.html @@ -454,6 +454,12 @@
+ +
+
Main funding source: {{balance[1]}} ({{balance[0]}}sats)
+ +
+
Wallet topup
@@ -486,6 +492,8 @@
+ + @@ -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] } } } diff --git a/lnbits/extensions/admin/views.py b/lnbits/extensions/admin/views.py index e88f1d3..5aa5c7a 100644 --- a/lnbits/extensions/admin/views.py +++ b/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) diff --git a/lnbits/wallets/base.py b/lnbits/wallets/base.py index 06c3979..4ca2c1b 100644 --- a/lnbits/wallets/base.py +++ b/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 diff --git a/lnbits/wallets/lndrest.py b/lnbits/wallets/lndrest.py index a76a899..d48d2bd 100644 --- a/lnbits/wallets/lndrest.py +++ b/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"] \ No newline at end of file diff --git a/lnbits/wallets/lnpay.py b/lnbits/wallets/lnpay.py index db0d417..00392db 100644 --- a/lnbits/wallets/lnpay.py +++ b/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"] \ No newline at end of file