|
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="UTF-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<title>PRIMUS Dashboard</title> |
|
<script src="https://cdn.tailwindcss.com"></script> |
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
|
<style> |
|
@import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&family=Roboto:wght@300;400;500;700&display=swap'); |
|
|
|
:root { |
|
--primary: #3b82f6; |
|
--primary-dark: #2563eb; |
|
--secondary: #10b981; |
|
--danger: #ef4444; |
|
--warning: #f59e0b; |
|
--dark: #1e293b; |
|
--light: #f8fafc; |
|
} |
|
|
|
body { |
|
font-family: 'Roboto', sans-serif; |
|
background-color: #f1f5f9; |
|
color: var(--dark); |
|
} |
|
|
|
.dashboard-title { |
|
font-family: 'Orbitron', sans-serif; |
|
letter-spacing: 1px; |
|
text-shadow: 0 2px 4px rgba(0,0,0,0.1); |
|
} |
|
|
|
.card { |
|
transition: all 0.3s ease; |
|
box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06); |
|
} |
|
|
|
.card:hover { |
|
transform: translateY(-2px); |
|
box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05); |
|
} |
|
|
|
.status-indicator { |
|
width: 12px; |
|
height: 12px; |
|
border-radius: 50%; |
|
display: inline-block; |
|
margin-right: 8px; |
|
} |
|
|
|
.status-safe { |
|
background-color: var(--secondary); |
|
box-shadow: 0 0 10px var(--secondary); |
|
} |
|
|
|
.status-warning { |
|
background-color: var(--warning); |
|
box-shadow: 0 0 10px var(--warning); |
|
} |
|
|
|
.status-danger { |
|
background-color: var(--danger); |
|
box-shadow: 0 0 10px var(--danger); |
|
} |
|
|
|
.scan-progress { |
|
height: 4px; |
|
background: linear-gradient(90deg, var(--primary), var(--secondary)); |
|
background-size: 200% 100%; |
|
animation: progress 2s linear infinite; |
|
} |
|
|
|
@keyframes progress { |
|
0% { background-position: 0% 50%; } |
|
50% { background-position: 100% 50%; } |
|
100% { background-position: 0% 50%; } |
|
} |
|
|
|
.glow { |
|
animation: glow 2s infinite alternate; |
|
} |
|
|
|
@keyframes glow { |
|
from { box-shadow: 0 0 5px rgba(59, 130, 246, 0.5); } |
|
to { box-shadow: 0 0 20px rgba(59, 130, 246, 0.8); } |
|
} |
|
|
|
|
|
.compact-scanner { |
|
max-height: 300px; |
|
overflow: hidden; |
|
transition: all 0.3s ease; |
|
} |
|
|
|
.compact-scanner.expanded { |
|
max-height: 600px; |
|
} |
|
|
|
.compact-results { |
|
max-height: 150px; |
|
font-size: 0.85rem; |
|
line-height: 1.3; |
|
} |
|
|
|
.compact-input { |
|
padding: 0.5rem 0.75rem; |
|
font-size: 0.9rem; |
|
} |
|
|
|
.compact-btn { |
|
padding: 0.5rem 1rem; |
|
font-size: 0.9rem; |
|
} |
|
</style> |
|
</head> |
|
<body class="min-h-screen"> |
|
<div class="container mx-auto px-4 py-8"> |
|
|
|
<header class="flex justify-between items-center mb-8"> |
|
<div> |
|
<h1 class="dashboard-title text-3xl md:text-4xl font-bold text-blue-600"> |
|
<i class="fas fa-shield-alt mr-2"></i>PRIMUS SECURITY DASHBOARD |
|
</h1> |
|
<p class="text-slate-500">Comprehensive security monitoring and threat detection</p> |
|
</div> |
|
<div class="flex items-center space-x-4"> |
|
<div class="relative"> |
|
<button id="notifications" class="p-2 rounded-full bg-white text-slate-600 hover:bg-slate-100"> |
|
<i class="fas fa-bell"></i> |
|
<span class="absolute top-0 right-0 w-2 h-2 bg-red-500 rounded-full"></span> |
|
</button> |
|
</div> |
|
<div class="flex items-center space-x-2 bg-white px-4 py-2 rounded-full shadow-sm"> |
|
<div class="w-8 h-8 rounded-full bg-blue-100 flex items-center justify-center text-blue-600"> |
|
<i class="fas fa-user"></i> |
|
</div> |
|
<span class="font-medium">Admin</span> |
|
</div> |
|
</div> |
|
</header> |
|
|
|
|
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mb-8"> |
|
|
|
<div class="card bg-white rounded-xl overflow-hidden"> |
|
<div class="px-6 py-4 border-b border-slate-100 flex justify-between items-center"> |
|
<h2 class="font-bold text-lg text-slate-800"> |
|
<i class="fas fa-heartbeat mr-2 text-red-500"></i>System Status |
|
</h2> |
|
<span class="text-xs px-2 py-1 bg-blue-100 text-blue-600 rounded-full">LIVE</span> |
|
</div> |
|
<div class="p-6"> |
|
<div id="status" class="space-y-4"> |
|
<div class="flex justify-between items-center"> |
|
<span class="text-slate-600">Safety Mode:</span> |
|
<span class="font-medium flex items-center"> |
|
<span class="status-indicator status-safe"></span> |
|
<span id="safety-mode">Loading...</span> |
|
</span> |
|
</div> |
|
<div class="flex justify-between items-center"> |
|
<span class="text-slate-600">Current Scenario:</span> |
|
<span class="font-medium" id="scenario">Loading...</span> |
|
</div> |
|
<div class="flex justify-between items-center"> |
|
<span class="text-slate-600">Threat Level:</span> |
|
<span class="font-medium"> |
|
<span id="threat-level" class="px-2 py-1 rounded-full text-xs bg-green-100 text-green-800">Analyzing...</span> |
|
</span> |
|
</div> |
|
<div class="flex justify-between items-center"> |
|
<span class="text-slate-600">Last Updated:</span> |
|
<span class="font-medium text-sm" id="last-updated">Just now</span> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="px-6 py-3 bg-slate-50 text-right"> |
|
<button onclick="updateStatus()" class="text-sm text-blue-600 hover:text-blue-800 flex items-center justify-end space-x-1"> |
|
<i class="fas fa-sync-alt"></i> |
|
<span>Refresh</span> |
|
</button> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="card bg-white rounded-xl overflow-hidden compact-scanner" id="scanner-container"> |
|
<div class="px-6 py-4 border-b border-slate-100 flex justify-between items-center"> |
|
<h2 class="font-bold text-lg text-slate-800"> |
|
<i class="fas fa-search mr-2 text-blue-500"></i>Network Scanner |
|
</h2> |
|
<button id="toggle-scanner" class="text-blue-600 hover:text-blue-800 text-sm"> |
|
<i class="fas fa-expand-alt"></i> |
|
</button> |
|
</div> |
|
<div class="p-4"> |
|
<div class="mb-3"> |
|
<label for="target-ip" class="block text-sm font-medium text-slate-700 mb-1">Target</label> |
|
<div class="flex space-x-2"> |
|
<input type="text" id="target-ip" placeholder="192.168.1.1" |
|
class="flex-1 compact-input border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"> |
|
<button onclick="scan()" class="compact-btn bg-blue-600 text-white rounded-lg hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 flex items-center space-x-2 glow"> |
|
<i class="fas fa-bolt"></i> |
|
<span>Scan</span> |
|
</button> |
|
</div> |
|
</div> |
|
<div id="scan-progress" class="scan-progress rounded-full mb-3 hidden"></div> |
|
<div class="bg-slate-50 rounded-lg p-3"> |
|
<div class="flex justify-between items-center mb-1"> |
|
<label class="block text-sm font-medium text-slate-700">Results</label> |
|
<button id="clear-results" class="text-xs text-slate-500 hover:text-slate-700"> |
|
<i class="fas fa-trash-alt mr-1"></i>Clear |
|
</button> |
|
</div> |
|
<pre id="results" class="compact-results text-slate-600 font-mono overflow-y-auto p-2 bg-white rounded border border-slate-200">No scan performed yet. Enter a target and click Scan.</pre> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="card bg-white rounded-xl overflow-hidden"> |
|
<div class="px-6 py-4 border-b border-slate-100"> |
|
<h2 class="font-bold text-lg text-slate-800"> |
|
<i class="fas fa-radar mr-2 text-purple-500"></i>Threat Detection |
|
</h2> |
|
</div> |
|
<div class="p-6"> |
|
<div class="space-y-4"> |
|
<div class="flex items-center justify-between"> |
|
<div class="flex items-center space-x-3"> |
|
<div class="p-2 bg-red-100 rounded-lg text-red-600"> |
|
<i class="fas fa-fire"></i> |
|
</div> |
|
<div> |
|
<h3 class="font-medium">Malicious Activity</h3> |
|
<p class="text-xs text-slate-500">Potential threats detected</p> |
|
</div> |
|
</div> |
|
<span class="text-red-600 font-bold">12</span> |
|
</div> |
|
<div class="flex items-center justify-between"> |
|
<div class="flex items-center space-x-3"> |
|
<div class="p-2 bg-yellow-100 rounded-lg text-yellow-600"> |
|
<i class="fas fa-exclamation-triangle"></i> |
|
</div> |
|
<div> |
|
<h3 class="font-medium">Suspicious Logins</h3> |
|
<p class="text-xs text-slate-500">Unusual access patterns</p> |
|
</div> |
|
</div> |
|
<span class="text-yellow-600 font-bold">5</span> |
|
</div> |
|
<div class="flex items-center justify-between"> |
|
<div class="flex items-center space-x-3"> |
|
<div class="p-2 bg-blue-100 rounded-lg text-blue-600"> |
|
<i class="fas fa-shield-virus"></i> |
|
</div> |
|
<div> |
|
<h3 class="font-medium">Vulnerabilities</h3> |
|
<p class="text-xs text-slate-500">System weaknesses found</p> |
|
</div> |
|
</div> |
|
<span class="text-blue-600 font-bold">8</span> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="px-6 py-3 bg-slate-50 text-center"> |
|
<button class="text-sm text-blue-600 hover:text-blue-800 flex items-center justify-center space-x-1 w-full"> |
|
<i class="fas fa-chart-line"></i> |
|
<span>View Detailed Report</span> |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8"> |
|
|
|
<div class="card bg-white rounded-xl overflow-hidden"> |
|
<div class="px-6 py-4 border-b border-slate-100"> |
|
<h2 class="font-bold text-lg text-slate-800"> |
|
<i class="fas fa-history mr-2 text-green-500"></i>Recent Activity |
|
</h2> |
|
</div> |
|
<div class="p-6"> |
|
<div class="space-y-4"> |
|
<div class="flex items-start space-x-3"> |
|
<div class="mt-1"> |
|
<div class="w-8 h-8 rounded-full bg-blue-100 flex items-center justify-center text-blue-600"> |
|
<i class="fas fa-user-shield text-sm"></i> |
|
</div> |
|
</div> |
|
<div> |
|
<h3 class="font-medium">Admin login detected</h3> |
|
<p class="text-sm text-slate-500">From IP: 192.168.1.100 at 10:42 AM</p> |
|
</div> |
|
<div class="ml-auto text-xs text-slate-400">2 min ago</div> |
|
</div> |
|
<div class="flex items-start space-x-3"> |
|
<div class="mt-1"> |
|
<div class="w-8 h-8 rounded-full bg-green-100 flex items-center justify-center text-green-600"> |
|
<i class="fas fa-check text-sm"></i> |
|
</div> |
|
</div> |
|
<div> |
|
<h3 class="font-medium">System scan completed</h3> |
|
<p class="text-sm text-slate-500">No critical threats found</p> |
|
</div> |
|
<div class="ml-auto text-xs text-slate-400">15 min ago</div> |
|
</div> |
|
<div class="flex items-start space-x-3"> |
|
<div class="mt-1"> |
|
<div class="w-8 h-8 rounded-full bg-yellow-100 flex items-center justify-center text-yellow-600"> |
|
<i class="fas fa-exclamation text-sm"></i> |
|
</div> |
|
</div> |
|
<div> |
|
<h3 class="font-medium">Unusual network activity</h3> |
|
<p class="text-sm text-slate-500">From IP: 192.168.1.45 - Port scanning detected</p> |
|
</div> |
|
<div class="ml-auto text-xs text-slate-400">1 hour ago</div> |
|
</div> |
|
<div class="flex items-start space-x-3"> |
|
<div class="mt-1"> |
|
<div class="w-8 h-8 rounded-full bg-red-100 flex items-center justify-center text-red-600"> |
|
<i class="fas fa-times text-sm"></i> |
|
</div> |
|
</div> |
|
<div> |
|
<h3 class="font-medium">Blocked brute force attempt</h3> |
|
<p class="text-sm text-slate-500">22 failed SSH login attempts</p> |
|
</div> |
|
<div class="ml-auto text-xs text-slate-400">3 hours ago</div> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="px-6 py-3 bg-slate-50 text-center"> |
|
<button class="text-sm text-blue-600 hover:text-blue-800 flex items-center justify-center space-x-1 w-full"> |
|
<i class="fas fa-list-ul"></i> |
|
<span>View Full Log</span> |
|
</button> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="card bg-white rounded-xl overflow-hidden"> |
|
<div class="px-6 py-4 border-b border-slate-100"> |
|
<h2 class="font-bold text-lg text-slate-800"> |
|
<i class="fas fa-microchip mr-2 text-amber-500"></i>System Resources |
|
</h2> |
|
</div> |
|
<div class="p-6"> |
|
<div class="space-y-6"> |
|
|
|
<div> |
|
<div class="flex justify-between mb-1"> |
|
<span class="text-sm font-medium text-slate-700">CPU Usage</span> |
|
<span class="text-sm font-medium text-blue-600" id="cpu-usage">65%</span> |
|
</div> |
|
<div class="w-full bg-slate-200 rounded-full h-2.5"> |
|
<div class="bg-blue-600 h-2.5 rounded-full" style="width: 65%"></div> |
|
</div> |
|
</div> |
|
|
|
|
|
<div> |
|
<div class="flex justify-between mb-1"> |
|
<span class="text-sm font-medium text-slate-700">Memory Usage</span> |
|
<span class="text-sm font-medium text-purple-600" id="memory-usage">78%</span> |
|
</div> |
|
<div class="w-full bg-slate-200 rounded-full h-2.5"> |
|
<div class="bg-purple-600 h-2.5 rounded-full" style="width: 78%"></div> |
|
</div> |
|
</div> |
|
|
|
|
|
<div> |
|
<div class="flex justify-between mb-1"> |
|
<span class="text-sm font-medium text-slate-700">Disk Usage</span> |
|
<span class="text-sm font-medium text-green-600" id="disk-usage">42%</span> |
|
</div> |
|
<div class="w-full bg-slate-200 rounded-full h-2.5"> |
|
<div class="bg-green-600 h-2.5 rounded-full" style="width: 42%"></div> |
|
</div> |
|
</div> |
|
|
|
|
|
<div class="grid grid-cols-2 gap-4"> |
|
<div> |
|
<div class="flex items-center space-x-2"> |
|
<i class="fas fa-arrow-down text-blue-500"></i> |
|
<span class="text-sm font-medium text-slate-700">Download</span> |
|
</div> |
|
<div class="text-xl font-bold mt-1" id="download-speed">12.4 Mbps</div> |
|
</div> |
|
<div> |
|
<div class="flex items-center space-x-2"> |
|
<i class="fas fa-arrow-up text-green-500"></i> |
|
<span class="text-sm font-medium text-slate-700">Upload</span> |
|
</div> |
|
<div class="text-xl font-bold mt-1" id="upload-speed">5.8 Mbps</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="px-6 py-3 bg-slate-50 text-center"> |
|
<button onclick="updateResources()" class="text-sm text-blue-600 hover:text-blue-800 flex items-center justify-center space-x-1 w-full"> |
|
<i class="fas fa-sync-alt"></i> |
|
<span>Refresh Metrics</span> |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
|
|
<footer class="text-center text-sm text-slate-500 mt-8"> |
|
<p>PRIMUS Security Dashboard v2.4.1 | © 2023 PRIMUS Security Systems</p> |
|
<p class="mt-1">Last system update: <span id="system-version">2023-11-15 14:30 UTC</span></p> |
|
</footer> |
|
</div> |
|
|
|
<script> |
|
|
|
function updateStatus() { |
|
const statusElement = document.getElementById('status'); |
|
const safetyModeElement = document.getElementById('safety-mode'); |
|
const scenarioElement = document.getElementById('scenario'); |
|
const threatLevelElement = document.getElementById('threat-level'); |
|
const lastUpdatedElement = document.getElementById('last-updated'); |
|
|
|
|
|
statusElement.innerHTML = '<div class="text-center py-4"><i class="fas fa-spinner fa-spin text-blue-500 text-2xl"></i><p class="mt-2 text-sm text-slate-600">Updating system status...</p></div>'; |
|
|
|
|
|
setTimeout(() => { |
|
|
|
const statuses = ['Active Protection', 'High Alert', 'Maintenance Mode']; |
|
const scenarios = ['Normal Operations', 'Under Attack', 'Scheduled Maintenance']; |
|
const threatLevels = [ |
|
{ level: 'Low', class: 'bg-green-100 text-green-800' }, |
|
{ level: 'Medium', class: 'bg-yellow-100 text-yellow-800' }, |
|
{ level: 'High', class: 'bg-red-100 text-red-800' } |
|
]; |
|
|
|
const randomStatus = statuses[Math.floor(Math.random() * statuses.length)]; |
|
const randomScenario = scenarios[Math.floor(Math.random() * scenarios.length)]; |
|
const randomThreat = threatLevels[Math.floor(Math.random() * threatLevels.length)]; |
|
|
|
|
|
const statusIndicator = document.querySelector('#status .status-indicator'); |
|
if (randomStatus === 'High Alert') { |
|
statusIndicator.className = 'status-indicator status-danger'; |
|
} else if (randomStatus === 'Maintenance Mode') { |
|
statusIndicator.className = 'status-indicator status-warning'; |
|
} else { |
|
statusIndicator.className = 'status-indicator status-safe'; |
|
} |
|
|
|
|
|
safetyModeElement.textContent = randomStatus; |
|
scenarioElement.textContent = randomScenario; |
|
threatLevelElement.textContent = randomThreat.level; |
|
threatLevelElement.className = `px-2 py-1 rounded-full text-xs ${randomThreat.class}`; |
|
|
|
|
|
const now = new Date(); |
|
lastUpdatedElement.textContent = now.toLocaleTimeString(); |
|
|
|
|
|
statusElement.innerHTML = ` |
|
<div class="flex justify-between items-center"> |
|
<span class="text-slate-600">Safety Mode:</span> |
|
<span class="font-medium flex items-center"> |
|
<span class="status-indicator ${randomStatus === 'High Alert' ? 'status-danger' : randomStatus === 'Maintenance Mode' ? 'status-warning' : 'status-safe'}"></span> |
|
<span id="safety-mode">${randomStatus}</span> |
|
</span> |
|
</div> |
|
<div class="flex justify-between items-center"> |
|
<span class="text-slate-600">Current Scenario:</span> |
|
<span class="font-medium" id="scenario">${randomScenario}</span> |
|
</div> |
|
<div class="flex justify-between items-center"> |
|
<span class="text-slate-600">Threat Level:</span> |
|
<span class="font-medium"> |
|
<span id="threat-level" class="px-2 py-1 rounded-full text-xs ${randomThreat.class}">${randomThreat.level}</span> |
|
</span> |
|
</div> |
|
<div class="flex justify-between items-center"> |
|
<span class="text-slate-600">Last Updated:</span> |
|
<span class="font-medium text-sm" id="last-updated">${now.toLocaleTimeString()}</span> |
|
</div> |
|
`; |
|
|
|
|
|
showNotification('System status updated successfully', 'success'); |
|
}, 1500); |
|
} |
|
|
|
|
|
function updateResources() { |
|
const cpuElement = document.getElementById('cpu-usage'); |
|
const memoryElement = document.getElementById('memory-usage'); |
|
const diskElement = document.getElementById('disk-usage'); |
|
const downloadElement = document.getElementById('download-speed'); |
|
const uploadElement = document.getElementById('upload-speed'); |
|
|
|
|
|
const randomCpu = Math.floor(Math.random() * 40) + 30; |
|
const randomMemory = Math.floor(Math.random() * 30) + 50; |
|
const randomDisk = Math.floor(Math.random() * 30) + 20; |
|
const randomDownload = (Math.random() * 10 + 5).toFixed(1); |
|
const randomUpload = (Math.random() * 5 + 2).toFixed(1); |
|
|
|
|
|
cpuElement.textContent = `${randomCpu}%`; |
|
document.querySelector('#cpu-usage').nextElementSibling.firstElementChild.style.width = `${randomCpu}%`; |
|
|
|
memoryElement.textContent = `${randomMemory}%`; |
|
document.querySelector('#memory-usage').nextElementSibling.firstElementChild.style.width = `${randomMemory}%`; |
|
|
|
diskElement.textContent = `${randomDisk}%`; |
|
document.querySelector('#disk-usage').nextElementSibling.firstElementChild.style.width = `${randomDisk}%`; |
|
|
|
downloadElement.textContent = `${randomDownload} Mbps`; |
|
uploadElement.textContent = `${randomUpload} Mbps`; |
|
|
|
|
|
showNotification('Resource metrics refreshed', 'info'); |
|
} |
|
|
|
|
|
function scan() { |
|
const targetIp = document.getElementById('target-ip').value.trim(); |
|
const resultsElement = document.getElementById('results'); |
|
const scanProgress = document.getElementById('scan-progress'); |
|
|
|
if (!targetIp) { |
|
showNotification('Please enter a target IP or hostname', 'error'); |
|
return; |
|
} |
|
|
|
|
|
resultsElement.textContent = 'Initializing scan...'; |
|
scanProgress.classList.remove('hidden'); |
|
|
|
|
|
let progress = 0; |
|
const progressInterval = setInterval(() => { |
|
progress += 5; |
|
if (progress >= 100) { |
|
clearInterval(progressInterval); |
|
completeScan(targetIp); |
|
scanProgress.classList.add('hidden'); |
|
} |
|
}, 200); |
|
|
|
|
|
setTimeout(() => { |
|
|
|
}, 3000); |
|
} |
|
|
|
function completeScan(target) { |
|
const resultsElement = document.getElementById('results'); |
|
|
|
|
|
const scanResults = ` |
|
Scanning target: ${target} |
|
Scan started at: ${new Date().toLocaleString()} |
|
|
|
PORT STATE SERVICE VERSION |
|
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 |
|
80/tcp open http Apache httpd 2.4.41 |
|
443/tcp open ssl/http Apache httpd 2.4.41 |
|
3306/tcp filtered mysql |
|
8080/tcp open http-proxy nginx 1.18.0 |
|
|
|
Nmap scan report for ${target} |
|
Host is up (0.045s latency). |
|
5 ports scanned, 3 open, 1 filtered, 1 closed |
|
|
|
Security Assessment: |
|
- Outdated Apache version detected (2.4.41) |
|
- SSH service running with default configuration |
|
- No critical vulnerabilities found |
|
|
|
Scan completed in 4.23 seconds |
|
`; |
|
|
|
resultsElement.textContent = scanResults; |
|
showNotification(`Scan completed for ${target}`, 'success'); |
|
|
|
|
|
updateActivityLog(`Network scan performed on ${target}`); |
|
} |
|
|
|
|
|
function showNotification(message, type) { |
|
const notification = document.createElement('div'); |
|
notification.className = `fixed bottom-4 right-4 px-4 py-3 rounded-lg shadow-lg text-white max-w-xs ${ |
|
type === 'error' ? 'bg-red-500' : |
|
type === 'success' ? 'bg-green-500' : |
|
'bg-blue-500' |
|
}`; |
|
notification.innerHTML = ` |
|
<div class="flex items-center"> |
|
<i class="fas ${ |
|
type === 'error' ? 'fa-exclamation-circle' : |
|
type === 'success' ? 'fa-check-circle' : |
|
'fa-info-circle' |
|
} mr-2"></i> |
|
<span>${message}</span> |
|
</div> |
|
`; |
|
|
|
document.body.appendChild(notification); |
|
|
|
|
|
setTimeout(() => { |
|
notification.classList.add('opacity-0', 'transition-opacity', 'duration-300'); |
|
setTimeout(() => notification.remove(), 300); |
|
}, 5000); |
|
} |
|
|
|
|
|
function updateActivityLog(message) { |
|
const activityLog = document.querySelector('.space-y-4'); |
|
const now = new Date(); |
|
|
|
const newEntry = document.createElement('div'); |
|
newEntry.className = 'flex items-start space-x-3'; |
|
newEntry.innerHTML = ` |
|
<div class="mt-1"> |
|
<div class="w-8 h-8 rounded-full bg-blue-100 flex items-center justify-center text-blue-600"> |
|
<i class="fas fa-search text-sm"></i> |
|
</div> |
|
</div> |
|
<div> |
|
<h3 class="font-medium">${message}</h3> |
|
<p class="text-sm text-slate-500">Scan completed successfully</p> |
|
</div> |
|
<div class="ml-auto text-xs text-slate-400">Just now</div> |
|
`; |
|
|
|
activityLog.prepend(newEntry); |
|
} |
|
|
|
|
|
function toggleScannerSize() { |
|
const scannerContainer = document.getElementById('scanner-container'); |
|
const toggleButton = document.getElementById('toggle-scanner'); |
|
|
|
scannerContainer.classList.toggle('expanded'); |
|
|
|
if (scannerContainer.classList.contains('expanded')) { |
|
toggleButton.innerHTML = '<i class="fas fa-compress-alt"></i>'; |
|
} else { |
|
toggleButton.innerHTML = '<i class="fas fa-expand-alt"></i>'; |
|
} |
|
} |
|
|
|
|
|
function clearResults() { |
|
document.getElementById('results').textContent = 'No scan performed yet. Enter a target and click Scan.'; |
|
} |
|
|
|
|
|
document.addEventListener('DOMContentLoaded', function() { |
|
updateStatus(); |
|
updateResources(); |
|
|
|
|
|
document.getElementById('system-version').textContent = new Date().toISOString().replace('T', ' ').substring(0, 19) + ' UTC'; |
|
|
|
|
|
document.getElementById('notifications').addEventListener('click', function() { |
|
showNotification('You have 3 unread notifications', 'info'); |
|
}); |
|
|
|
|
|
document.getElementById('toggle-scanner').addEventListener('click', toggleScannerSize); |
|
|
|
|
|
document.getElementById('clear-results').addEventListener('click', clearResults); |
|
}); |
|
</script> |
|
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=S-Dreamer/primussecuritydashboard" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
|
</html> |