1 changed files with 77 additions and 0 deletions
@ -0,0 +1,77 @@ |
|||||
|
const {exec} = require("child_process"); |
||||
|
const {promisify} = require("util"); |
||||
|
const promisifiedExec = promisify(exec); |
||||
|
const util = require("../Util"); |
||||
|
|
||||
|
module.exports.port = async function (port, protocol) { |
||||
|
try { |
||||
|
if (!port) throw new Error("Missing port input."); |
||||
|
if (typeof port !== "number") throw new Error("The port must be type of number."); |
||||
|
|
||||
|
// check port range
|
||||
|
let checkPort = util.checkAppropriatePort(port); |
||||
|
if (!checkPort) return false; |
||||
|
|
||||
|
if (protocol) { |
||||
|
if (typeof protocol !== "string") throw new Error("The protocol must be type of string."); |
||||
|
if (protocol !== "tcp" || protocol !== "udp") throw new Error('The protocol must be either "tcp" or "udp"'); |
||||
|
}; |
||||
|
|
||||
|
let res = await promisifiedExec(`echo "y" | sudo ufw allow ${port} ${protocol || ""}`); |
||||
|
if (res.stderr) throw new Error(res.stderr); |
||||
|
|
||||
|
if (res.stdout) { |
||||
|
// will find a better way to parse this
|
||||
|
if (res.stdout.toLowerCase().match(/(added)/gi)) { |
||||
|
return true; |
||||
|
} else { |
||||
|
console.log(res.stdout); |
||||
|
return false; |
||||
|
}; |
||||
|
} else { |
||||
|
console.log(res.stdout); |
||||
|
return false; |
||||
|
}; |
||||
|
} catch (err) { |
||||
|
throw new Error(err); |
||||
|
}; |
||||
|
}; |
||||
|
|
||||
|
module.exports.address = async function (address, port, protocol) { |
||||
|
try { |
||||
|
// address validation
|
||||
|
if (!address) throw new Error("Missing address input."); |
||||
|
if (typeof address !== "string") throw new Error("The address must be type of string."); |
||||
|
let checkAddress = util.checkAppropriateIP(address); |
||||
|
if (!checkAddress) return false; |
||||
|
|
||||
|
// port validation
|
||||
|
if (typeof port !== "number") throw new Error("The port must be type of number."); |
||||
|
let checkPort = util.checkAppropriatePort(port); |
||||
|
if (!checkPort) return false; |
||||
|
|
||||
|
// protocol (tcp/udp) validation
|
||||
|
if (protocol) { |
||||
|
if (typeof protocol !== "string") throw new Error("The protocol must be type of string."); |
||||
|
if (protocol !== "tcp" || protocol !== "udp") throw new Error('The protocol must be either "tcp" or "udp"'); |
||||
|
}; |
||||
|
|
||||
|
let res = await promisifiedExec(`echo "y" | sudo ufw allow from ${address} ${port ? `to any port ${port}` : ""} ${protocol ? `proto ${protocol}` : ""}`); |
||||
|
if (res.stderr) throw new Error(res.stderr); |
||||
|
|
||||
|
if (res.stdout) { |
||||
|
// will find a better way to parse this
|
||||
|
if (res.stdout.toLowerCase().match(/(added)/gi)) { |
||||
|
return true; |
||||
|
} else { |
||||
|
console.log(res.stdout); |
||||
|
return false; |
||||
|
}; |
||||
|
} else { |
||||
|
console.log(res.stdout); |
||||
|
return false; |
||||
|
}; |
||||
|
} catch (err) { |
||||
|
throw new Error(err); |
||||
|
}; |
||||
|
}; |
Loading…
Reference in new issue