UNPKG

fast-nginx

Version:

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

117 lines (95 loc) 2.62 kB
const { spawn } = require("child_process"); const fs = require("fs"); async function sudoCreateFileOrFolder(path, itemType, callback) { let sudoProcess; if (itemType === "folder") { sudoProcess = spawn("sudo", ["mkdir", path]); } if (itemType === "file") { sudoProcess = spawn("sudo", ["touch", path]); } sudoProcess.on("close", (code) => { if (code === 0) { callback(null); } else { callback(new Error(`Failed to create ${itemType}: ${path}`)); } }); sudoProcess.on("error", (err) => { callback(err); }); } async function sudoWriteFsFile(filePath, data, callback) { 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(path, callback) { const sudoProcess = spawn("sudo", ["rm", `${path}`]); 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); } else { callback(new Error(`Failed to remove file: ${path}`)); } }); sudoProcess.on("error", (err) => { console.log("Unlink Error:", err); callback(err); }); } module.exports = { sudoCreateFileOrFolder, sudoWriteFsFile, sudoLinkFsFile, sudoUnlinkFsFile, };