128 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			HTML
		
	
	
	
<!DOCTYPE html>
 | 
						|
<html lang="en">
 | 
						|
<head>
 | 
						|
    <meta charset="UTF-8">
 | 
						|
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
						|
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
						|
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
 | 
						|
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
 | 
						|
    <script src="https://unpkg.com/htmx.org@1.9.12"></script>
 | 
						|
    <!-- <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> -->
 | 
						|
    <title>g2: gommand & gontrol</title>
 | 
						|
    <script>
 | 
						|
        document.body.addEventListener('htmx:afterRequest', (evt) => {
 | 
						|
            console.log(evt.detail.xhr.responseText);
 | 
						|
        });
 | 
						|
        document.body.addEventListener('htmx:responseError', (evt) => {
 | 
						|
            console.error(evt.detail.xhr.responseText);
 | 
						|
        });
 | 
						|
    </script>
 | 
						|
    <script>
 | 
						|
    document.addEventListener('DOMContentLoaded', () => {
 | 
						|
        fetch('/agentNames')
 | 
						|
            .then(response => response.json())
 | 
						|
            .then(agentNames => {
 | 
						|
                const dropdown = document.getElementById('agentName');
 | 
						|
                agentNames.forEach(name => {
 | 
						|
                    const option = document.createElement('option');
 | 
						|
                    option.value = name;
 | 
						|
                    option.textContent = name;
 | 
						|
                    dropdown.appendChild(option);
 | 
						|
                });
 | 
						|
            })
 | 
						|
            .catch(error => console.error('Error fetching agent names:', error));
 | 
						|
 | 
						|
        const socket = new WebSocket("ws://localhost:5555/executeCommand");
 | 
						|
        socket.onmessage = (event) => {
 | 
						|
            const message = JSON.parse(event.data);
 | 
						|
            if (message.type === 'response') {
 | 
						|
                const output = document.getElementById('commandOutput');
 | 
						|
                output.textContent = "";
 | 
						|
                output.innerText = message.payload.trim();
 | 
						|
                console.log("Raw websocket Data:", event.data);
 | 
						|
            }
 | 
						|
        };
 | 
						|
 | 
						|
        socket.onerror = (error) => {
 | 
						|
            console.error("Websocket error:", error);
 | 
						|
        };
 | 
						|
 | 
						|
        socket.onclose = () => {
 | 
						|
            console.warn('Websocket connection closed.');
 | 
						|
        };
 | 
						|
    });
 | 
						|
    </script>
 | 
						|
</head>
 | 
						|
<body>
 | 
						|
    <div class="container">
 | 
						|
        <div class="row">
 | 
						|
            <div class="col">
 | 
						|
                <h2>Agents</h2>
 | 
						|
 | 
						|
                <!-- Agent List -->
 | 
						|
                <div id="agentList" hx-get="/agents" hx-trigger="load" hx-swap="innerHTML"></div>
 | 
						|
                <!-- Agent Commands -->
 | 
						|
                <div id="agentCommands">
 | 
						|
                    <h3>Command Execution</h3>
 | 
						|
                    <form hx-post="http://localhost:5555/executeCommand" hx-target="#commandOutput" hx-encoding="application/x-www-form-urlencoded"  hx-swap="innerHTML">
 | 
						|
                        <div class="mb-3">
 | 
						|
                            <label for="agentName" class="form-label">Agent Name</label>
 | 
						|
                            <select class="form-select" id="agentName" name="agentName" required>
 | 
						|
                                <!-- Dynamically populated with agent names -->
 | 
						|
                            </select>
 | 
						|
                        </div>
 | 
						|
                        <div class="mb-3">
 | 
						|
                            <label for="command" class="form-label">Command</label>
 | 
						|
                            <input type="text" class="form-control" id="command" name="command" placeholder="Enter command" required>
 | 
						|
                        </div>
 | 
						|
                        <button type="submit" class="btn btn-primary">Execute</button>
 | 
						|
                    </form>
 | 
						|
                    <pre id="commandOutput"></pre>
 | 
						|
                </div>
 | 
						|
 | 
						|
                <!-- <form hx-post="/agents/{agentId}/commands" hx-target="#commandOutput" hx-swap="innerHTML"> -->
 | 
						|
                <!--     <input type="text" name="command" placeholder="Enter command" required> -->
 | 
						|
                <!--     <button type="submit" class="btn btn-primary">Execute</button> -->
 | 
						|
                <!-- </form> -->
 | 
						|
                <!-- <pre id="commandOutput"></pre> -->
 | 
						|
                <!-- </div> -->
 | 
						|
 | 
						|
                <!-- Add Agent Form -->
 | 
						|
                <button class="btn btn-primary mt-3" data-bs-toggle="collapse" data-bs-target="#addAgentForm">Add Agent</button>
 | 
						|
                <div id="addAgentForm" class="collapse mt-2">
 | 
						|
                    <form hx-post="/agents" hx-target="#agentList" hx-swap="innerHTML">
 | 
						|
                        <div class="mb-3">
 | 
						|
                            <label for="agentId" class="form-label">Agent Id</label>
 | 
						|
                            <input type="text" class="form-control" id="agentId" name="agentId" required>
 | 
						|
                        </div>
 | 
						|
                        <div class="mb-3">
 | 
						|
                            <label for="agentName" class="form-label">Agent Name</label>
 | 
						|
                            <input type="text" class="form-control" id="agentName" name="agentName" required>
 | 
						|
                        </div>
 | 
						|
                        <div class="mb-3">
 | 
						|
                            <label for="IPv4Address" class="form-label">IPv4 Address</label>
 | 
						|
                            <input type="text" class="form-control" id="IPv4Address" name="IPv4Address" required>
 | 
						|
                        </div>
 | 
						|
                        <div class="mb-3">
 | 
						|
                            <label for="initialContact" class="form-label">Initial Contact</label>
 | 
						|
                            <input type="datetime-local" class="form-control" id="initialContact" name="initialContact" required>
 | 
						|
                        </div>
 | 
						|
                        <div class="mb-3">
 | 
						|
                            <label for="lastContact" class="form-label">Last Contact</label>
 | 
						|
                            <input type="datetime-local" class="form-control" id="lastContact" name="lastContact" required>
 | 
						|
                        </div>
 | 
						|
                        <button type="submit" class="btn btn-success">Add Agent</button>
 | 
						|
                    </form>
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
 | 
						|
            <!-- Agent Details -->
 | 
						|
            <div class="col" id="agentDetails">
 | 
						|
                <h3>Details</h3>
 | 
						|
                <p>Select an agent to view details.</p>
 | 
						|
            </div>
 | 
						|
        </div>
 | 
						|
    </div>
 | 
						|
</body>
 | 
						|
</html>
 |