Browse Source

Pulls env into /admin, then updates admin/funding DB

adminvar
benarc 4 years ago
parent
commit
6fc74e06fd
  1. 38
      lnbits/core/crud.py
  2. 13
      lnbits/core/migrations.py
  3. 195
      lnbits/core/templates/core/admin.html
  4. 21
      lnbits/core/views/api.py
  5. 334
      lnbits/extensions/admin/templates/admin/index.html

38
lnbits/core/crud.py

@ -345,11 +345,11 @@ def get_admin(
funding_source_primary,
),
)
row = g.db.fetchone("SELECT * FROM admin WHERE 1")
return Admin(**row) if row else None
def get_funding(
edited: Optional[str] = "",
CLightningWallet: Optional[str] = '',
LndRestWallet: Optional[str] = '',
LndWallet: Optional[str] = '',
@ -358,16 +358,32 @@ def get_funding(
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)
sources = [CLightningWallet, LndRestWallet, LndWallet, LntxbotWallet, LNPayWallet, LnbitsWallet, OpenNodeWallet]
for source in sources:
fsource = ['1','1','1','1','1','1','1','1','1','1']
tsource = source.split(',')
num = 0
for ttsource in tsource:
fsource[num] = ttsource
num = num + 1
print(fsource)
if int(fsource[7]) == 1:
g.db.execute(
"""
UPDATE funding
SET endpoint = ?, port = ?, read_key = ?, invoice_key = ?, admin_key = ?, cert = ?
WHERE backend_wallet = ?
""",
(
fsource[0],
fsource[1],
fsource[2],
fsource[3],
fsource[4],
fsource[5],
fsource[8],
),
)
rows = g.db.fetchall("SELECT * FROM funding")
return [Funding(**row) for row in rows]

13
lnbits/core/migrations.py

@ -237,9 +237,7 @@ def m003_create_funding_table(db):
LntxbotWallet = db.fetchall("SELECT * FROM funding WHERE backend_wallet = ?", ("LntxbotWallet",))
OpenNodeWallet = db.fetchall("SELECT * FROM funding WHERE backend_wallet = ?", ("OpenNodeWallet",))
# If the funding source rows do not exist and there is data in env for them, return the data and put it in a row
if getenv("CLIGHTNING_RPC") and CLightningWallet != None:
db.execute(
"""
INSERT INTO funding (id, backend_wallet, endpoint)
@ -247,7 +245,7 @@ def m003_create_funding_table(db):
""",
(urlsafe_short_hash(), "CLightningWallet", getenv("CLIGHTNING_RPC")),
)
if getenv("LNBITS_INVOICE_MACAROON") and LnbitsWallet != None:
db.execute(
"""
INSERT INTO funding (id, backend_wallet, endpoint, invoice_key, admin_key)
@ -261,7 +259,7 @@ def m003_create_funding_table(db):
getenv("LNBITS_ADMIN_MACAROON"),
),
)
if getenv("LND_GRPC_ENDPOINT") and LndWallet != None:
db.execute(
"""
INSERT INTO funding (id, backend_wallet, endpoint, port, read_key, invoice_key, admin_key, cert)
@ -279,7 +277,7 @@ def m003_create_funding_table(db):
),
)
if getenv("LND_REST_ENDPOINT") and LndRestWallet != None:
db.execute(
"""
INSERT INTO funding (id, backend_wallet, endpoint, read_key, invoice_key, admin_key, cert)
@ -296,7 +294,6 @@ def m003_create_funding_table(db):
),
)
if getenv("LNPAY_INVOICE_KEY") and LNPayWallet != None:
db.execute(
"""
INSERT INTO funding (id, backend_wallet, endpoint, read_key, invoice_key, admin_key, cert)
@ -313,7 +310,7 @@ def m003_create_funding_table(db):
),
)
if getenv("LNTXBOT_INVOICE_KEY") and LntxbotWallet != None:
db.execute(
"""
INSERT INTO funding (id, backend_wallet, endpoint, invoice_key, admin_key)
@ -328,7 +325,7 @@ def m003_create_funding_table(db):
),
)
if getenv("OPENNODE_INVOICE_KEY") and OpenNodeWallet != None:
db.execute(
"""
INSERT INTO funding (id, backend_wallet, endpoint, invoice_key, admin_key)

195
lnbits/core/templates/core/admin.html

@ -139,14 +139,14 @@ context %} {% block page %}
<q-expansion-item
expand-separator
icon="payments"
:label="data.admin.CLightningWallet.label"
@click="addSource('CLightningWallet')"
:label="data.admin.CLightningWallet[6]"
@click="data.admin.CLightningWallet[7] = 1"
>
<q-card>
<q-card-section>
<q-input
filled
v-model="data.admin.CLightningWallet.endpoint"
v-model="data.admin.CLightningWallet[0]"
label="GRPC Endpoint"
class="q-pr-md"
hint="ie /home/bob/.lightning/bitcoin/lightning-rpc"
@ -158,8 +158,8 @@ context %} {% block page %}
<q-expansion-item
expand-separator
icon="payments"
:label="data.admin.LndRestWallet.label"
@click="addSource('LndRestWallet')"
:label="data.admin.LndRestWallet[6]"
@click="data.admin.LndRestWallet[7] = 1"
>
<q-card>
<q-card-section>
@ -167,7 +167,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LndRestWallet.endpoint"
v-model="data.admin.LndRestWallet[0]"
label="LND REST Endpoint"
class="q-pr-md"
hint="default 127.0.0.1"
@ -181,7 +181,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LndRestWallet.cert"
v-model="data.admin.LndRestWallet[5]"
label="LND self-signed cert"
class="q-pr-md"
hint="Location of your ssl cert"
@ -190,7 +190,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LndRestWallet.admin"
v-model="data.admin.LndRestWallet[4]"
label="LND admin macaroon"
class="q-pr-md"
hint="Your admin macaroon as hex or location"
@ -201,7 +201,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LndRestWallet.invoice"
v-model="data.admin.LndRestWallet[3]"
label="LND invoice macaroon"
class="q-pr-md"
hint="Your invoice macaroon as hex or location"
@ -210,7 +210,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LndRestWallet.read"
v-model="data.admin.LndRestWallet[2]"
label="LND read macaroon"
class="q-pr-md"
hint="Your read macaroon as hex or location"
@ -224,8 +224,8 @@ context %} {% block page %}
<q-expansion-item
expand-separator
icon="payments"
:label="data.admin.LndWallet.label"
@click="addSource('LndWallet')"
:label="data.admin.LndWallet[6]"
@click="data.admin.LndWallet[7] = 1"
>
<q-card>
<q-card-section>
@ -233,7 +233,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LndWallet.endpoint"
v-model="data.admin.LndWallet[0]"
label="LND GRPC Endpoint"
class="q-pr-md"
hint="default 127.0.0.1"
@ -242,7 +242,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LndWallet.port"
v-model="data.admin.LndWallet[1]"
label="LND GRPC port"
class="q-pr-md"
hint="Deafault 11009"
@ -254,7 +254,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LndWallet.cert"
v-model="data.admin.LndWallet[5]"
label="LND self-signed cert"
class="q-pr-md"
hint="Location of your ssl cert"
@ -263,7 +263,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LndWallet.admin"
v-model="data.admin.LndWallet[4]"
label="LND admin macaroon"
class="q-pr-md"
hint="Your admin macaroon as hex or location"
@ -274,7 +274,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LndWallet.invoice"
v-model="data.admin.LndWallet[3]"
label="LND invoice macaroon"
class="q-pr-md"
hint="Your invoice macaroon as hex or location"
@ -283,7 +283,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LndWallet.read"
v-model="data.admin.LndWallet[2]"
label="LND read macaroon"
class="q-pr-md"
hint="Your read macaroon as hex or location"
@ -297,8 +297,8 @@ context %} {% block page %}
<q-expansion-item
expand-separator
icon="payments"
:label="data.admin.LntxbotWallet.label"
@click="addSource('LntxbotWallet')"
:label="data.admin.LntxbotWallet[6]"
@click="data.admin.LntxbotWallet[7] = 1"
>
<q-card>
<q-card-section>
@ -306,7 +306,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LntxbotWallet.admin"
v-model="data.admin.LntxbotWallet[4]"
label="Admin key"
class="q-pr-md"
hint="use /api in LNTXBOT"
@ -315,7 +315,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LntxbotWallet.invoice"
v-model="data.admin.LntxbotWallet[3]"
label="Invoice key"
class="q-pr-md"
></q-input>
@ -328,8 +328,8 @@ context %} {% block page %}
<q-expansion-item
expand-separator
icon="payments"
:label="data.admin.LNPayWallet.label"
@click="addSource('LNPayWallet')"
:label="data.admin.LNPayWallet[6]"
@click="data.admin.LNPayWallet[7] = 1"
>
<q-card>
<q-card-section>
@ -337,7 +337,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LNPayWallet.cert"
v-model="data.admin.LNPayWallet[5]"
label="API key"
class="q-pr-md"
></q-input>
@ -345,7 +345,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LNPayWallet.admin"
v-model="data.admin.LNPayWallet[4]"
label="Admin key"
class="q-pr-md q-pb-md"
></q-input>
@ -355,7 +355,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LNPayWallet.invoice"
v-model="data.admin.LNPayWallet[3]"
label="Invoice key"
class="q-pr-md"
></q-input>
@ -363,7 +363,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LNPayWallet.read"
v-model="data.admin.LNPayWallet[2]"
label="Read key"
class="q-pr-md"
></q-input>
@ -376,8 +376,8 @@ context %} {% block page %}
<q-expansion-item
expand-separator
icon="payments"
:label="data.admin.LnbitsWallet.label"
@click="addSource('LnbitsWallet')"
:label="data.admin.LnbitsWallet[6]"
@click="data.admin.LnbitsWallet[7] = 1"
>
<q-card>
<q-card-section>
@ -385,7 +385,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LnbitsWallet.endpoint"
v-model="data.admin.LnbitsWallet[0]"
label="LNbits endpoint"
class="q-pr-md"
hint="ie https://lnbits.com, default 127.0.0.1"
@ -397,7 +397,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LnbitsWallet.admin"
v-model="data.admin.LnbitsWallet[4]"
label="Admin key"
class="q-pr-md q-pb-md"
></q-input>
@ -405,7 +405,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.LnbitsWallet.invoice"
v-model="data.admin.LnbitsWallet[3]"
label="Invoice key"
class="q-pr-md"
></q-input>
@ -418,8 +418,8 @@ context %} {% block page %}
<q-expansion-item
expand-separator
icon="payments"
:label="data.admin.OpenNodeWallet.label"
@click="addSource('OpenNodeWallet')"
:label="data.admin.OpenNodeWallet[6]"
@click="data.admin.OpenNodeWallet[7] = 1"
>
<q-card>
<q-card-section>
@ -427,7 +427,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.OpenNodeWallet.admin"
v-model="data.admin.OpenNodeWallet[4]"
label="Admin key"
class="q-pr-md"
></q-input>
@ -435,7 +435,7 @@ context %} {% block page %}
<div class="col">
<q-input
filled
v-model="data.admin.OpenNodeWallet.invoice"
v-model="data.admin.OpenNodeWallet[3]"
label="Invoice key"
class="q-pr-md"
></q-input>
@ -512,13 +512,14 @@ context %} {% block page %}
service_fee: 0,
disabled_ext: '',
edited: [],
CLightningWallet: {endpoint: '', port: '', invoice: '', read: '', admin: '', cert: ''},
LndRestWallet:{endpoint: '', port: '', invoice: '', read: '', admin: '', cert: ''},
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: ''},
CLightningWallet: ['', '', '', '', '', '', '', 0, 'CLightningWallet'],
LndRestWallet: ['', '', '', '', '', '', '', 0, 'LndRestWallet'],
LndWallet: ['', '', '', '', '', '', '', 0, 'LndWallet'],
LntxbotWallet: ['', '', '', '', '', '', '', 0, 'LntxbotWallet'],
LNPayWallet: ['', '', '', '', '', '', '', 0, 'LNPayWallet'],
LnbitsWallet: ['', '', '', '', '', '', '', 0, 'LnbitsWallet'],
OpenNodeWallet: ['', '', '', '', '', '', '', 0, 'OpenNodeWallet'],
senddata: {},
},
},
@ -555,77 +556,77 @@ context %} {% block page %}
self.data.admin.funding_source_primary = '{{admin.funding_source}}'
self.data.admin.disabled_ext = '{{admin.disabled_ext}}'.split(',')
funding = JSON.parse('{{ funding | tojson }}')
self.data.admin.LndRestWallet.label = 'LndRestWallet'
self.data.admin.CLightningWallet.label = 'CLightningWallet'
self.data.admin.LndWallet.label = 'LndWallet'
self.data.admin.LntxbotWallet.label = 'LntxbotWallet'
self.data.admin.LNPayWallet.label = 'LNPayWallet'
self.data.admin.LnbitsWallet.label = 'LnbitsWallet'
self.data.admin.OpenNodeWallet.label = 'OpenNodeWallet'
self.data.admin.LndRestWallet[6] = 'LndRestWallet'
self.data.admin.CLightningWallet[6] = 'CLightningWallet'
self.data.admin.LndWallet[6] = 'LndWallet'
self.data.admin.LntxbotWallet[6] = 'LntxbotWallet'
self.data.admin.LNPayWallet[6] = 'LNPayWallet'
self.data.admin.LnbitsWallet[6] = 'LnbitsWallet'
self.data.admin.OpenNodeWallet[6] = 'OpenNodeWallet'
var i
for (i = 0; i < funding.length; i++) {
if (funding[i][1] == 'CLightningWallet') {
self.data.admin.CLightningWallet.endpoint = funding[i][2]
self.data.admin.CLightningWallet[0] = funding[i][2]
if (self.data.admin.funding_source_primary == 'CLightningWallet') {
self.data.admin.CLightningWallet.label = 'CLightningWallet (main funding source)'
self.data.admin.CLightningWallet[6] = 'CLightningWallet (main funding source)'
}
}
if (funding[i][1] == 'LndRestWallet') {
self.data.admin.LndRestWallet.endpoint = funding[i][2]
self.data.admin.LndRestWallet.read = funding[i][4]
self.data.admin.LndRestWallet.invoice = funding[i][5]
self.data.admin.LndRestWallet.admin = funding[i][6]
self.data.admin.LndRestWallet.cert = funding[i][7]
self.data.admin.LndRestWallet[0] = funding[i][2]
self.data.admin.LndRestWallet[2] = funding[i][4]
self.data.admin.LndRestWallet[3] = funding[i][5]
self.data.admin.LndRestWallet[4]= funding[i][6]
self.data.admin.LndRestWallet[5] = funding[i][7]
if (self.data.admin.funding_source_primary == 'LndRestWallet') {
self.data.admin.LndRestWallet.label = 'LndRestWallet (main funding source)'
self.data.admin.LndRestWallet[6] = 'LndRestWallet (main funding source)'
}
}
if (funding[i][1] == 'LndWallet') {
self.data.admin.LndWallet.endpoint = funding[i][2]
self.data.admin.LndWallet.port = funding[i][3]
self.data.admin.LndWallet.read = funding[i][4]
self.data.admin.LndWallet.invoice = funding[i][5]
self.data.admin.LndWallet.admin = funding[i][6]
self.data.admin.LndWallet.cert = funding[i][7]
self.data.admin.LndWallet[0] = funding[i][2] //endpoint
self.data.admin.LndWallet[1] = funding[i][3] //port
self.data.admin.LndWallet[2] = funding[i][4] //read
self.data.admin.LndWallet[3] = funding[i][5] //invoice
self.data.admin.LndWallet[4] = funding[i][6] //admin
self.data.admin.LndWallet[5]= funding[i][7] //cert
if (self.data.admin.funding_source_primary == 'LndWallet') {
self.data.admin.LndWallet.label = 'LndWallet (main funding source)'
self.data.admin.LndWallet[6] = 'LndWallet (main funding source)' //label
}
}
if (funding[i][1] == 'LntxbotWallet') {
self.data.admin.LntxbotWallet.invoice = funding[i][5]
self.data.admin.LntxbotWallet.admin = funding[i][6]
self.data.admin.LntxbotWallet[3] = funding[i][5]
self.data.admin.LntxbotWallet[4] = funding[i][6]
if (self.data.admin.funding_source_primary == 'LntxbotWallet') {
self.data.admin.LntxbotWallet.label = 'LntxbotWallet (main funding source)'
self.data.admin.LntxbotWallet[6] = 'LntxbotWallet (main funding source)'
}
}
if (funding[i][1] == 'LNPayWallet') {
self.data.admin.LNPayWallet.read = funding[i][4]
self.data.admin.LNPayWallet.invoice = funding[i][5]
self.data.admin.LNPayWallet.admin = funding[i][6]
self.data.admin.LNPayWallet.cert = funding[i][7]
self.data.admin.LNPayWallet[2] = funding[i][4]
self.data.admin.LNPayWallet[3] = funding[i][5]
self.data.admin.LNPayWallet[4] = funding[i][6]
self.data.admin.LNPayWallet[5] = funding[i][7]
if (self.data.admin.funding_source_primary == 'LNPayWallet') {
self.data.admin.LNPayWallet.label = 'LNPayWallet (main funding source)'
self.data.admin.LNPayWallet[6] = 'LNPayWallet (main funding source)'
}
}
if (funding[i][1] == 'LnbitsWallet') {
self.data.admin.LnbitsWallet.endpoint = funding[i][2]
self.data.admin.LnbitsWallet.read = funding[i][4]
self.data.admin.LnbitsWallet.invoice = funding[i][5]
self.data.admin.LnbitsWallet.admin = funding[i][6]
self.data.admin.LnbitsWallet[0] = funding[i][2]
self.data.admin.LnbitsWallet[2] = funding[i][4]
self.data.admin.LnbitsWallet[3] = funding[i][5]
self.data.admin.LnbitsWallet[4] = funding[i][6]
if (self.data.admin.funding_source_primary == 'LnbitsWallet') {
self.data.admin.LnbitsWallet.label = 'LnbitsWallet (main funding source)'
self.data.admin.LnbitsWallet[6] = 'LnbitsWallet (main funding source)'
}
}
if (funding[i][1] == 'OpenNodeWallet') {
self.data.admin.OpenNodeWallet.read = funding[i][4]
self.data.admin.OpenNodeWallet.invoice = funding[i][5]
self.data.admin.OpenNodeWallet.admin = funding[i][6]
self.data.admin.OpenNodeWallet[2] = funding[i][4]
self.data.admin.OpenNodeWallet[3] = funding[i][5]
self.data.admin.OpenNodeWallet[4] = funding[i][6]
if (self.data.admin.funding_source_primary == 'OpenNodeWallet') {
self.data.admin.OpenNodeWallet.label = 'OpenNodeWallet (main funding source)'
self.data.admin.OpenNodeWallet[6] = 'OpenNodeWallet (main funding source)'
}
}
}
@ -642,14 +643,30 @@ context %} {% block page %}
LaunchLNbits: function () {
var self = this
var data = self.data
data.admin.disabled_ext = data.admin.disabled_ext.toString()
data.admin.service_fee = parseInt(data.admin.service_fee)
data.admin.edited = data.admin.edited.toString()
data.admin.senddata.site_title = data.admin.site_title
data.admin.senddata.tagline = data.admin.tagline
data.admin.senddata.primary_color = data.admin.primary_color
data.admin.senddata.secondary_color = data.admin.secondary_color
data.admin.senddata.funding_source_primary = data.admin.funding_source_primary
data.admin.senddata.funding_source_edited = data.admin.funding_source_edited
data.admin.senddata.allowed_users = data.admin.allowed_users
data.admin.senddata.data_folder = data.admin.data_folder
data.admin.senddata.default_wallet_name = data.admin.default_wallet_name
data.admin.senddata.user = data.admin.user
data.admin.senddata.disabled_ext = data.admin.disabled_ext.toString()
data.admin.senddata.service_fee = parseInt(data.admin.service_fee)
data.admin.senddata.edited = data.admin.edited.toString()
data.admin.senddata.CLightningWallet = data.admin.CLightningWallet.toString()
data.admin.senddata.LndRestWallet = data.admin.LndRestWallet.toString()
data.admin.senddata.LndWallet = data.admin.LndWallet.toString()
data.admin.senddata.LntxbotWallet = data.admin.LntxbotWallet.toString()
data.admin.senddata.LNPayWallet = data.admin.LNPayWallet.toString()
data.admin.senddata.LnbitsWallet = data.admin.LnbitsWallet.toString()
data.admin.senddata.OpenNodeWallet = data.admin.OpenNodeWallet.toString()
LNbits.api
.request('POST', '/api/v1/admin', 'wallet.inkey', data.admin)
.request('POST', '/api/v1/admin', 'wallet.inkey', data.admin.senddata)
.then(function (response) {
console.log(response.data)
window.location.href = '/wallet?usr=' + response.data[0]
window.location.href = '/wallet?usr=' + response.data.admin[0]
})
.catch(function (error) {
LNbits.utils.notifyApiError(error)

21
lnbits/core/views/api.py

@ -5,7 +5,7 @@ from binascii import unhexlify
from lnbits import bolt11
from lnbits.core import core_app
from lnbits.core.services import create_invoice, pay_invoice
from lnbits.core.crud import delete_expired_invoices, get_admin, get_account
from lnbits.core.crud import delete_expired_invoices, get_admin, get_account, get_funding
from lnbits.decorators import api_check_wallet_key, api_validate_post_request
from lnbits.settings import WALLET, LNBITS_ADMIN_USERS
@ -139,18 +139,16 @@ def api_payment(payment_hash):
"disabled_ext": {"type": "string", "empty": False, "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},
"CLightningWallet": {"type": "string", "required": True},
"LndRestWallet": {"type": "string", "required": True},
"LndWallet": {"type": "string", "required": True},
"LNPayWallet": {"type": "string", "required": True},
"LntxbotWallet": {"type": "string", "required": True},
"LnbitsWallet": {"type": "string", "required": True},
"OpenNodeWallet": {"type": "string", "required": True},
}
)
def api_admin():
print(g.data)
admin = get_admin(None)
if admin.user != None and admin.user != g.data["user"]:
@ -160,4 +158,5 @@ def api_admin():
if not account:
return jsonify({"message": "Admin doesnt exist and neither do you!"}), HTTPStatus.FORBIDDEN
admin = get_admin(**g.data)
return jsonify(admin)
funding = get_funding(g.data['CLightningWallet'],g.data['LndRestWallet'],g.data['LndWallet'],g.data['LNPayWallet'],g.data['LntxbotWallet'],g.data['LnbitsWallet'],g.data['OpenNodeWallet'])
return jsonify({"admin": admin, "funding":funding})

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

@ -12,9 +12,13 @@
<div class="row">
<div class="col">
<q-card class="q-mr-md">
<q-form class="q-px-md q-py-md">
<div class="text-h6">Branding</div>
<div class="q-pa-md">
<q-form
@submit="LaunchLNbits"
@reset="cancelAdmin"
class="q-gutter-md"
>
<h6 class="q-my-md">Branding</h6>
<div class="row">
<div class="col">
<q-input
@ -33,8 +37,6 @@
></q-input>
</div>
</div>
<div class="row">
<div class="col">
<q-input
@ -76,9 +78,10 @@
</q-icon>
</template>
</q-input>
</div> </div>
</div>
</div>
<div class="text-h6">Service Settings</div>
<h6 class="q-my-md">Service settings</h6>
<div class="row">
<div class="col">
<q-input
@ -118,22 +121,27 @@
:options="options"
label="Disable extensions"
></q-select>
</div></div>
</div>
</div>
<h6 class="q-my-md">
Funding source information (at least one required)<small
><br />*if installed through RaspiBlitz, MyNode, etc, details
should be filled in for you</small
>
</h6>
<div class="text-h6">Funding Sources</div>
<q-list bordered class="rounded-borders">
<q-expansion-item
expand-separator
icon="payments"
:label="data.clightning.label"
:label="data.admin.CLightningWallet[6]"
@click="data.admin.CLightningWallet[7] = 1"
>
<q-card>
<q-card-section>
<q-input
filled
v-model="data.clightning.endpoint"
v-model="data.admin.CLightningWallet[0]"
label="GRPC Endpoint"
class="q-pr-md"
hint="ie /home/bob/.lightning/bitcoin/lightning-rpc"
@ -145,7 +153,8 @@
<q-expansion-item
expand-separator
icon="payments"
:label="data.lndrest.label"
:label="data.admin.LndRestWallet[6]"
@click="data.admin.LndRestWallet[7] = 1"
>
<q-card>
<q-card-section>
@ -153,27 +162,21 @@
<div class="col">
<q-input
filled
v-model="data.lndrest.endpoint"
v-model="data.admin.LndRestWallet[0]"
label="LND REST Endpoint"
class="q-pr-md"
hint="default 127.0.0.1"
></q-input>
</div>
<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 class="row">
<div class="col">
<q-input
filled
v-model="data.lndrest.cert"
v-model="data.admin.LndRestWallet[5]"
label="LND self-signed cert"
class="q-pr-md"
hint="Location of your ssl cert"
@ -182,7 +185,7 @@
<div class="col">
<q-input
filled
v-model="data.lndrest.admin"
v-model="data.admin.LndRestWallet[4]"
label="LND admin macaroon"
class="q-pr-md"
hint="Your admin macaroon as hex or location"
@ -193,7 +196,7 @@
<div class="col">
<q-input
filled
v-model="data.lndrest.invoice"
v-model="data.admin.LndRestWallet[3]"
label="LND invoice macaroon"
class="q-pr-md"
hint="Your invoice macaroon as hex or location"
@ -202,7 +205,7 @@
<div class="col">
<q-input
filled
v-model="data.lndrest.read"
v-model="data.admin.LndRestWallet[2]"
label="LND read macaroon"
class="q-pr-md"
hint="Your read macaroon as hex or location"
@ -216,7 +219,8 @@
<q-expansion-item
expand-separator
icon="payments"
:label="data.lndgrpc.label"
:label="data.admin.LndWallet[6]"
@click="data.admin.LndWallet[7] = 1"
>
<q-card>
<q-card-section>
@ -224,7 +228,7 @@
<div class="col">
<q-input
filled
v-model="data.lndgrpc.endpoint"
v-model="data.admin.LndWallet[0]"
label="LND GRPC Endpoint"
class="q-pr-md"
hint="default 127.0.0.1"
@ -233,7 +237,7 @@
<div class="col">
<q-input
filled
v-model="data.lndgrpc.port"
v-model="data.admin.LndWallet[1]"
label="LND GRPC port"
class="q-pr-md"
hint="Deafault 11009"
@ -245,7 +249,7 @@
<div class="col">
<q-input
filled
v-model="data.lndgrpc.cert"
v-model="data.admin.LndWallet[5]"
label="LND self-signed cert"
class="q-pr-md"
hint="Location of your ssl cert"
@ -254,7 +258,7 @@
<div class="col">
<q-input
filled
v-model="data.lndgrpc.admin"
v-model="data.admin.LndWallet[4]"
label="LND admin macaroon"
class="q-pr-md"
hint="Your admin macaroon as hex or location"
@ -265,7 +269,7 @@
<div class="col">
<q-input
filled
v-model="data.lndgrpc.invoice"
v-model="data.admin.LndWallet[3]"
label="LND invoice macaroon"
class="q-pr-md"
hint="Your invoice macaroon as hex or location"
@ -274,7 +278,7 @@
<div class="col">
<q-input
filled
v-model="data.lndgrpc.read"
v-model="data.admin.LndWallet[2]"
label="LND read macaroon"
class="q-pr-md"
hint="Your read macaroon as hex or location"
@ -288,7 +292,8 @@
<q-expansion-item
expand-separator
icon="payments"
:label="data.lntxbot.label"
:label="data.admin.LntxbotWallet[6]"
@click="data.admin.LntxbotWallet[7] = 1"
>
<q-card>
<q-card-section>
@ -296,7 +301,7 @@
<div class="col">
<q-input
filled
v-model="data.lntxbot.admin"
v-model="data.admin.LntxbotWallet[4]"
label="Admin key"
class="q-pr-md"
hint="use /api in LNTXBOT"
@ -305,7 +310,7 @@
<div class="col">
<q-input
filled
v-model="data.lntxbot.invoice"
v-model="data.admin.LntxbotWallet[3]"
label="Invoice key"
class="q-pr-md"
></q-input>
@ -318,7 +323,8 @@
<q-expansion-item
expand-separator
icon="payments"
:label="data.lnpay.label"
:label="data.admin.LNPayWallet[6]"
@click="data.admin.LNPayWallet[7] = 1"
>
<q-card>
<q-card-section>
@ -326,7 +332,7 @@
<div class="col">
<q-input
filled
v-model="data.lnpay.cert"
v-model="data.admin.LNPayWallet[5]"
label="API key"
class="q-pr-md"
></q-input>
@ -334,7 +340,7 @@
<div class="col">
<q-input
filled
v-model="data.lnpay.admin"
v-model="data.admin.LNPayWallet[4]"
label="Admin key"
class="q-pr-md q-pb-md"
></q-input>
@ -344,7 +350,7 @@
<div class="col">
<q-input
filled
v-model="data.lnpay.invoice"
v-model="data.admin.LNPayWallet[3]"
label="Invoice key"
class="q-pr-md"
></q-input>
@ -352,7 +358,7 @@
<div class="col">
<q-input
filled
v-model="data.lnpay.read"
v-model="data.admin.LNPayWallet[2]"
label="Read key"
class="q-pr-md"
></q-input>
@ -365,7 +371,8 @@
<q-expansion-item
expand-separator
icon="payments"
:label="data.lnbits.label"
:label="data.admin.LnbitsWallet[6]"
@click="data.admin.LnbitsWallet[7] = 1"
>
<q-card>
<q-card-section>
@ -373,7 +380,7 @@
<div class="col">
<q-input
filled
v-model="data.lnbits.endpoint"
v-model="data.admin.LnbitsWallet[0]"
label="LNbits endpoint"
class="q-pr-md"
hint="ie https://lnbits.com, default 127.0.0.1"
@ -385,7 +392,7 @@
<div class="col">
<q-input
filled
v-model="data.lnbits.admin"
v-model="data.admin.LnbitsWallet[4]"
label="Admin key"
class="q-pr-md q-pb-md"
></q-input>
@ -393,7 +400,7 @@
<div class="col">
<q-input
filled
v-model="data.lnbits.invoice"
v-model="data.admin.LnbitsWallet[3]"
label="Invoice key"
class="q-pr-md"
></q-input>
@ -406,7 +413,8 @@
<q-expansion-item
expand-separator
icon="payments"
:label="data.opennode.label"
:label="data.admin.OpenNodeWallet[6]"
@click="data.admin.OpenNodeWallet[7] = 1"
>
<q-card>
<q-card-section>
@ -414,7 +422,7 @@
<div class="col">
<q-input
filled
v-model="data.opennode.admin"
v-model="data.admin.OpenNodeWallet[4]"
label="Admin key"
class="q-pr-md"
></q-input>
@ -422,7 +430,7 @@
<div class="col">
<q-input
filled
v-model="data.opennode.invoice"
v-model="data.admin.OpenNodeWallet[3]"
label="Invoice key"
class="q-pr-md"
></q-input>
@ -432,22 +440,38 @@
</q-card>
</q-expansion-item>
</q-list>
<div class="q-pt-md">
<q-select outlined v-model="data.admin.funding_source_primary" label="Select main funding source" :options="data.funding_source" label="Outlined"></q-select>
<div>
<q-btn
label="Save"
label="Update"
type="submit"
color="deep-purple"
></q-btn>
<q-btn
v-if="cancel.on"
label="Cancel"
type="reset"
color="primary"
flat
class="q-ml-sm"
></q-btn>
</div>
</q-form>
</div>
<div class="row q-mt-md q-gutter-sm">
<q-btn
outline
color="grey"
type="a"
href="https://github.com/lnbits/lnbits"
target="_blank"
rel="noopener"
>View project in GitHub</q-btn
>
<q-btn
outline
color="grey"
type="a"
href="https://lnbits.com/paywall/GAqKguK5S8f6w5VNjS9DfK"
target="_blank"
rel="noopener"
>Donate</q-btn
>
</div>
</q-card-section>
</q-card>
</div>
@ -510,26 +534,31 @@
mixins: [windowMixin],
data: function () {
return {
wallet: {
data:{}
},
wallet: {data: {}},
cancel: {},
data: {
admin: {},
clightning: {endpoint: ''},
lndrest: {endpoint: '', invoice: '', read: '', admin: '', cert: ''},
lndgrpc: {
endpoint: '',
port: '',
invoice: '',
read: '',
admin: '',
cert: ''
funding_source: ['CLightningWallet', 'LndRestWallet', 'LndWallet', 'LntxbotWallet', 'LNPayWallet', 'LnbitsWallet', 'OpenNodeWallet'],
admin: {
site_title: 'LNbits',
tagline: 'Free and open source wallet system',
primary_color:'#FF00FF',
secondary_color:'#FF00FF',
funding_source_primary: '',
funding_source_edited: '',
service_fee: 0,
disabled_ext: '',
edited: [],
CLightningWallet: ['', '', '', '', '', '', '', 0, 'CLightningWallet'],
LndRestWallet: ['', '', '', '', '', '', '', 0, 'LndRestWallet'],
LndWallet: ['', '', '', '', '', '', '', 0, 'LndWallet'],
LntxbotWallet: ['', '', '', '', '', '', '', 0, 'LntxbotWallet'],
LNPayWallet: ['', '', '', '', '', '', '', 0, 'LNPayWallet'],
LnbitsWallet: ['', '', '', '', '', '', '', 0, 'LnbitsWallet'],
OpenNodeWallet: ['', '', '', '', '', '', '', 0, 'OpenNodeWallet'],
senddata: {},
},
lntxbot: {invoice: '', admin: ''},
lnpay: {endpoint: '', invoice: '', read: '', admin: '', cert: ''},
lnbits: {endpoint: '', invoice: '', read: '', admin: ''},
opennode: {invoice: '', read: '', admin: ''}
},
options: [
@ -547,6 +576,11 @@
},
created: function () {
var self = this
if (usr != null) {
self.cancel.on = true
}
self.data.admin.user = '{{ admin_user }}'
self.data.admin.allowed_users = ''
self.data.admin.site_title = '{{admin.site_title}}'
@ -556,90 +590,80 @@
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(',')
if (usr != null) {
self.cancel.on = true
}
funding = JSON.parse('{{ funding | tojson }}')
self.data.lndrest.label = 'LND REST'
self.data.clightning.label = 'CLightning GRPC'
self.data.lndgrpc.label = 'LND GRPC'
self.data.lntxbot.label = 'LNTXBOT'
self.data.lnpay.label = 'LNpay'
self.data.lnbits.label = 'LNbits'
self.data.opennode.label = 'Opennode'
self.data.admin.LndRestWallet[6] = 'LndRestWallet'
self.data.admin.CLightningWallet[6] = 'CLightningWallet'
self.data.admin.LndWallet[6] = 'LndWallet'
self.data.admin.LntxbotWallet[6] = 'LntxbotWallet'
self.data.admin.LNPayWallet[6] = 'LNPayWallet'
self.data.admin.LnbitsWallet[6] = 'LnbitsWallet'
self.data.admin.OpenNodeWallet[6] = 'OpenNodeWallet'
var i
for (i = 0; i < funding.length; i++) {
if (funding[i][1] == 'CLightningWallet') {
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]
self.data.admin.CLightningWallet[0] = funding[i][2]
if (self.data.admin.funding_source_primary == 'CLightningWallet') {
self.data.admin.CLightningWallet[6] = 'CLightningWallet (main funding source)'
}
}
if (funding[i][1] == 'LndRestWallet') {
self.data.lndrest.endpoint = funding[i][2]
self.data.lndrest.read = funding[i][4]
self.data.lndrest.invoice = funding[i][5]
self.data.lndrest.admin = funding[i][6]
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]
self.data.admin.LndRestWallet[0] = funding[i][2]
self.data.admin.LndRestWallet[2] = funding[i][4]
self.data.admin.LndRestWallet[3] = funding[i][5]
self.data.admin.LndRestWallet[4]= funding[i][6]
self.data.admin.LndRestWallet[5] = funding[i][7]
if (self.data.admin.funding_source_primary == 'LndRestWallet') {
self.data.admin.LndRestWallet[6] = 'LndRestWallet (main funding source)'
}
}
if (funding[i][1] == 'LndWallet') {
self.data.lndgrpc.endpoint = funding[i][2]
self.data.lndgrpc.port = funding[i][3]
self.data.lndgrpc.read = funding[i][4]
self.data.lndgrpc.invoice = funding[i][5]
self.data.lndgrpc.admin = funding[i][6]
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]
self.data.admin.LndWallet[0] = funding[i][2] //endpoint
self.data.admin.LndWallet[1] = funding[i][3] //port
self.data.admin.LndWallet[2] = funding[i][4] //read
self.data.admin.LndWallet[3] = funding[i][5] //invoice
self.data.admin.LndWallet[4] = funding[i][6] //admin
self.data.admin.LndWallet[5]= funding[i][7] //cert
if (self.data.admin.funding_source_primary == 'LndWallet') {
self.data.admin.LndWallet[6] = 'LndWallet (main funding source)' //label
}
}
if (funding[i][1] == 'LntxbotWallet') {
self.data.lntxbot.invoice = funding[i][5]
self.data.lntxbot.admin = funding[i][6]
self.data.admin.LntxbotWallet[3] = funding[i][5]
self.data.admin.LntxbotWallet[4] = funding[i][6]
if (funding[i][8] == 1) {
self.data.lntxbot.label = 'LNTXBOT (main funding source)'
self.funding_source.name = funding[i][1]
if (self.data.admin.funding_source_primary == 'LntxbotWallet') {
self.data.admin.LntxbotWallet[6] = 'LntxbotWallet (main funding source)'
}
}
if (funding[i][1] == 'LNPayWallet') {
self.data.lnpay.read = funding[i][4]
self.data.lnpay.invoice = funding[i][5]
self.data.lnpay.admin = funding[i][6]
self.data.lnpay.cert = funding[i][7]
if (funding[i][8] == 1) {
self.data.lnpay.label = 'LNpay (main funding source)'
self.funding_source.name = funding[i][1]
self.data.admin.LNPayWallet[2] = funding[i][4]
self.data.admin.LNPayWallet[3] = funding[i][5]
self.data.admin.LNPayWallet[4] = funding[i][6]
self.data.admin.LNPayWallet[5] = funding[i][7]
if (self.data.admin.funding_source_primary == 'LNPayWallet') {
self.data.admin.LNPayWallet[6] = 'LNPayWallet (main funding source)'
}
}
if (funding[i][1] == 'LnbitsWallet') {
self.data.lnbits.endpoint = funding[i][2]
self.data.lnbits.read = funding[i][4]
self.data.lnbits.invoice = funding[i][5]
self.data.lnbits.admin = funding[i][6]
if (funding[i][8] == 1) {
self.data.lnbits.label = 'LNbits (main funding source)'
self.funding_source.name = funding[i][1]
self.data.admin.LnbitsWallet[0] = funding[i][2]
self.data.admin.LnbitsWallet[2] = funding[i][4]
self.data.admin.LnbitsWallet[3] = funding[i][5]
self.data.admin.LnbitsWallet[4] = funding[i][6]
if (self.data.admin.funding_source_primary == 'LnbitsWallet') {
self.data.admin.LnbitsWallet[6] = 'LnbitsWallet (main funding source)'
}
}
if (funding[i][1] == 'OpenNodeWallet') {
self.data.opennode.read = funding[i][4]
self.data.opennode.invoice = funding[i][5]
self.data.opennode.admin = funding[i][6]
self.data.admin.OpenNodeWallet[2] = funding[i][4]
self.data.admin.OpenNodeWallet[3] = funding[i][5]
self.data.admin.OpenNodeWallet[4] = funding[i][6]
if (funding[i][8] == 1) {
self.data.opennode.label = 'Opennode (main funding source)'
self.funding_source.name = funding[i][1]
if (self.data.admin.funding_source_primary == 'OpenNodeWallet') {
self.data.admin.OpenNodeWallet[6] = 'OpenNodeWallet (main funding source)'
}
}
}
@ -663,16 +687,42 @@
LNbits.utils.notifyApiError(error)
})
},
createWallet: function () {
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 () {
var self = this
var data = self.data
data.admin.disabled_ext = data.admin.disabled_ext.toString()
console.log(data.admin.disabled_ext)
data.admin.senddata.site_title = data.admin.site_title
data.admin.senddata.tagline = data.admin.tagline
data.admin.senddata.primary_color = data.admin.primary_color
data.admin.senddata.secondary_color = data.admin.secondary_color
data.admin.senddata.funding_source_primary = data.admin.funding_source_primary
data.admin.senddata.funding_source_edited = data.admin.funding_source_edited
data.admin.senddata.allowed_users = data.admin.allowed_users
data.admin.senddata.data_folder = data.admin.data_folder
data.admin.senddata.default_wallet_name = data.admin.default_wallet_name
data.admin.senddata.user = data.admin.user
data.admin.senddata.disabled_ext = data.admin.disabled_ext.toString()
data.admin.senddata.service_fee = parseInt(data.admin.service_fee)
data.admin.senddata.edited = data.admin.edited.toString()
data.admin.senddata.CLightningWallet = data.admin.CLightningWallet.toString()
data.admin.senddata.LndRestWallet = data.admin.LndRestWallet.toString()
data.admin.senddata.LndWallet = data.admin.LndWallet.toString()
data.admin.senddata.LntxbotWallet = data.admin.LntxbotWallet.toString()
data.admin.senddata.LNPayWallet = data.admin.LNPayWallet.toString()
data.admin.senddata.LnbitsWallet = data.admin.LnbitsWallet.toString()
data.admin.senddata.OpenNodeWallet = data.admin.OpenNodeWallet.toString()
LNbits.api
.request('POST', '/api/v1/admin', 'wallet.inkey', data.admin)
.request('POST', '/api/v1/admin', 'wallet.inkey', data.admin.senddata)
.then(function (response) {
console.log(response.data)
window.location.href = '/wallet?usr=' + response.data[0]
window.location.href = '/wallet?usr=' + response.data.admin[0]
})
.catch(function (error) {
LNbits.utils.notifyApiError(error)
@ -693,5 +743,11 @@
}
}
})
</script>
{% endblock %}

Loading…
Cancel
Save