2021-06-19 14:47:10 +02:00
|
|
|
/**
|
|
|
|
* This file exports a function, used by the write config endpoint.
|
|
|
|
* It will make a backup of the users conf.yml file
|
|
|
|
* and then write their new config into the main conf.yml file.
|
|
|
|
* Finally, it will call a function with the status message
|
|
|
|
*/
|
|
|
|
const fsPromises = require('fs').promises;
|
|
|
|
|
|
|
|
module.exports = async (newConfig, render) => {
|
2021-06-18 19:01:42 +02:00
|
|
|
// Define constants for the config file
|
|
|
|
const settings = {
|
|
|
|
defaultLocation: './public/',
|
|
|
|
defaultFile: 'conf.yml',
|
|
|
|
filename: 'conf',
|
|
|
|
backupDenominator: '.backup.yml',
|
|
|
|
};
|
|
|
|
|
|
|
|
// Make the full file name and path to save the backup config file
|
|
|
|
const backupFilePath = `${settings.defaultLocation}${settings.filename}-`
|
|
|
|
+ `${Math.round(new Date() / 1000)}${settings.backupDenominator}`;
|
|
|
|
|
|
|
|
// The path where the main conf.yml should be read and saved to
|
|
|
|
const defaultFilePath = settings.defaultLocation + settings.defaultFile;
|
|
|
|
|
|
|
|
// Returns a string confirming successful job
|
|
|
|
const getSuccessMessage = () => `Successfully backed up ${settings.defaultFile} to`
|
|
|
|
+ ` ${backupFilePath}, and updated the contents of ${defaultFilePath}`;
|
|
|
|
|
2021-06-19 14:47:10 +02:00
|
|
|
// Encoding options for writing to conf file
|
|
|
|
const writeFileOptions = { encoding: 'utf8' };
|
|
|
|
|
2021-06-18 19:01:42 +02:00
|
|
|
// Prepare the response returned by the API
|
|
|
|
const getRenderMessage = (success, errorMsg) => JSON.stringify({
|
|
|
|
success,
|
|
|
|
message: !success ? errorMsg : getSuccessMessage(),
|
|
|
|
});
|
|
|
|
|
2021-06-19 14:47:10 +02:00
|
|
|
// Makes a backup of the existing config file
|
|
|
|
await fsPromises.copyFile(defaultFilePath, backupFilePath)
|
|
|
|
.catch((error) => {
|
|
|
|
render(getRenderMessage(false, `Unable to backup conf.yml: ${error}`));
|
|
|
|
});
|
|
|
|
|
|
|
|
// Writes the new content to the conf.yml file
|
|
|
|
await fsPromises.writeFile(defaultFilePath, newConfig.config.toString(), writeFileOptions)
|
|
|
|
.catch((error) => {
|
|
|
|
render(getRenderMessage(false, `Unable to write changes to conf.yml: ${error}`));
|
|
|
|
});
|
2021-06-18 19:01:42 +02:00
|
|
|
|
2021-06-19 14:47:10 +02:00
|
|
|
// If successful, then render hasn't yet been called- call it
|
|
|
|
await render(getRenderMessage(true));
|
2021-06-18 19:01:42 +02:00
|
|
|
};
|