Browse Source

Get lndconnect REST and RPC connection strings (#46)

fix-trailing-whitespace
Mayank Chhabra 4 years ago
committed by GitHub
parent
commit
655e9fcae3
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 20
      logic/disk.js
  2. 67
      logic/system.js
  3. 1
      package.json
  4. 6
      routes/v1/system.js
  5. 5
      utils/const.js
  6. 20
      yarn.lock

20
logic/disk.js

@ -98,6 +98,22 @@ function readBitcoinP2PHiddenService() {
return diskService.readUtf8File(constants.BITCOIN_P2P_HIDDEN_SERVICE_FILE);
}
function readLndRestHiddenService() {
return diskService.readUtf8File(constants.LND_REST_HIDDEN_SERVICE_FILE);
}
function readLndGrpcHiddenService() {
return diskService.readUtf8File(constants.LND_GRPC_HIDDEN_SERVICE_FILE);
}
function readLndCert() {
return diskService.readUtf8File(constants.LND_CERT_FILE);
}
function readLndAdminMacaroon() {
return diskService.readFile(constants.LND_ADMIN_MACAROON_FILE);
}
function readUmbrelVersionFile() {
return diskService.readJsonFile(constants.UMBREL_VERSION_FILE);
}
@ -206,6 +222,10 @@ module.exports = {
readAppVersionFile,
readHiddenService,
readBitcoinP2PHiddenService,
readLndRestHiddenService,
readLndGrpcHiddenService,
readLndCert,
readLndAdminMacaroon,
readUmbrelVersionFile,
readUpdateStatusFile,
writeUpdateStatusFile,

67
logic/system.js

@ -2,6 +2,7 @@ const axios = require('axios');
const semverGt = require('semver/functions/gt');
const semverSatisfies = require('semver/functions/satisfies');
const semverMinVersion = require('semver/ranges/min-version');
const encode = require('lndconnect').encode;
const diskLogic = require('logic/disk.js');
const constants = require('utils/const.js');
@ -145,6 +146,71 @@ async function getBackupStatus() {
}
}
async function getLndConnectUrls() {
let cert;
try {
cert = await diskLogic.readLndCert();
} catch (error) {
throw new NodeError('Unable to read lnd cert file');
}
let macaroon;
try {
macaroon = await diskLogic.readLndAdminMacaroon();
} catch (error) {
throw new NodeError('Unable to read lnd macaroon file');
}
let restTorHost;
try {
restTorHost = await diskLogic.readLndRestHiddenService();
restTorHost += ':8080';
} catch (error) {
throw new NodeError('Unable to read lnd REST hostname file');
}
const restTor = encode({
host: restTorHost,
cert,
macaroon,
});
let grpcTorHost;
try {
grpcTorHost = await diskLogic.readLndGrpcHiddenService();
grpcTorHost += ':10009';
} catch (error) {
throw new NodeError('Unable to read lnd gRPC hostname file');
}
const grpcTor = encode({
host: grpcTorHost,
cert,
macaroon,
});
let restLocalHost = `${constants.DEVICE_HOSTNAME}:8080`;
const restLocal = encode({
host: restLocalHost,
cert,
macaroon,
});
let grpcLocalHost = `${constants.DEVICE_HOSTNAME}:10009`;
const grpcLocal = encode({
host: grpcLocalHost,
cert,
macaroon,
});
return {
restTor,
restLocal,
grpcTor,
grpcLocal
};
}
async function requestShutdown() {
try {
await diskLogic.shutdown();
@ -173,6 +239,7 @@ module.exports = {
getUpdateStatus,
startUpdate,
getBackupStatus,
getLndConnectUrls,
requestShutdown,
requestReboot
};

1
package.json

@ -25,6 +25,7 @@
"express": "^4.16.3",
"fs-extra": "^9.0.0",
"iocane": "^4.0.0",
"lndconnect": "^0.2.10",
"module-alias": "^2.1.0",
"morgan": "^1.9.0",
"node-rsa": "^1.0.8",

6
routes/v1/system.js

@ -26,6 +26,12 @@ router.get('/bitcoin-p2p-hidden-service', auth.jwt, safeHandler(async (req, res)
return res.status(constants.STATUS_CODES.OK).json(url);
}));
router.get('/lndconnect-urls', auth.jwt, safeHandler(async (req, res) => {
const urls = await systemLogic.getLndConnectUrls();
return res.status(constants.STATUS_CODES.OK).json(urls);
}));
router.get('/get-update', auth.jwt, safeHandler(async (req, res) => {
const update = await systemLogic.getAvailableUpdate();

5
utils/const.js

@ -2,6 +2,7 @@
module.exports = {
REQUEST_CORRELATION_NAMESPACE_KEY: 'umbrel-manager-request',
REQUEST_CORRELATION_ID_KEY: 'reqId',
DEVICE_HOSTNAME: process.env.DEVICE_HOSTNAME || 'umbrel.local',
USER_FILE: process.env.USER_FILE || '/db/user.json',
SHUTDOWN_SIGNAL_FILE: process.env.SHUTDOWN_SIGNAL_FILE || '/signals/shutdown',
REBOOT_SIGNAL_FILE: process.env.REBOOT_SIGNAL_FILE || '/signals/reboot',
@ -12,6 +13,10 @@ module.exports = {
UMBREL_DASHBOARD_HIDDEN_SERVICE_FILE: process.env.UMBREL_DASHBOARD_HIDDEN_SERVICE_FILE || '/var/lib/tor/web/hostname',
BITCOIN_P2P_HIDDEN_SERVICE_FILE: process.env.BITCOIN_P2P_HIDDEN_SERVICE_FILE || '/var/lib/tor/bitcoin-p2p/hostname',
BITCOIN_P2P_PORT: process.env.BITCOIN_P2P_PORT || 8333,
LND_REST_HIDDEN_SERVICE_FILE: process.env.LND_REST_HIDDEN_SERVICE_FILE || '/var/lib/tor/lnd-rest/hostname',
LND_GRPC_HIDDEN_SERVICE_FILE: process.env.LND_GRPC_HIDDEN_SERVICE_FILE || '/var/lib/tor/lnd-grpc/hostname',
LND_CERT_FILE: process.env.LND_CERT_FILE || '/lnd/tls.cert',
LND_ADMIN_MACAROON_FILE: process.env.LND_ADMIN_MACAROON_FILE || '/lnd/data/chain/bitcoin/mainnet/admin.macaroon',
GITHUB_REPO: process.env.GITHUB_REPO || 'getumbrel/umbrel',
UMBREL_VERSION_FILE: process.env.UMBREL_VERSION_FILE || '/info.json',
UPDATE_STATUS_FILE: process.env.UPDATE_STATUS_FILE || '/statuses/update-status.json',

20
yarn.lock

@ -595,6 +595,11 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
base64url@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d"
integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==
basic-auth@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
@ -3274,6 +3279,16 @@ libnpx@^10.2.2:
y18n "^4.0.0"
yargs "^11.0.0"
lndconnect@^0.2.10:
version "0.2.10"
resolved "https://registry.yarnpkg.com/lndconnect/-/lndconnect-0.2.10.tgz#9c397dcacc92b9cb1d77bd6dda4aba6600484268"
integrity sha512-m+EYP1dWlxuGuUmzXgvJYunYdVkpE689idUP/ztPuJrH4fPVicSFEcC2BtAWH76E+swfrbEacxWXsfNAK3boyA==
dependencies:
base64url "^3.0.1"
decode-uri-component "^0.2.0"
strict-uri-encode "^2.0.0"
untildify "^4.0.0"
load-json-file@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
@ -5868,6 +5883,11 @@ unpipe@1.0.0, unpipe@~1.0.0:
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
untildify@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
unzip-response@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"

Loading…
Cancel
Save