File size: 3,113 Bytes
c1dc99b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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);