New Folder Structure test
This commit is contained in:
97
Ramses/home/Backdoor.js
Normal file
97
Ramses/home/Backdoor.js
Normal file
@@ -0,0 +1,97 @@
|
||||
/** @param {NS} ns */
|
||||
export async function main(ns, allServers) {
|
||||
ns.tail();
|
||||
await scanRecursiveWrapper(ns);
|
||||
let currentHackingLevel = ns.getHackingLevel();
|
||||
let currentArray = [];
|
||||
let currentHop = "";
|
||||
let serverRoutes = JSON.parse(ns.read("ServerRouteList.txt"));
|
||||
let allPaths = getPaths(serverRoutes);
|
||||
let checkAll = ns.args[0];
|
||||
for (const entry of allPaths) {
|
||||
for (const name of entry) {
|
||||
if (ns.singularity.connect(name) === false) {
|
||||
ns.tprint("Error when trying to connect to: " + currentHop);
|
||||
return
|
||||
}
|
||||
|
||||
if (ns.getServer(name).hostname === "CSEC" || ns.getServer(name).hostname === "avmnite-02h" || ns.getServer(name).hostname === "I.I.I.I" || ns.getServer(name).hostname === "run4theh111z" || ns.getServer(name).hostname === "The-Cave" || checkAll === true ) {
|
||||
if (!ns.getServer(name).backdoorInstalled) {
|
||||
if (ns.getServerRequiredHackingLevel(name) < currentHackingLevel && ns.hasRootAccess(name) === true) {
|
||||
ns.print("Trying to backdoor " + name)
|
||||
await ns.singularity.installBackdoor(name);
|
||||
ns.print("Success on " + name)
|
||||
}
|
||||
} else { continue }
|
||||
}
|
||||
}
|
||||
}
|
||||
ns.singularity.connect("home");
|
||||
}
|
||||
|
||||
function getPaths(obj, path = []) {
|
||||
const paths = [];
|
||||
for (const key in obj) {
|
||||
const newPath = [...path, key];
|
||||
paths.push(newPath);
|
||||
if (typeof obj[key] === 'object' && obj[key] !== null) {
|
||||
paths.push(...getPaths(obj[key], newPath));
|
||||
}
|
||||
}
|
||||
return paths;
|
||||
}
|
||||
|
||||
/** @param {NS} ns */
|
||||
async function scanRecursiveWrapper(ns) {
|
||||
ns.rm("ServerRouteList.txt");
|
||||
const home = "home";
|
||||
let serverRouteList = { home: {} };
|
||||
let knownServers = [];
|
||||
let unscanned = [];
|
||||
unscanned.push(home);
|
||||
knownServers.push(home);
|
||||
while (unscanned.length > 0) {
|
||||
let currentServer = unscanned.pop();
|
||||
let currentChildren = ns.scan(currentServer).filter(element => !knownServers.includes(element));
|
||||
knownServers = knownServers.concat(currentChildren);
|
||||
let keyPath = findKeyPath(serverRouteList, currentServer);
|
||||
let childrenObject = currentChildren.reduce((a, v) => ({ ...a, [v]: {} }), {});
|
||||
writeValueToPath(serverRouteList, keyPath, childrenObject);
|
||||
for (let i = 0; i < currentChildren.length; i++) {
|
||||
let child = currentChildren[i];
|
||||
unscanned.push(child);
|
||||
}
|
||||
}
|
||||
ns.write("ServerRouteList.txt", JSON.stringify(serverRouteList), "w");
|
||||
}
|
||||
|
||||
function findKeyPath(json, key) {
|
||||
if (typeof json !== 'object' || json === null) {
|
||||
return null;
|
||||
}
|
||||
if (key in json) {
|
||||
return key;
|
||||
}
|
||||
for (const property in json) {
|
||||
if (json.hasOwnProperty(property)) {
|
||||
const path = findKeyPath(json[property], key);
|
||||
if (path !== null) {
|
||||
return property + '*' + path;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function writeValueToPath(json, path, value) {
|
||||
const parts = path.split('*');
|
||||
let currentObject = json;
|
||||
for (let i = 0; i < parts.length - 1; i++) {
|
||||
const part = parts[i];
|
||||
if (currentObject[part] === undefined) {
|
||||
currentObject[part] = {};
|
||||
}
|
||||
currentObject = currentObject[part];
|
||||
}
|
||||
currentObject[parts[parts.length - 1]] = value;
|
||||
}
|
||||
Reference in New Issue
Block a user