1
0
mirror of https://github.com/infinition/Bjorn.git synced 2024-11-11 22:38:39 +03:00
Files
2024-11-07 16:39:14 +01:00

174 lines
8.2 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bjorn Cyberviking - Playground</title>
<link rel="icon" href="web/images/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="web/css/styles.css">
<link rel="manifest" href="manifest.json">
<link rel="apple-touch-icon" sizes="192x192" href="web/images/icon-192x192.png">
<script src="web/scripts/index.js" defer></script>
<script src="https://cdn3.devexpress.com/jslib/20.2.5/js/dx.all.js"></script>
<link rel="stylesheet" href="https://cdn3.devexpress.com/jslib/20.2.5/css/dx.common.css">
<link rel="stylesheet" href="https://cdn3.devexpress.com/jslib/20.2.5/css/dx.light.css">
</head>
<body>
<div class="toolbar" id="mainToolbar">
<button type="button" onclick="window.location.href='/index.html'" title="Playground">
<img src="/web/images/console_icon.png" alt="Bjorn" style="height: 50px;">
</button>
<button type="button" onclick="window.location.href='/config.html'" title="Config">
<img src="/web/images/config_icon.png" alt="Icon_config" style="height: 50px;">
</button>
<button type="button" onclick="window.location.href='/network.html'" title="Network">
<img src="/web/images/network_icon.png" alt="Icon_network" style="height: 50px;">
</button>
<button type="button" onclick="window.location.href='/netkb.html'" title="NetKB">
<img src="/web/images/netkb_icon.png" alt="Icon_netkb" style="height: 50px;">
</button>
<button type="button" onclick="window.location.href='/credentials.html'" title="Credentials">
<img src="/web/images/cred_icon.png" alt="Icon_cred" style="height: 50px;">
</button>
<button type="button" onclick="window.location.href='/loot.html'" title="Loot">
<img src="/web/images/loot_icon.png" alt="Icon_loot" style="height: 50px;">
</button>
</div>
<div class="console-toolbar">
<button type="button" class="toolbar-button" onclick="adjustFontSize(-1)" title="-">
<img src="/web/images/less.png" alt="Icon_less" style="height: 50px;">
</button>
<div id="bjorn-dropdown-container" class="toolbar-button"></div>
<button id="toggle-toolbar" type="button" class="toolbar-button" onclick="toggleToolbar()" data-open="false">
<img id="toggle-icon" src="/web/images/hide.png" alt="Toggle Toolbar" style="height: 50px;">
</button>
<div id="dropdown-container" class="toolbar-button"></div>
<button type="button" class="toolbar-button" onclick="adjustFontSize(1)" title="+">
<img src="/web/images/plus.png" alt="Icon_plus" style="height: 50px;">
</button>
</div>
<div class="console-toolbar">
<button id="toggle-console-button" class="toolbar-button" type="button" onclick="toggleConsole()">
<img id="toggle-console-image" src="/web/images/off.png" alt="Toggle Console" style="height: 30px;">
</button>
<button id="manual-mode-button" type="button" class="toolbar-button" onclick="toggleManualMode()" title="Manual Mode">
<img id="manual-mode-icon" src="/web/images/manual.png" alt="Manual Mode" style="height: 50px;">
</button>
</div>
<div id="manual-mode-panel" class="toolbar-button hidden" class="hidden">
<select id="ip-dropdown" onchange="updatePortsAndActions()"></select>
<select id="port-dropdown"></select>
<select id="action-dropdown"></select>
<button type="button" onclick="executeManualAttack()">Execute Attack</button>
</div>
<div id="log-console"></div>
<div id="popupContainer"></div>
<script>
document.addEventListener('DOMContentLoaded', () => {
adjustLogConsoleHeight();
loadManualModeOptions();
});
function loadManualModeOptions() {
fetch('/netkb_data_json')
.then(response => response.json())
.then(data => {
const ipDropdown = document.getElementById('ip-dropdown');
const actionDropdown = document.getElementById('action-dropdown');
ipDropdown.innerHTML = data.ips.map(ip => `<option value="${ip}">${ip}</option>`).join('');
actionDropdown.innerHTML = data.actions.map(action => `<option value="${action}">${action}</option>`).join('');
})
.catch(error => console.error('Error loading netkb data:', error));
}
function updatePortsAndActions() {
const ipDropdown = document.getElementById('ip-dropdown');
const selectedIp = ipDropdown.value;
fetch('/netkb_data_json')
.then(response => response.json())
.then(data => {
const portDropdown = document.getElementById('port-dropdown');
portDropdown.innerHTML = data.ports[selectedIp].map(port => `<option value="${port}">${port}</option>`).join('');
})
.catch(error => console.error('Error updating ports:', error));
}
function executeManualAttack() {
const ip = document.getElementById('ip-dropdown').value;
const port = document.getElementById('port-dropdown').value;
const action = document.getElementById('action-dropdown').value;
fetch('/execute_manual_attack', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ ip, port, action })
})
.then(response => response.json())
.then(data => {
if (data.status === 'success') {
console.log('Manual attack executed successfully:', data.message);
} else {
console.error('Failed to execute manual attack:', data.message);
}
loadRecentLogs(); // Charger les logs récents après l'exécution de l'attaque
})
.catch(error => console.error('Error executing manual attack:', error));
}
function loadRecentLogs() {
fetch('/recent_logs')
.then(response => response.text())
.then(data => {
const logConsole = document.getElementById('log-console');
logConsole.innerHTML = `<pre>${data}</pre>`;
})
.catch(error => console.error('Error loading recent logs:', error));
}
function toggleManualMode() {
const panel = document.getElementById('manual-mode-panel');
const icon = document.getElementById('manual-mode-icon');
if (panel.classList.contains('hidden')) {
panel.classList.remove('hidden');
panel.classList.add('visible');
icon.src = '/web/images/ai.png';
stop_orchestrator();
} else {
panel.classList.remove('visible');
panel.classList.add('hidden');
icon.src = '/web/images/manual.png';
start_orchestrator();
}
adjustLogConsoleHeight();
}
function adjustLogConsoleHeight() {
const panel = document.getElementById('manual-mode-panel');
const logConsole = document.getElementById('log-console');
if (panel.classList.contains('visible')) {
logConsole.style.height = `calc(100vh - ${panel.offsetHeight}px - 100px)`;
} else {
logConsole.style.height = 'calc(100vh - 100px)';
}
}
function stop_orchestrator() {
fetch('/stop_orchestrator', { method: 'POST' })
.catch(error => console.error('Failed to stop orchestrator:', error));
}
function start_orchestrator() {
fetch('/start_orchestrator', { method: 'POST' })
.catch(error => console.error('Failed to start orchestrator:', error));
}
</script>
</body>
</html>