diff options
author | Minteck <contact@minteck.org> | 2022-11-28 17:35:16 +0100 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2022-11-28 17:35:16 +0100 |
commit | b48653b1648c20cfb9cec66d8c00d0354c66464c (patch) | |
tree | c2c7e50d0868fa742c5b8cf1f552e122fe249129 /app.js | |
download | luna-b48653b1648c20cfb9cec66d8c00d0354c66464c.tar.gz luna-b48653b1648c20cfb9cec66d8c00d0354c66464c.tar.bz2 luna-b48653b1648c20cfb9cec66d8c00d0354c66464c.zip |
Initial commit
Diffstat (limited to 'app.js')
-rw-r--r-- | app.js | 135 |
1 files changed, 135 insertions, 0 deletions
@@ -0,0 +1,135 @@ +const { app, desktopCapturer } = require('electron'); +const { platform, hostname } = require('node:os'); +const { writeFileSync, existsSync, readFileSync } = require('node:fs'); +const axios = require('axios'); +const si = require('systeminformation'); + +global.luna_version = "1.0.0"; + +process.on('uncaughtException', (e) => { + console.error(e); + + if (e.stack.includes("/ws/")) { + console.log("Resetting proxy connection"); + _proxy(); + } +}) + +let token; + +async function refresh() { + let osInfo = await si.osInfo(); + let baseboard = await si.baseboard(); + let processes = (await si.processes()).list; + + let data = { + luna_version, + host: hostname(), + os: osInfo.distro + " " + osInfo.release, + kernel: osInfo.platform.substring(0, 1).toUpperCase() + osInfo.platform.substring(1) + " " + osInfo.kernel + " (" + osInfo.arch + ")", + serial: baseboard.serial ?? osInfo.serial, + serial_source: baseboard.serial ? "hardware" : "software", + date: new Date().toISOString(), + screens: [], + windows: [], + cpu: (await si.cpu()), + temperature: (await si.cpuTemperature()), + ram: (await si.mem()), + ram_chips: (await si.memLayout()), + battery: (await si.battery()), + os_info: (await si.osInfo()), + gpu: (await si.graphics()), + uuid: (await si.uuid()), + versions: (await si.versions()), + users: (await si.users()), + filesystems: (await si.fsSize()), + fs_stats: (await si.fsStats()), + usb: (await si.usb()), + audio: (await si.audio()), + network: (await si.networkInterfaces()), + connections: (await si.networkConnections()), + processes: processes.map((i) => { + return { + pid: i.pid, + name: i.name, + cpu: i.cpu, + ram: i.mem, + date: new Date(i.started).toISOString(), + user: i.user, + path: i.path + } + }).sort((a, b) => { + return b.cpu - a.cpu; + }) + } + + let sources = await desktopCapturer.getSources({ types: ['screen'], thumbnailSize: { width: 1920, height: 1080 } }); + + for (let source of sources) { + console.log(`Screen ${source.id} (${source.name})`); + + data.screens.push({ + id: source.display_id, + gid: source.id, + name: source.name, + }); + console.log((await axios("https://ponies.equestria.horse/api/computer?type=screenshot", { + method: "post", + data: { + host: hostname(), + id: source.display_id, + data: source.thumbnail.toJPEG(80).toString("base64") + }, + headers: {'Cookie': 'PEH2_SESSION_TOKEN=' + token} + })).data); + } + + let windows = await desktopCapturer.getSources({ types: ['window'], thumbnailSize: { width: 1920, height: 1080 } }); + + for (let source of windows) { + console.log(`Window ${source.id} (${source.name})`); + + data.windows.push({ + display: source.display_id, + gid: source.id, + name: source.name, + }); + console.log((await axios("https://ponies.equestria.horse/api/computer?type=window", { + method: "post", + data: { + host: hostname(), + id: source.id, + data: source.thumbnail.toJPEG(80).toString("base64") + }, + headers: {'Cookie': 'PEH2_SESSION_TOKEN=' + token} + })).data); + } + + await axios("https://ponies.equestria.horse/api/computer?type=data", { + method: "post", + data, + headers: {'Cookie': 'PEH2_SESSION_TOKEN=' + token} + }); + + writeFileSync("./data.json", JSON.stringify(data)); +} + +app.whenReady().then(async () => { + if (!existsSync("./token.txt")) { + console.log("Please create a token.txt file containing a valid Cold Haze administrator token."); + process.exit(); + } else { + token = readFileSync("./token.txt").toString().trim(); + + require('./ercp'); + global._proxy = require('./proxy'); + } + + if (platform() === "darwin") app.dock.hide(); + + refresh(); + + setInterval(() => { + refresh(); + }, 60000); +})
\ No newline at end of file |