Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const express = require("express");
- const app = express();
- // Se importan los módulos necesarios
- const { exec } = require("child_process"); // Módulo para ejecutar comandos en el sistema operativo
- const { execSync } = require("child_process"); // Módulo para ejecutar comandos de forma sincrónica
- const fs = require("fs"); // Módulo para trabajar con archivos
- // Se establece la carpeta "static" como directorio de archivos estáticos
- app.use(express.static(__dirname + "/static"));
- // Se configura Express para poder manejar los datos enviados por formularios
- app.use(express.urlencoded({ extended: true }));
- // Ruta principal
- app.get("/", (req, res) => {
- let hello = "";
- let action = req.query.action ? req.query.action : "run";
- if (action === "validate") {
- let person = req.query.person ? req.query.person : "Default User";
- // Llama a la función boot_validate para validar el nombre de una persona
- let valid = boot_validate(person);
- if (valid == "") {
- boot_clean(); // Llama a la función boot_clean para limpiar los archivos generados
- }
- } else if (action == "reset") {
- boot_clean(); // Llama a la función boot_clean para limpiar los archivos generados
- boot_reset(); // Llama a la función boot_reset para restablecer los archivos a sus valores predeterminados
- boot_run(); // Llama a la función boot_run para ejecutar el archivo hello.sh
- } else {
- boot_run(); // Llama a la función boot_run para ejecutar el archivo hello.sh
- try {
- hello = fs.readFileSync("hello.txt", "utf8").toString();
- } catch (error) {
- // Si no se puede leer el archivo hello.txt, se realiza un restablecimiento y una nueva ejecución del archivo hello.sh
- hello = "Important hello file is missing, please reset.";
- boot_clean();
- boot_reset();
- boot_run();
- }
- }
- // Renderiza el archivo index.ejs y pasa los datos action y hello al archivo de plantilla
- res.render("index.ejs", { action: action, hello: hello });
- });
- // Middleware para manejar las rutas no encontradas
- app.use(function (req, res) {
- res.status(404).render("404.ejs");
- });
- // Función para validar el nombre de una persona
- const boot_validate = (person) => {
- // Escribe el nombre de la persona en el archivo hello.sh
- fs.writeFileSync("hello.sh", 'echo "' + person + '" > hello.txt');
- // Ejecuta comandos para registrar y limpiar el archivo hello.sh
- exec("echo 'hello.sh updated -- " + Date.now() + "' > log.txt");
- exec("echo 'hello.sh cleaned -- " + Date.now() + "' >> log.txt");
- exec("bash hello.sh");
- // Función para validar si se escribió correctamente el nombre en el archivo hello.txt
- const valid = () => {
- return execSync(
- "sed -n '/^echo \"[A-Za-z0-9 ]*\" > hello.txt$/p' hello.sh"
- ).toString();
- };
- return valid(); // Retorna el resultado de la validación
- };
- // Función para limpiar el archivo hello.txt
- const boot_clean = () => {
- exec(`rm hello.txt`);
- };
- // Función para ejecutar el archivo hello.sh
- const boot_run = () => {
- exec(`bash hello.sh`);
- };
- // Función para restablecer los archivos a sus valores predeterminados
- const boot_reset = () => {
- fs.writeFileSync("hello.sh", "echo 'Default User' > hello.txt");
- };
- const port = process.env.PORT || 5000;
- // Inicia el servidor y escucha en el puerto especificado
- app.listen(port, "0.0.0.0", () => console.log(`Listening on port ${port}...!!!`));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement