forked from janoside/btc-rpc-explorer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
credentials.js
78 lines (54 loc) · 2.23 KB
/
credentials.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
"use strict";
const os = require('os');
const path = require('path');
const url = require('url');
const fs = require("fs");
const debug = require("debug");
const debugLog = debug("btcexp:config");
const btcUri = process.env.BTCEXP_BITCOIND_URI ? url.parse(process.env.BTCEXP_BITCOIND_URI, true) : { query: { } };
const btcAuth = btcUri.auth ? btcUri.auth.split(':') : [];
function loadFreshRpcCredentials() {
let username = btcAuth[0] || process.env.BTCEXP_BITCOIND_USER;
let password = btcAuth[1] || process.env.BTCEXP_BITCOIND_PASS;
let authCookieFilepath = btcUri.query.cookie || process.env.BTCEXP_BITCOIND_COOKIE || path.join(os.homedir(), '.bitcoin', '.cookie');
let authType = "usernamePassword";
if (!username && !password && fs.existsSync(authCookieFilepath)) {
authType = "cookie";
}
if (authType == "cookie") {
debugLog(`Loading RPC cookie file: ${authCookieFilepath}`);
[ username, password ] = fs.readFileSync(authCookieFilepath).toString().trim().split(':', 2);
if (!password) {
throw new Error(`Cookie file ${authCookieFilepath} in unexpected format`);
}
}
return {
host: btcUri.hostname || process.env.BTCEXP_BITCOIND_HOST || "127.0.0.1",
port: btcUri.port || process.env.BTCEXP_BITCOIND_PORT || 8332,
authType: authType,
username: username,
password: password,
authCookieFilepath: authCookieFilepath,
timeout: parseInt(btcUri.query.timeout || process.env.BTCEXP_BITCOIND_RPC_TIMEOUT || 5000),
};
}
module.exports = {
loadFreshRpcCredentials: loadFreshRpcCredentials,
rpc: loadFreshRpcCredentials(),
// optional: enter your api access key from ipstack.com below
// to include a map of the estimated locations of your node's
// peers
// format: "ID_FROM_IPSTACK"
ipStackComApiAccessKey: process.env.BTCEXP_IPSTACK_APIKEY,
// optional: enter your api access key from mapbox.com below
// to enable the tiles for map of the estimated locations of
// your node's peers
// format: "APIKEY_FROM_MAPBOX"
mapBoxComApiAccessKey: process.env.BTCEXP_MAPBOX_APIKEY,
// optional: GA tracking code
// format: "UA-..."
googleAnalyticsTrackingId: process.env.BTCEXP_GANALYTICS_TRACKING,
// optional: sentry.io error-tracking url
// format: "SENTRY_IO_URL"
sentryUrl: process.env.BTCEXP_SENTRY_URL,
};