113 lines
2.8 KiB
JavaScript
113 lines
2.8 KiB
JavaScript
import express from "express";
|
|
import { readFile } from "node:fs/promises";
|
|
import {
|
|
guardedScreenshot,
|
|
android_websocket,
|
|
waitFullBoot,
|
|
} from "./screenshot.mjs";
|
|
|
|
import { execSync } from "node:child_process";
|
|
|
|
import fileUpload from "express-fileupload";
|
|
|
|
const device_size_x = 320;
|
|
const device_size_y = 640;
|
|
|
|
const app = express();
|
|
app.use(express.urlencoded({ extended: false }));
|
|
|
|
app.use(express.static("/code/dist"));
|
|
|
|
console.log("Waiting for full boot...");
|
|
await waitFullBoot();
|
|
console.log("Boot detected! activating endpoints");
|
|
|
|
//GET
|
|
app.get("/favicon.ico", function (req, res) {
|
|
res.sendFile("/code/favicon.ico");
|
|
});
|
|
|
|
app.get("/htmx.js", function (req, res) {
|
|
res.sendFile("/code/node_modules/htmx.org/dist/htmx.min.js");
|
|
});
|
|
|
|
app.get("/trafficLog", async function (req, res) {
|
|
res.sendFile("/log/trafficLog");
|
|
});
|
|
|
|
app.get("/screen", async function (req, res) {
|
|
await guardedScreenshot();
|
|
res.sendFile("/code/screenshot.png");
|
|
});
|
|
|
|
app.get("/", async function (req, res) {
|
|
let fileData = (await readFile("/code/index.html")).toString();
|
|
|
|
fileData = fileData.replace(
|
|
"___screenshotDelayMs___",
|
|
process.env.screenshotDelayMs
|
|
);
|
|
|
|
res.setHeader("Content-Type", "text/html");
|
|
res.setHeader("Content-Disposition", "inline");
|
|
|
|
res.send(fileData);
|
|
});
|
|
|
|
//POST
|
|
app.post("/back", function (req, res) {
|
|
android_websocket.send(`back`);
|
|
res.sendStatus(200);
|
|
});
|
|
|
|
// default options
|
|
app.use(fileUpload());
|
|
app.post("/upload_apk", async function (req, res) {
|
|
if (!req.files || Object.keys(req.files).length === 0) {
|
|
return res.status(400).send("No files were uploaded.");
|
|
}
|
|
execSync("rm -rf /shared_buffer/*");
|
|
if (Array.isArray(req.files.app)) {
|
|
for (const [idx, file] of req.files.app.entries()) {
|
|
let uploadPath = "/shared_buffer/app" + idx + ".apk";
|
|
await file.mv(uploadPath);
|
|
}
|
|
} else {
|
|
let uploadPath = "/shared_buffer/app" + 0 + ".apk";
|
|
await req.files.app.mv(uploadPath);
|
|
}
|
|
android_websocket.send(`install`);
|
|
res.send("Files uploaded!");
|
|
});
|
|
|
|
app.post("/home", function (req, res) {
|
|
android_websocket.send(`home`);
|
|
res.sendStatus(200);
|
|
});
|
|
|
|
app.post("/touch", function (req, res) {
|
|
const x = parseInt(req.body.x);
|
|
const y = parseInt(req.body.y);
|
|
|
|
if (isNaN(x) || isNaN(y) || x > device_size_x || y > device_size_y) {
|
|
res.send(
|
|
`the query params must be x <= ${device_size_x}, y <= ${device_size_y}\n`
|
|
);
|
|
} else {
|
|
android_websocket.send(`touch ${x} ${y}`);
|
|
res.sendStatus(200);
|
|
}
|
|
});
|
|
|
|
app.post("/drag", function (req, res) {
|
|
const body = req.body;
|
|
const startX = Number(body.startX);
|
|
const startY = Number(body.startY);
|
|
const endX = Number(body.endX);
|
|
const endY = Number(body.endY);
|
|
android_websocket.send(`drag ${startX} ${startY} ${endX} ${endY}`);
|
|
res.sendStatus(200);
|
|
});
|
|
|
|
app.listen(8080, () => console.log("Listening in port 8080"));
|