Browse Source

Trying to get node info from vue to flask

adminvar
benarc 5 years ago
parent
commit
d6018f7c00
  1. 37
      lnbits/core/crud.py
  2. 26
      lnbits/core/migrations.py
  3. 2
      lnbits/core/models.py
  4. 240
      lnbits/core/templates/core/admin.html
  5. 3
      lnbits/core/templates/core/extensions.html
  6. 13
      lnbits/core/views/api.py
  7. 22
      lnbits/core/views/generic.py
  8. 2
      lnbits/static/css/base.css

37
lnbits/core/crud.py

@ -307,8 +307,18 @@ def get_admin(
default_wallet_name: Optional[str] = None, default_wallet_name: Optional[str] = None,
data_folder: Optional[str] = None, data_folder: Optional[str] = None,
disabled_ext: Optional[str] = "amilk", disabled_ext: Optional[str] = "amilk",
force_https: Optional[bool] = True, force_https: Optional[bool] = True,
service_fee: Optional[int] = 0, service_fee: Optional[int] = 0,
funding_source_primary: Optional[str] = "",
edited: Optional[str] = "",
CLightningWallet: Optional[str] = '',
LndRestWallet: Optional[str] = '',
LndWallet: Optional[str] = '',
LntxbotWallet: Optional[str] = '',
LNPayWallet: Optional[str] = '',
LnbitsWallet: Optional[str] = '',
OpenNodeWallet: Optional[str] = '',
) -> Optional[Admin]: ) -> Optional[Admin]:
row = g.db.fetchone("SELECT * FROM admin WHERE 1") row = g.db.fetchone("SELECT * FROM admin WHERE 1")
if not user: if not user:
@ -317,7 +327,7 @@ def get_admin(
g.db.execute( g.db.execute(
""" """
UPDATE admin UPDATE admin
SET user = ?, site_title = ?, tagline = ?, primary_color = ?, secondary_color = ?, allowed_users = ?, default_wallet_name = ?, data_folder = ?, disabled_ext = ?, force_https = ?, service_fee = ? SET user = ?, site_title = ?, tagline = ?, primary_color = ?, secondary_color = ?, allowed_users = ?, default_wallet_name = ?, data_folder = ?, disabled_ext = ?, force_https = ?, service_fee = ?, funding_source = ?
WHERE 1 WHERE 1
""", """,
( (
@ -332,12 +342,33 @@ def get_admin(
disabled_ext, disabled_ext,
force_https, force_https,
service_fee, service_fee,
funding_source_primary,
), ),
) )
row = g.db.fetchone("SELECT * FROM admin WHERE 1") row = g.db.fetchone("SELECT * FROM admin WHERE 1")
return Admin(**row) if row else None return Admin(**row) if row else None
def get_funding() -> List[Funding]: def get_funding(
edited: Optional[str] = "",
CLightningWallet: Optional[str] = '',
LndRestWallet: Optional[str] = '',
LndWallet: Optional[str] = '',
LntxbotWallet: Optional[str] = '',
LNPayWallet: Optional[str] = '',
LnbitsWallet: Optional[str] = '',
OpenNodeWallet: Optional[str] = '',
) -> List[Funding]:
if edited:
edited.split(",")
CLightningWallet.split(",")
LndRestWallet.split(",")
LndWallet.split(",")
LntxbotWallet.split(",")
LNPayWallet.split(",")
LnbitsWallet.split(",")
OpenNodeWallet.split(",")
print(OpenNodeWallet)
rows = g.db.fetchall("SELECT * FROM funding") rows = g.db.fetchall("SELECT * FROM funding")
return [Funding(**row) for row in rows] return [Funding(**row) for row in rows]

26
lnbits/core/migrations.py

@ -138,10 +138,14 @@ def m003_create_admin_table(db):
disabled_ext = None disabled_ext = None
force_https = True force_https = True
service_fee = 0 service_fee = 0
funding_source = ''
if getenv("LNBITS_SITE_TITLE"): if getenv("LNBITS_SITE_TITLE"):
site_title = getenv("LNBITS_SITE_TITLE") site_title = getenv("LNBITS_SITE_TITLE")
if getenv("LNBITS_TAGLINE"):
tagline = getenv("LNBITS_TAGLINE")
if getenv("LNBITS_ALLOWED_USERS"): if getenv("LNBITS_ALLOWED_USERS"):
allowed_users = getenv("LNBITS_ALLOWED_USERS") allowed_users = getenv("LNBITS_ALLOWED_USERS")
@ -160,6 +164,9 @@ def m003_create_admin_table(db):
if getenv("LNBITS_SERVICE_FEE"): if getenv("LNBITS_SERVICE_FEE"):
service_fee = getenv("LNBITS_SERVICE_FEE") service_fee = getenv("LNBITS_SERVICE_FEE")
if getenv("LNBITS_BACKEND_WALLET_CLASS"):
funding_source = getenv("LNBITS_BACKEND_WALLET_CLASS")
db.execute( db.execute(
""" """
CREATE TABLE IF NOT EXISTS admin ( CREATE TABLE IF NOT EXISTS admin (
@ -173,14 +180,15 @@ def m003_create_admin_table(db):
data_folder TEXT, data_folder TEXT,
disabled_ext TEXT, disabled_ext TEXT,
force_https BOOLEAN NOT NULL, force_https BOOLEAN NOT NULL,
service_fee INT NOT NULL service_fee INT NOT NULL,
funding_source TEXT
); );
""" """
) )
db.execute( db.execute(
""" """
INSERT INTO admin (user, site_title, tagline, primary_color, secondary_color, allowed_users, default_wallet_name, data_folder, disabled_ext, force_https, service_fee) INSERT INTO admin (user, site_title, tagline, primary_color, secondary_color, allowed_users, default_wallet_name, data_folder, disabled_ext, force_https, service_fee, funding_source)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""", """,
( (
user, user,
@ -194,6 +202,7 @@ def m003_create_admin_table(db):
disabled_ext, disabled_ext,
force_https, force_https,
service_fee, service_fee,
funding_source,
), ),
) )
@ -213,7 +222,6 @@ def m003_create_funding_table(db):
invoice_key TEXT, invoice_key TEXT,
admin_key TEXT, admin_key TEXT,
cert TEXT, cert TEXT,
active BOOLEAN DEFAULT 0,
balance int balance int
); );
""" """
@ -334,13 +342,3 @@ def m003_create_funding_table(db):
getenv("OPENNODE_ADMIN_KEY"), getenv("OPENNODE_ADMIN_KEY"),
), ),
) )
if getenv("LNBITS_BACKEND_WALLET_CLASS"):
db.execute(
"""
UPDATE funding
SET active = ?
WHERE backend_wallet = ?
""",
(1, getenv("LNBITS_BACKEND_WALLET_CLASS")),
)

