umbrel-bitcoin/routes/v1/bitcoind/system.js

71 lines
2.5 KiB
JavaScript

const express = require('express');
const router = express.Router();
const systemLogic = require('logic/system.js');
const configLogic = require('logic/config');
const bitcoindLogic = require('logic/bitcoind.js');
const safeHandler = require('utils/safeHandler');
const validateSettingsRequest = require('utils/validateSettingsRequest');
router.get('/bitcoin-p2p-connection-details', safeHandler(async(req, res) => {
const connectionDetails = systemLogic.getBitcoinP2PConnectionDetails();
return res.json(connectionDetails);
}));
router.get('/bitcoin-rpc-connection-details', safeHandler(async(req, res) => {
const connectionDetails = systemLogic.getBitcoinRPCConnectionDetails();
return res.json(connectionDetails);
}));
router.get('/bitcoin-config', safeHandler(async(req, res) => {
const bitcoinConfig = await configLogic.getJsonStore();
return res.json(bitcoinConfig);
}));
// updateJsonStore / generateUmbrelBitcoinConfig / generateBitcoinConfig are all called through these routes below so that even if user closes the browser prematurely, the backend will complete the update.
router.post('/update-bitcoin-config', safeHandler(async(req, res) => {
// store old bitcoinConfig in memory to revert to in case of errors setting new config and restarting bitcoind
const oldBitcoinConfig = await configLogic.getJsonStore();
const newBitcoinConfig = req.body.bitcoinConfig;
const validationErrors = validateSettingsRequest(newBitcoinConfig);
if (validationErrors.length > 0) {
return res.status(400).json({success: false, validationErrors});
}
try {
await configLogic.applyCustomBitcoinConfig(newBitcoinConfig);
await bitcoindLogic.stop();
res.json({success: true});
} catch (error) {
// revert everything to old config values
await configLogic.applyCustomBitcoinConfig(oldBitcoinConfig);
res.json({success: false}); // show error to user in UI
}
}));
router.post('/restore-default-bitcoin-config', safeHandler(async(req, res) => {
// store old bitcoinConfig in memory to revert to in case of errors setting new config and restarting bitcoind
const oldBitcoinConfig = await configLogic.getJsonStore();
try {
await configLogic.applyDefaultBitcoinConfig();
await bitcoindLogic.stop();
res.json({success: true});
} catch (error) {
// revert everything to old config values
await configLogic.applyCustomBitcoinConfig(oldBitcoinConfig);
res.json({success: false}); // show error to user in UI
}
}));
module.exports = router;