Spaces:
Running
Running
const express = require('express'); | |
const http = require('http'); | |
const session = require('express-session'); | |
const axios = require('axios'); | |
const app = express(); | |
const CHECK_OMNI_INTERVAL = 60000; // 1 minute | |
// Global variable | |
global.OMNITOOL_RUNNING = false; | |
// Function to check the status of the external service | |
async function checkExternalService() | |
{ | |
console.log("Checking external service"); | |
try | |
{ | |
const response = await axios.get('http://127.0.0.1:1688/api/v1/mercenaries/ping'); | |
if (response.data && response.data.ping === 'pong' && Object.keys(response.data.payload).length === 0) | |
{ | |
global.OMNITOOL_RUNNING = true; | |
} | |
} catch (error) | |
{ | |
console.error('Cannot access OMNITOOL. It is probably not running...', error.message); | |
// Set to false but do not prevent server from starting | |
global.OMNITOOL_RUNNING = false; | |
} | |
} | |
async function setup() | |
{ | |
// Call the function when the server starts | |
checkExternalService(); | |
// Other server code... | |
} | |
async function main(app) | |
{ | |
// Configure session middleware | |
app.use(session({ | |
secret: 'your-secret-key', | |
resave: false, | |
saveUninitialized: true | |
})); | |
await startServer(); | |
// Route to serve the webpage | |
app.get('/', handleRoutes); | |
app.get("status", (req, res) => | |
{ | |
res.send(global.OMNITOOL_RUNNING ? 'OMNITOOL IS RUNNING' : 'OMNITOOL IS NOT RUNNING'); | |
} | |
); | |
// Call the function when the server starts | |
await setup(); | |
} | |
function replyOmnitoolIsRunning() | |
{ | |
return '<p>OMNITOOL IS RUNNING </p>'; | |
} | |
async function handleRoutes(req, res) | |
{ | |
if (req.session.isVisited) | |
{ | |
if (global.OMNITOOL_RUNNING) | |
{ | |
const reply = replyOmnitoolIsRunning(); | |
res.send(reply); | |
} | |
else | |
{ | |
const status = global.OMNITOOL_RUNNING ? 'External service is running' : 'External service is not running'; | |
const message = `<p>WELCOME BACK</p><p>${status}</p>`; | |
res.send(message); | |
} | |
} else | |
{ | |
await checkExternalService(); | |
if (global.OMNITOOL_RUNNING) | |
{ | |
const reply = replyOmnitoolIsRunning(); | |
res.send(reply); | |
} | |
else | |
{ | |
// Serve the webpage with a button for first-time visitors | |
req.session.isVisited = true; | |
res.send(` | |
<html> | |
<body> | |
<h1>Welcome!</h1> | |
<button onclick="window.open(window.location.href, '_blank')">CLICK ME</button> | |
</body> | |
</html> | |
`); | |
} | |
} | |
} | |
async function startServer() | |
{ | |
// Start server | |
const PORT = 3000; | |
http.createServer(app).listen(PORT, () => | |
{ | |
console.log(`Server running on port ${PORT}`); | |
}); | |
setInterval(async () => | |
{ | |
await checkExternalService(); | |
}, CHECK_OMNI_INTERVAL); | |
} | |
main(app); |