UNPKG

fast-nginx

Version:

A fast and easy-to-use CLI tool to configure your domain with Nginx using just a single command.

113 lines (95 loc) 2.44 kB
const { spawn } = require("child_process"); const fs = require("fs"); async function sudoWriteFsFile(code, filePath, data, callback) { // const sudoProcess = spawn("sudo", [ // "node", // "-e", // `${code}('${filePath}', "${data ? data : ""}", 'utf8')`, // ]); // // sudoProcess.on("close", (code) => { // if (code === 0) { // callback(null); // } else { // callback(new Error(`Sudo process exited with code ${code}`)); // } // }); // // sudoProcess.on("error", (err) => { // callback(err); // }); return new Promise((resolve, reject) => { const sudoProcess = spawn("sudo", [ "tee", filePath ]); sudoProcess.stdin.write(data); sudoProcess.stdin.end(); sudoProcess.stderr.on('data', (data) => { callback(data) }); sudoProcess.on("close", (code) => { if (code === 0) { resolve(); } else { callback(reject(new Error(`Failed to write file. Exit code: ${code}`))); } }); sudoProcess.on("error", (err) => { callback(reject(err)); }); }); } async function sudoLinkFsFile(path1, path2, callback) { const sudoProcess = spawn("sudo", [ "ln", "-s", path1, path2, ]); sudoProcess.stderr.on('data', (data) => { console.error(`stderr: ${data}`); }); sudoProcess.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); sudoProcess.on("close", (code) => { if (code === 0) { callback(null); } if (code === 1) { const removeProcess = spawn("sudo", [ "rm", path2 ]); removeProcess.on("close", (rmCode) => { if (rmCode === 0) { sudoLinkFsFile(path1, path2, callback); } else { callback(new Error(`Failed to remove file: ${path2}`)); } }); } }); sudoProcess.on("error", (err) => { console.log("Link Error", err); callback(err); }); } async function sudoUnlinkFsFile(code, path, callback) { const sudoProcess = spawn("sudo", ["node", "-e", `${code}(${path})`]); sudoProcess.on("close", (code) => { if (code === 0) { callback(null); } else { callback(new Error(`Sudo process exited with code ${code}`)); } }); sudoProcess.on("error", (err) => { callback(err); }); } module.exports = { sudoWriteFsFile, sudoLinkFsFile, sudoUnlinkFsFile, };