2
lnbits/core/models.py

@ -31,6 +31,7 @@ class Admin(NamedTuple):
disabled_ext: str disabled_ext: str
force_https: bool force_https: bool
service_fee: int service_fee: int
funding_source: str
class Funding(NamedTuple): class Funding(NamedTuple):
@ -42,7 +43,6 @@ class Funding(NamedTuple):
invoice_key: str invoice_key: str
admin_key: str admin_key: str
cert: str cert: str
active: bool
balance: int balance: int

240
lnbits/core/templates/core/admin.html

@ -139,13 +139,14 @@ context %} {% block page %}
<q-expansion-item <q-expansion-item
expand-separator expand-separator
icon="payments" icon="payments"
:label="data.clightning.label" :label="data.admin.CLightningWallet.label"
@click="addSource('CLightningWallet')"
> >
<q-card> <q-card>
<q-card-section> <q-card-section>
<q-input <q-input
filled filled
v-model="data.clightning.endpoint" v-model="data.admin.CLightningWallet.endpoint"
label="GRPC Endpoint" label="GRPC Endpoint"
class="q-pr-md" class="q-pr-md"
hint="ie /home/bob/.lightning/bitcoin/lightning-rpc" hint="ie /home/bob/.lightning/bitcoin/lightning-rpc"
@ -157,7 +158,8 @@ context %} {% block page %}
<q-expansion-item <q-expansion-item
expand-separator expand-separator
icon="payments" icon="payments"
:label="data.lndrest.label" :label="data.admin.LndRestWallet.label"
@click="addSource('LndRestWallet')"
> >
<q-card> <q-card>
<q-card-section> <q-card-section>
@ -165,27 +167,21 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lndrest.endpoint" v-model="data.admin.LndRestWallet.endpoint"
label="LND REST Endpoint" label="LND REST Endpoint"
class="q-pr-md" class="q-pr-md"
hint="default 127.0.0.1" hint="default 127.0.0.1"
></q-input> ></q-input>
</div> </div>
<div class="col"> <div class="col">
<q-input
filled
v-model="data.lndrest.port"
label="LND REST port"
class="q-pr-md"
hint="Deafault 8080"
></q-input>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lndrest.cert" v-model="data.admin.LndRestWallet.cert"
label="LND self-signed cert" label="LND self-signed cert"
class="q-pr-md" class="q-pr-md"
hint="Location of your ssl cert" hint="Location of your ssl cert"
@ -194,7 +190,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lndrest.admin" v-model="data.admin.LndRestWallet.admin"
label="LND admin macaroon" label="LND admin macaroon"
class="q-pr-md" class="q-pr-md"
hint="Your admin macaroon as hex or location" hint="Your admin macaroon as hex or location"
@ -205,7 +201,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lndrest.invoice" v-model="data.admin.LndRestWallet.invoice"
label="LND invoice macaroon" label="LND invoice macaroon"
class="q-pr-md" class="q-pr-md"
hint="Your invoice macaroon as hex or location" hint="Your invoice macaroon as hex or location"
@ -214,7 +210,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lndrest.read" v-model="data.admin.LndRestWallet.read"
label="LND read macaroon" label="LND read macaroon"
class="q-pr-md" class="q-pr-md"
hint="Your read macaroon as hex or location" hint="Your read macaroon as hex or location"
@ -228,7 +224,8 @@ context %} {% block page %}
<q-expansion-item <q-expansion-item
expand-separator expand-separator
icon="payments" icon="payments"
:label="data.lndgrpc.label" :label="data.admin.LndWallet.label"
@click="addSource('LndWallet')"
> >
<q-card> <q-card>
<q-card-section> <q-card-section>
@ -236,7 +233,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lndgrpc.endpoint" v-model="data.admin.LndWallet.endpoint"
label="LND GRPC Endpoint" label="LND GRPC Endpoint"
class="q-pr-md" class="q-pr-md"
hint="default 127.0.0.1" hint="default 127.0.0.1"
@ -245,7 +242,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lndgrpc.port" v-model="data.admin.LndWallet.port"
label="LND GRPC port" label="LND GRPC port"
class="q-pr-md" class="q-pr-md"
hint="Deafault 11009" hint="Deafault 11009"
@ -257,7 +254,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lndgrpc.cert" v-model="data.admin.LndWallet.cert"
label="LND self-signed cert" label="LND self-signed cert"
class="q-pr-md" class="q-pr-md"
hint="Location of your ssl cert" hint="Location of your ssl cert"
@ -266,7 +263,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lndgrpc.admin" v-model="data.admin.LndWallet.admin"
label="LND admin macaroon" label="LND admin macaroon"
class="q-pr-md" class="q-pr-md"
hint="Your admin macaroon as hex or location" hint="Your admin macaroon as hex or location"
@ -277,7 +274,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lndgrpc.invoice" v-model="data.admin.LndWallet.invoice"
label="LND invoice macaroon" label="LND invoice macaroon"
class="q-pr-md" class="q-pr-md"
hint="Your invoice macaroon as hex or location" hint="Your invoice macaroon as hex or location"
@ -286,7 +283,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lndgrpc.read" v-model="data.admin.LndWallet.read"
label="LND read macaroon" label="LND read macaroon"
class="q-pr-md" class="q-pr-md"
hint="Your read macaroon as hex or location" hint="Your read macaroon as hex or location"
@ -300,7 +297,8 @@ context %} {% block page %}
<q-expansion-item <q-expansion-item
expand-separator expand-separator
icon="payments" icon="payments"
:label="data.lntxbot.label" :label="data.admin.LntxbotWallet.label"
@click="addSource('LntxbotWallet')"
> >
<q-card> <q-card>
<q-card-section> <q-card-section>
@ -308,7 +306,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lntxbot.admin" v-model="data.admin.LntxbotWallet.admin"
label="Admin key" label="Admin key"
class="q-pr-md" class="q-pr-md"
hint="use /api in LNTXBOT" hint="use /api in LNTXBOT"
@ -317,7 +315,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lntxbot.invoice" v-model="data.admin.LntxbotWallet.invoice"
label="Invoice key" label="Invoice key"
class="q-pr-md" class="q-pr-md"
></q-input> ></q-input>
@ -330,7 +328,8 @@ context %} {% block page %}
<q-expansion-item <q-expansion-item
expand-separator expand-separator
icon="payments" icon="payments"
:label="data.lnpay.label" :label="data.admin.LNPayWallet.label"
@click="addSource('LNPayWallet')"
> >
<q-card> <q-card>
<q-card-section> <q-card-section>
@ -338,7 +337,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lnpay.cert" v-model="data.admin.LNPayWallet.cert"
label="API key" label="API key"
class="q-pr-md" class="q-pr-md"
></q-input> ></q-input>
@ -346,7 +345,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lnpay.admin" v-model="data.admin.LNPayWallet.admin"
label="Admin key" label="Admin key"
class="q-pr-md q-pb-md" class="q-pr-md q-pb-md"
></q-input> ></q-input>
@ -356,7 +355,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lnpay.invoice" v-model="data.admin.LNPayWallet.invoice"
label="Invoice key" label="Invoice key"
class="q-pr-md" class="q-pr-md"
></q-input> ></q-input>
@ -364,7 +363,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lnpay.read" v-model="data.admin.LNPayWallet.read"
label="Read key" label="Read key"
class="q-pr-md" class="q-pr-md"
></q-input> ></q-input>
@ -377,7 +376,8 @@ context %} {% block page %}
<q-expansion-item <q-expansion-item
expand-separator expand-separator
icon="payments" icon="payments"
:label="data.lnbits.label" :label="data.admin.LnbitsWallet.label"
@click="addSource('LnbitsWallet')"
> >
<q-card> <q-card>
<q-card-section> <q-card-section>
@ -385,7 +385,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lnbits.endpoint" v-model="data.admin.LnbitsWallet.endpoint"
label="LNbits endpoint" label="LNbits endpoint"
class="q-pr-md" class="q-pr-md"
hint="ie https://lnbits.com, default 127.0.0.1" hint="ie https://lnbits.com, default 127.0.0.1"
@ -397,7 +397,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lnbits.admin" v-model="data.admin.LnbitsWallet.admin"
label="Admin key" label="Admin key"
class="q-pr-md q-pb-md" class="q-pr-md q-pb-md"
></q-input> ></q-input>
@ -405,7 +405,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.lnbits.invoice" v-model="data.admin.LnbitsWallet.invoice"
label="Invoice key" label="Invoice key"
class="q-pr-md" class="q-pr-md"
></q-input> ></q-input>
@ -418,7 +418,8 @@ context %} {% block page %}
<q-expansion-item <q-expansion-item
expand-separator expand-separator
icon="payments" icon="payments"
:label="data.opennode.label" :label="data.admin.OpenNodeWallet.label"
@click="addSource('OpenNodeWallet')"
> >
<q-card> <q-card>
<q-card-section> <q-card-section>
@ -426,7 +427,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.opennode.admin" v-model="data.admin.OpenNodeWallet.admin"
label="Admin key" label="Admin key"
class="q-pr-md" class="q-pr-md"
></q-input> ></q-input>
@ -434,7 +435,7 @@ context %} {% block page %}
<div class="col"> <div class="col">
<q-input <q-input
filled filled
v-model="data.opennode.invoice" v-model="data.admin.OpenNodeWallet.invoice"
label="Invoice key" label="Invoice key"
class="q-pr-md" class="q-pr-md"
></q-input> ></q-input>
@ -444,12 +445,12 @@ context %} {% block page %}
</q-card> </q-card>
</q-expansion-item> </q-expansion-item>
</q-list> </q-list>
<q-select outlined v-model="data.admin.funding_source_primary" label="Select main funding source" :options="data.funding_source" label="Outlined"></q-select>
<div> <div>
<q-btn <q-btn
label="Launch LNbits!" label="Launch LNbits!"
type="submit" type="submit"
color="deep-purple" color="primary"
></q-btn> ></q-btn>
<q-btn <q-btn
v-if="cancel.on" v-if="cancel.on"
@ -496,23 +497,30 @@ context %} {% block page %}
mixins: [windowMixin], mixins: [windowMixin],
data: function () { data: function () {
return { return {
cancel: {}, cancel: {},
data: { data: {
admin: {}, funding_source: ['CLightningWallet', 'LndRestWallet', 'LndWallet', 'LntxbotWallet', 'LNPayWallet', 'LnbitsWallet', 'OpenNodeWallet'],
clightning: {endpoint: ''},
lndrest: {endpoint: '', invoice: '', read: '', admin: '', cert: ''}, admin: {
lndgrpc: { site_title: 'LNbits',
endpoint: '', tagline: 'Free and open source wallet system',
port: '', primary_color:'#FF00FF',
invoice: '', secondary_color:'#FF00FF',
read: '', funding_source_primary: '',
admin: '', funding_source_edited: '',
cert: '' service_fee: 0,
}, disabled_ext: '',
lntxbot: {invoice: '', admin: ''}, edited: [],
lnpay: {endpoint: '', invoice: '', read: '', admin: '', cert: ''}, CLightningWallet: {endpoint: '', port: '', invoice: '', read: '', admin: '', cert: ''},
lnbits: {endpoint: '', invoice: '', read: '', admin: ''}, LndRestWallet:{endpoint: '', port: '', invoice: '', read: '', admin: '', cert: ''},
opennode: {invoice: '', read: '', admin: ''} LndWallet: {endpoint: '', port: '', invoice: '', read: '', admin: '', cert: ''},
LntxbotWallet:{endpoint: '', port: '', invoice: '', read: '', admin: '', cert: ''},
LNPayWallet:{endpoint: '', port: '', invoice: '', read: '', admin: '', cert: ''},
LnbitsWallet:{endpoint: '', port: '', invoice: '', read: '', admin: '', cert: ''},
OpenNodeWallet:{endpoint: '', port: '', invoice: '', read: '', admin: '', cert: ''},
},
}, },
options: [ options: [
@ -530,92 +538,94 @@ context %} {% block page %}
}, },
created: function () { created: function () {
var self = this 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(','))
if (usr != null) { if (usr != null) {
self.cancel.on = true self.cancel.on = true
} }
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.funding_source_primary = '{{admin.funding_source}}'
self.data.admin.disabled_ext = '{{admin.disabled_ext}}'.split(',')
funding = JSON.parse('{{ funding | tojson }}') funding = JSON.parse('{{ funding | tojson }}')
self.data.lndrest.label = 'LND REST' self.data.admin.LndRestWallet.label = 'LndRestWallet'
self.data.clightning.label = 'CLightning GRPC' self.data.admin.CLightningWallet.label = 'CLightningWallet'
self.data.lndgrpc.label = 'LND GRPC' self.data.admin.LndWallet.label = 'LndWallet'
self.data.lntxbot.label = 'LNTXBOT' self.data.admin.LntxbotWallet.label = 'LntxbotWallet'
self.data.lnpay.label = 'LNpay' self.data.admin.LNPayWallet.label = 'LNPayWallet'
self.data.lnbits.label = 'LNbits' self.data.admin.LnbitsWallet.label = 'LnbitsWallet'
self.data.opennode.label = 'Opennode' self.data.admin.OpenNodeWallet.label = 'OpenNodeWallet'
var i var i
for (i = 0; i < funding.length; i++) { for (i = 0; i < funding.length; i++) {
if (funding[i][1] == 'CLightningWallet') { if (funding[i][1] == 'CLightningWallet') {
self.data.clightning.endpoint = funding[i][2] self.data.admin.CLightningWallet.endpoint = funding[i][2]
if (funding[i][8] == 1) { if (self.data.admin.funding_source_primary == 'CLightningWallet') {
self.data.clightning.label = 'CLightning GRPC (main funding source)' self.data.admin.CLightningWallet.label = 'CLightningWallet (main funding source)'
} }
} }
if (funding[i][1] == 'LndRestWallet') { if (funding[i][1] == 'LndRestWallet') {
self.data.lndrest.endpoint = funding[i][2] self.data.admin.LndRestWallet.endpoint = funding[i][2]
self.data.lndrest.read = funding[i][4] self.data.admin.LndRestWallet.read = funding[i][4]
self.data.lndrest.invoice = funding[i][5] self.data.admin.LndRestWallet.invoice = funding[i][5]
self.data.lndrest.admin = funding[i][6] self.data.admin.LndRestWallet.admin = funding[i][6]
self.data.lndrest.cert = funding[i][7] self.data.admin.LndRestWallet.cert = funding[i][7]
if (funding[i][8] == 1) { if (self.data.admin.funding_source_primary == 'LndRestWallet') {
self.data.lndrest.label = 'LND REST (main funding source)' self.data.admin.LndRestWallet.label = 'LndRestWallet (main funding source)'
} }
} }
if (funding[i][1] == 'LndWallet') { if (funding[i][1] == 'LndWallet') {
self.data.lndgrpc.endpoint = funding[i][2] self.data.admin.LndWallet.endpoint = funding[i][2]
self.data.lndgrpc.port = funding[i][3] self.data.admin.LndWallet.port = funding[i][3]
self.data.lndgrpc.read = funding[i][4] self.data.admin.LndWallet.read = funding[i][4]
self.data.lndgrpc.invoice = funding[i][5] self.data.admin.LndWallet.invoice = funding[i][5]
self.data.lndgrpc.admin = funding[i][6] self.data.admin.LndWallet.admin = funding[i][6]
self.data.lndgrpc.cert = funding[i][7] self.data.admin.LndWallet.cert = funding[i][7]
if (funding[i][8] == 1) { if (self.data.admin.funding_source_primary == 'LndWallet') {
self.data.lndgrpc.label = 'LND GRPC (main funding source)' self.data.admin.LndWallet.label = 'LndWallet (main funding source)'
} }
} }
if (funding[i][1] == 'LntxbotWallet') { if (funding[i][1] == 'LntxbotWallet') {
self.data.lntxbot.invoice = funding[i][5] self.data.admin.LntxbotWallet.invoice = funding[i][5]
self.data.lntxbot.admin = funding[i][6] self.data.admin.LntxbotWallet.admin = funding[i][6]
if (funding[i][8] == 1) { if (self.data.admin.funding_source_primary == 'LntxbotWallet') {
self.data.lntxbot.label = 'LNTXBOT (main funding source)' self.data.admin.LntxbotWallet.label = 'LntxbotWallet (main funding source)'
} }
} }
if (funding[i][1] == 'LNPayWallet') { if (funding[i][1] == 'LNPayWallet') {
self.data.lnpay.read = funding[i][4] self.data.admin.LNPayWallet.read = funding[i][4]
self.data.lnpay.invoice = funding[i][5] self.data.admin.LNPayWallet.invoice = funding[i][5]
self.data.lnpay.admin = funding[i][6] self.data.admin.LNPayWallet.admin = funding[i][6]
self.data.lnpay.cert = funding[i][7] self.data.admin.LNPayWallet.cert = funding[i][7]
if (funding[i][8] == 1) { if (self.data.admin.funding_source_primary == 'LNPayWallet') {
self.data.lnpay.label = 'LNpay (main funding source)' self.data.admin.LNPayWallet.label = 'LNPayWallet (main funding source)'
} }
} }
if (funding[i][1] == 'LnbitsWallet') { if (funding[i][1] == 'LnbitsWallet') {
self.data.lnbits.endpoint = funding[i][2] self.data.admin.LnbitsWallet.endpoint = funding[i][2]
self.data.lnbits.read = funding[i][4] self.data.admin.LnbitsWallet.read = funding[i][4]
self.data.lnbits.invoice = funding[i][5] self.data.admin.LnbitsWallet.invoice = funding[i][5]
self.data.lnbits.admin = funding[i][6] self.data.admin.LnbitsWallet.admin = funding[i][6]
if (funding[i][8] == 1) { if (self.data.admin.funding_source_primary == 'LnbitsWallet') {
self.data.lnbits.label = 'LNbits (main funding source)' self.data.admin.LnbitsWallet.label = 'LnbitsWallet (main funding source)'
} }
} }
if (funding[i][1] == 'OpenNodeWallet') { if (funding[i][1] == 'OpenNodeWallet') {
self.data.opennode.read = funding[i][4] self.data.admin.OpenNodeWallet.read = funding[i][4]
self.data.opennode.invoice = funding[i][5] self.data.admin.OpenNodeWallet.invoice = funding[i][5]
self.data.opennode.admin = funding[i][6] self.data.admin.OpenNodeWallet.admin = funding[i][6]
if (funding[i][8] == 1) { if (self.data.admin.funding_source_primary == 'OpenNodeWallet') {
self.data.opennode.label = 'Opennode (main funding source)' self.data.admin.OpenNodeWallet.label = 'OpenNodeWallet (main funding source)'
} }
} }
} }
@ -624,16 +634,22 @@ context %} {% block page %}
createWallet: function () { createWallet: function () {
LNbits.href.createWallet(this.walletName) LNbits.href.createWallet(this.walletName)
}, },
addSource: function (source) {
var self = this
self.data.admin.edited.push(source)
console.log(self.data.admin.edited)
},
LaunchLNbits: function () { LaunchLNbits: function () {
var self = this var self = this
var data = self.data var data = self.data
data.admin.disabled_ext = data.admin.disabled_ext.toString() data.admin.disabled_ext = data.admin.disabled_ext.toString()
console.log(data.admin.disabled_ext) data.admin.service_fee = parseInt(data.admin.service_fee)
data.admin.edited = data.admin.edited.toString()
LNbits.api LNbits.api
.request('POST', '/api/v1/admin', 'wallet.inkey', data.admin) .request('POST', '/api/v1/admin', 'wallet.inkey', data.admin)
.then(function (response) { .then(function (response) {
console.log(response.data) console.log(response.data)
window.location.href = '/wallet?usr=' + response.data[0] window.location.href = '/wallet?usr=' + response.data[0]
}) })
.catch(function (error) { .catch(function (error) {
LNbits.utils.notifyApiError(error) LNbits.utils.notifyApiError(error)

3
lnbits/core/templates/core/extensions.html

@ -10,10 +10,11 @@ output='__bundle__/core/extensions.js', 'core/js/extensions.js' %}
:key="extension.code" :key="extension.code"
> >
<div v-if="'{{admin}}' != '{{g.user.id}}'">
<div v-if="'{{admin}}' != '{{g.user.id}}'">
<div v-if="extension.name != 'Admin'" > <div v-if="extension.name != 'Admin'" >
<q-card style="min-width: 300px" class="col-3 col-md-4 col-lg-3"> <q-card style="min-width: 300px" class="col-3 col-md-4 col-lg-3">
<q-card-section> <q-card-section>
<q-icon <q-icon

13
lnbits/core/views/api.py

@ -133,15 +133,24 @@ def api_payment(payment_hash):
"tagline": {"type": "string", "empty": False, "required": True}, "tagline": {"type": "string", "empty": False, "required": True},
"primary_color": {"type": "string", "empty": False, "required": True}, "primary_color": {"type": "string", "empty": False, "required": True},
"secondary_color": {"type": "string", "empty": False, "required": True}, "secondary_color": {"type": "string", "empty": False, "required": True},
"allowed_users": {"type": "string"}, "allowed_users": {"type": "string", "required": True},
"default_wallet_name": {"type": "string", "empty": False, "required": True}, "default_wallet_name": {"type": "string", "empty": False, "required": True},
"data_folder": {"type": "string", "empty": False, "required": True}, "data_folder": {"type": "string", "empty": False, "required": True},
"disabled_ext": {"type": "string", "empty": False, "required": True}, "disabled_ext": {"type": "string", "empty": False, "required": True},
"service_fee": {"type": "integer", "min": 0, "max": 90, "required": True}, "service_fee": {"type": "integer", "min": 0, "max": 90, "required": True},
"funding_source_primary": {"type": "string", "empty": False, "required": True},
"edited": {"type": "string", "required": True},
"CLightningWallet": {"type": "list", "required": True},
"LndRestWallet": {"type": "list", "required": True},
"LndWallet": {"type": "list", "required": True},
"LNPayWallet": {"type": "list", "required": True},
"LntxbotWallet": {"type": "list", "required": True},
"LnbitsWallet": {"type": "list", "required": True},
"OpenNodeWallet": {"type": "list", "required": True},
} }
) )
def api_admin(): def api_admin():
print(g.data)
admin = get_admin(None) admin = get_admin(None)
if admin.user != None and admin.user != g.data["user"]: if admin.user != None and admin.user != g.data["user"]:

22
lnbits/core/views/generic.py

@ -104,15 +104,17 @@ def deletewallet():
def admin_setup(): def admin_setup():
user_id = request.args.get("usr", type=str) user_id = request.args.get("usr", type=str)
admin = get_admin() admin = get_admin()
if admin.user != user_id: if admin != None:
abort(HTTPStatus.FORBIDDEN, "Admin only") if admin[0] == None:
admin_user = get_user(create_account().id).id
if admin.user != user_id:
abort(HTTPStatus.FORBIDDEN, "Admin only")
if not user_id:
admin_user = get_user(create_account().id).id
print(admin_user)
admin = get_admin()
else:
admin_user = user_id
funding = get_funding() funding = get_funding()
if admin[0] == None:
admin_user = get_user(create_account().id).id
else:
admin_user = admin[0]
if admin.user != None and admin.user != user_id:
abort(HTTPStatus.FORBIDDEN, "Admin only")
return render_template("core/admin.html", admin=admin, funding=funding, admin_user=admin_user) return render_template("core/admin.html", admin=admin, funding=funding, admin_user=admin_user)

2
lnbits/static/css/base.css

@ -98,5 +98,5 @@ video {
} }
.bg-primary { .bg-primary {
background: #000000 !important; background: #673ab7 !important;
} }

Loading…
Cancel
Save