summaryrefslogtreecommitdiff
path: root/app.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2022-11-28 17:35:16 +0100
committerMinteck <contact@minteck.org>2022-11-28 17:35:16 +0100
commitb48653b1648c20cfb9cec66d8c00d0354c66464c (patch)
treec2c7e50d0868fa742c5b8cf1f552e122fe249129 /app.js
downloadluna-b48653b1648c20cfb9cec66d8c00d0354c66464c.tar.gz
luna-b48653b1648c20cfb9cec66d8c00d0354c66464c.tar.bz2
luna-b48653b1648c20cfb9cec66d8c00d0354c66464c.zip
Initial commit
Diffstat (limited to 'app.js')
-rw-r--r--app.js135
1 files changed, 135 insertions, 0 deletions
diff --git a/app.js b/app.js
new file mode 100644
index 0000000..20064ff
--- /dev/null
+++ b/app.js
@@ -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