const express = require('express');
const path = require('path');
const crypto = require('crypto');
const app = express();
const bodyParser = require('body-parser');
const PORT = 3000;

app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'public')));

const tokenStore = {};

function generatePkToken() {
    return crypto.randomBytes(8).toString('hex');
}

app.get('/generate', (req, res) => {
    const token = generatePkToken();
    tokenStore[token] = Date.now() + 60000;

    const url = `http://localhost:${PORT}/access/${token}`;
    res.send(`Temporary URL: <a href="${url}" target="_blank">${url}</a>`);
});

app.get('/access/:token', (req, res) => {
    const token = req.params.token;

    if (tokenStore[token] && tokenStore[token] > Date.now()) {
        res.sendFile(path.join(__dirname, './data.html'));
    } else {
        res.status(403).send('Access denied.');
        res.sendFile(path.join(__dirname, './error.html'));
    }
});

app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
});


////////////////////////////////////////


<!DOCTYPE html>
<html>

<head>
    <title>Call Node.js Script</title>
</head>

<body>
    <button id="executePkButton">Execute Node.js Script</button>

    <script>
        const executePkButton = document.getElementById('executePkButton');
        executePkButton.addEventListener('click', async () => {
            const response = await fetch('/execute-pk-script');
            const result = await response.text();
            console.log(result);
        });
    </script>
</body>

</html>