feat: Remove frontend files, replace with auto build and copy into project dir (#4)
|
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 194 KiB After Width: | Height: | Size: 194 KiB |
|
Before Width: | Height: | Size: 161 KiB After Width: | Height: | Size: 161 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
2
.gitignore
vendored
@ -10,3 +10,5 @@ target/
|
||||
|
||||
.idea
|
||||
logs
|
||||
.env
|
||||
net-guardia/static/web
|
||||
|
||||
11
Cargo.lock
generated
@ -703,6 +703,12 @@ dependencies = [
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dotenvy"
|
||||
version = "0.15.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
|
||||
|
||||
[[package]]
|
||||
name = "encoding_rs"
|
||||
version = "0.8.35"
|
||||
@ -741,7 +747,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1204,6 +1210,7 @@ dependencies = [
|
||||
"aya",
|
||||
"aya-log",
|
||||
"cargo_metadata",
|
||||
"dotenvy",
|
||||
"libc",
|
||||
"mime_guess",
|
||||
"net-guardia-common",
|
||||
@ -1597,7 +1604,7 @@ dependencies = [
|
||||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys",
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
@ -13,21 +13,21 @@
|
||||
## 🧩 功能模組
|
||||
|
||||
### 📊 儀表板總覽 (Dashboard)
|
||||

|
||||

|
||||
- 即時網路流量監控與視覺化統計
|
||||
- 近期流量大小統計與趨勢圖
|
||||
|
||||
### 📈 詳細流量統計 (Statistics)
|
||||

|
||||

|
||||
- 各 IP 位址詳細流量使用情況
|
||||
|
||||
### 🔒 網路存取控制 (Access Control)
|
||||

|
||||

|
||||
- IPv4/IPv6 黑白名單管理
|
||||
- 精確的連接埠層級存取控制
|
||||
|
||||
### 🤖 AI 攻擊偵測 (AI Detection)
|
||||

|
||||

|
||||
- 基於 AI 的攻擊偵測引擎
|
||||
|
||||
## ✨ 系統特色
|
||||
|
||||
@ -28,6 +28,7 @@ tracing-subscriber = { version = "0.3.20", features = ["env-filter"] }
|
||||
|
||||
[build-dependencies]
|
||||
cargo_metadata = { workspace = true }
|
||||
dotenvy = "0.15.7"
|
||||
|
||||
[[bin]]
|
||||
name = "net-guardia"
|
||||
|
||||
@ -4,13 +4,13 @@ use std::{
|
||||
path::PathBuf,
|
||||
process::{Child, Command, Stdio},
|
||||
};
|
||||
|
||||
use std::time::SystemTime;
|
||||
use cargo_metadata::{Artifact, CompilerMessage, Message, Metadata, MetadataCommand, Package, Target, TargetKind};
|
||||
|
||||
|
||||
fn main() {
|
||||
build_ingress_ebpf();
|
||||
build_egress_ebpf();
|
||||
build_frontend();
|
||||
}
|
||||
|
||||
/// This crate has a runtime dependency on artifacts produced by the `net-guardia-ingress-ebpf` crate.
|
||||
@ -138,8 +138,8 @@ fn build_ingress_ebpf() {
|
||||
|
||||
for (name, binary) in executables {
|
||||
let dst = out_dir.join(name);
|
||||
let _: u64 = fs::copy(&binary, &dst)
|
||||
.unwrap_or_else(|err| panic!("failed to copy {binary:?} to {dst:?}: {err}"));
|
||||
let _: u64 =
|
||||
fs::copy(&binary, &dst).unwrap_or_else(|err| panic!("failed to copy {binary:?} to {dst:?}: {err}"));
|
||||
}
|
||||
} else {
|
||||
let Package { targets, .. } = ebpf_package;
|
||||
@ -250,10 +250,10 @@ fn build_egress_ebpf() {
|
||||
#[allow(clippy::collapsible_match)]
|
||||
match message.expect("valid JSON") {
|
||||
Message::CompilerArtifact(Artifact {
|
||||
executable,
|
||||
target: Target { name, .. },
|
||||
..
|
||||
}) => {
|
||||
executable,
|
||||
target: Target { name, .. },
|
||||
..
|
||||
}) => {
|
||||
if let Some(executable) = executable {
|
||||
executables.push((name, executable.into_std_path_buf()));
|
||||
}
|
||||
@ -279,8 +279,8 @@ fn build_egress_ebpf() {
|
||||
|
||||
for (name, binary) in executables {
|
||||
let dst = out_dir.join(name);
|
||||
let _: u64 = fs::copy(&binary, &dst)
|
||||
.unwrap_or_else(|err| panic!("failed to copy {binary:?} to {dst:?}: {err}"));
|
||||
let _: u64 =
|
||||
fs::copy(&binary, &dst).unwrap_or_else(|err| panic!("failed to copy {binary:?} to {dst:?}: {err}"));
|
||||
}
|
||||
} else {
|
||||
let Package { targets, .. } = ebpf_package;
|
||||
@ -293,3 +293,160 @@ fn build_egress_ebpf() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn build_frontend() {
|
||||
let _ = dotenvy::dotenv();
|
||||
|
||||
let Some(frontend_dir) = env::var_os("FRONTEND_DIR") else {
|
||||
panic!("FRONTEND_DIR environment variable is required but not set");
|
||||
};
|
||||
|
||||
let project_root = env::var("CARGO_MANIFEST_DIR").unwrap();
|
||||
let static_dir = PathBuf::from(project_root).join("static").join("web");
|
||||
let frontend_dir = PathBuf::from(frontend_dir);
|
||||
|
||||
if !frontend_dir.exists() {
|
||||
panic!("Frontend directory {:?} does not exist", frontend_dir);
|
||||
}
|
||||
|
||||
println!("cargo:rerun-if-changed={}", frontend_dir.join("src").display());
|
||||
println!("cargo:rerun-if-changed={}", frontend_dir.join("public").display());
|
||||
println!("cargo:rerun-if-changed={}", frontend_dir.join("package.json").display());
|
||||
println!("cargo:rerun-if-changed={}", frontend_dir.join("package-lock.json").display());
|
||||
println!("cargo:rerun-if-changed={}", frontend_dir.join("next.config.js").display());
|
||||
println!("cargo:rerun-if-changed={}", frontend_dir.join("tailwind.config.js").display());
|
||||
println!("cargo:rerun-if-changed={}", frontend_dir.join("postcss.config.js").display());
|
||||
println!("cargo:rerun-if-changed={}", frontend_dir.join("tsconfig.json").display());
|
||||
|
||||
let out_dir = frontend_dir.join("out");
|
||||
|
||||
let need_build = needs_frontend_rebuild(&frontend_dir, &out_dir, &static_dir);
|
||||
if !need_build {
|
||||
return;
|
||||
}
|
||||
|
||||
let mut cmd = Command::new("npm");
|
||||
cmd.arg("install").current_dir(&frontend_dir);
|
||||
|
||||
let status = cmd
|
||||
.status()
|
||||
.unwrap_or_else(|err| panic!("failed to run npm install: {err}"));
|
||||
if !status.success() {
|
||||
panic!("npm install failed with exit code: {:?}", status.code());
|
||||
}
|
||||
|
||||
let mut cmd = Command::new("npx");
|
||||
cmd.args(["next", "build"]).current_dir(&frontend_dir);
|
||||
|
||||
let status = cmd
|
||||
.status()
|
||||
.unwrap_or_else(|err| panic!("failed to run next build: {err}"));
|
||||
if !status.success() {
|
||||
panic!("next build failed with exit code: {:?}", status.code());
|
||||
}
|
||||
|
||||
if static_dir.exists() {
|
||||
fs::remove_dir_all(&static_dir).unwrap_or_else(|err| panic!("failed to remove {:?}: {err}", static_dir));
|
||||
}
|
||||
fs::create_dir_all(&static_dir).unwrap_or_else(|err| panic!("failed to create {:?}: {err}", static_dir));
|
||||
|
||||
copy_dir_all(&out_dir, &static_dir).unwrap_or_else(|err| panic!("failed to copy frontend build: {err}"));
|
||||
}
|
||||
|
||||
fn needs_frontend_rebuild(frontend_dir: &PathBuf, out_dir: &PathBuf, static_dir: &PathBuf) -> bool {
|
||||
if !out_dir.exists() {
|
||||
return true;
|
||||
}
|
||||
|
||||
if !static_dir.exists() {
|
||||
return true;
|
||||
}
|
||||
|
||||
let out_modified = match fs::metadata(out_dir).and_then(|m| m.modified()) {
|
||||
Ok(time) => time,
|
||||
Err(_) => {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
let static_modified = match fs::metadata(static_dir).and_then(|m| m.modified()) {
|
||||
Ok(time) => time,
|
||||
Err(_) => {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
let essential_items = [
|
||||
"src",
|
||||
"public",
|
||||
"package.json",
|
||||
"next.config.js",
|
||||
"tailwind.config.js",
|
||||
"postcss.config.js",
|
||||
"tsconfig.json",
|
||||
"package-lock.json",
|
||||
];
|
||||
|
||||
for item_name in essential_items {
|
||||
let item_path = frontend_dir.join(item_name);
|
||||
if !item_path.exists() {
|
||||
continue;
|
||||
}
|
||||
|
||||
let item_modified = match get_dir_last_modified(&item_path) {
|
||||
Some(time) => time,
|
||||
None => continue,
|
||||
};
|
||||
|
||||
if item_modified > out_modified {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if out_modified > static_modified {
|
||||
return true;
|
||||
}
|
||||
|
||||
false
|
||||
}
|
||||
|
||||
fn get_dir_last_modified(path: &PathBuf) -> Option<SystemTime> {
|
||||
if path.is_file() {
|
||||
return fs::metadata(path).and_then(|m| m.modified()).ok();
|
||||
}
|
||||
|
||||
if path.is_dir() {
|
||||
let mut latest = fs::metadata(path).and_then(|m| m.modified()).ok()?;
|
||||
|
||||
if let Ok(entries) = fs::read_dir(path) {
|
||||
for entry in entries.flatten() {
|
||||
if let Some(modified) = get_dir_last_modified(&entry.path()) {
|
||||
if modified > latest {
|
||||
latest = modified;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Some(latest);
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
fn copy_dir_all(src: &PathBuf, dst: &PathBuf) -> std::io::Result<()> {
|
||||
for entry in fs::read_dir(src)? {
|
||||
let entry = entry?;
|
||||
let file_type = entry.file_type()?;
|
||||
let src_path = entry.path();
|
||||
let dst_path = dst.join(entry.file_name());
|
||||
|
||||
if file_type.is_dir() {
|
||||
fs::create_dir_all(&dst_path)?;
|
||||
copy_dir_all(&src_path, &dst_path)?;
|
||||
} else {
|
||||
fs::copy(&src_path, &dst_path)?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -1,9 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[597],{5096:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var i=n(7876),r=n(4232),s=n(7328),a=n.n(s),o=n(6463),l=n(8230),c=n.n(l),d=n(9099),h=n(6848),p=n(1772),u=n(1041);let x=[{href:"/",icon:u.v02,label:"Home"},{href:"/dashboard",icon:u.xiI,label:"Dashboard"},{href:"/statistics",icon:u.$Fj,label:"Statistics"},{href:"/access-control",icon:u.imB,label:"Access Control"},{href:"/detection",icon:u.UBk,label:"Detection"}],m=e=>{let{children:t}=e,n=(0,d.useRouter)(),[s,a]=(0,r.useState)(!1),o=e=>"/"===e?"/"===n.pathname:n.pathname.startsWith(e),l={expanded:{x:0,opacity:1},collapsed:{x:-10,opacity:0}};return(0,i.jsxs)("div",{className:"flex min-h-screen bg-gray-100",children:[(0,i.jsxs)(h.P.aside,{className:"fixed top-0 left-0 h-screen bg-gradient-to-br from-slate-800 to-slate-700 text-white flex flex-col shadow-lg z-50 overflow-hidden",initial:"expanded",animate:s?"collapsed":"expanded",variants:{expanded:{width:"240px"},collapsed:{width:"80px"}},transition:{duration:.3,ease:"easeInOut"},children:[(0,i.jsxs)("div",{className:"flex items-center justify-between p-4 border-b border-white/10 min-h-[70px]",children:[!s&&(0,i.jsx)(c(),{href:"/",className:"no-underline text-inherit",children:(0,i.jsx)(h.P.h1,{className:"text-2xl font-bold text-blue-400 m-0 whitespace-nowrap",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.3},children:"NetGuardia"})}),(0,i.jsx)("button",{onClick:()=>{a(!s)},className:"bg-transparent border-none text-white cursor-pointer p-2 rounded-md flex items-center justify-center w-10 h-10 hover:bg-white/10 transition-colors duration-200",children:(0,i.jsx)(p.g,{icon:u.ckx})})]}),(0,i.jsx)("nav",{className:"flex-1 py-4 flex flex-col gap-2",children:x.map(e=>(0,i.jsxs)(c(),{href:e.href,className:"\n flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg\n ".concat(s?"px-2 py-2 justify-center h-12 w-12":"px-4 py-3","\n ").concat(o(e.href)?"bg-blue-600 text-white shadow-lg shadow-blue-600/30":"text-slate-300 hover:bg-white/10 hover:text-white","\n "),children:[(0,i.jsx)("div",{className:"flex items-center justify-center flex-shrink-0 w-6 h-6",children:(0,i.jsx)(p.g,{icon:e.icon,className:"text-lg"})}),!s&&(0,i.jsx)(h.P.span,{className:"font-medium whitespace-nowrap overflow-hidden ml-3",variants:l,initial:"expanded",animate:s?"collapsed":"expanded",transition:{duration:.2},children:e.label})]},e.href))})]}),(0,i.jsx)("div",{className:"flex-1 flex flex-col transition-all duration-300 ".concat(s?"ml-20":"ml-60"),children:(0,i.jsx)("section",{className:"flex-1 p-8",children:(0,i.jsx)("div",{className:"max-w-full mx-auto",children:t})})})]})},f=e=>{let{children:t,title:n="NetGuardia",description:r="NetGuardia"}=e,s="".concat(o.hX,"/logo.png");return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(a(),{children:[(0,i.jsx)("title",{children:n}),(0,i.jsx)("meta",{name:"description",content:r}),(0,i.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1"}),(0,i.jsx)("link",{rel:"icon",href:"/favicon.ico"}),(0,i.jsx)("meta",{property:"og:type",content:"website"}),(0,i.jsx)("meta",{property:"og:title",content:n}),(0,i.jsx)("meta",{property:"og:description",content:r}),(0,i.jsx)("meta",{property:"og:url",content:o.hX}),(0,i.jsx)("meta",{property:"og:image",content:s}),(0,i.jsx)("meta",{property:"og:image:width",content:"200"}),(0,i.jsx)("meta",{property:"og:image:height",content:"200"}),(0,i.jsx)("meta",{property:"og:image:alt",content:"NetGuardia"}),(0,i.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,i.jsx)("meta",{name:"twitter:title",content:n}),(0,i.jsx)("meta",{name:"twitter:description",content:r}),(0,i.jsx)("meta",{name:"twitter:image",content:s})]}),(0,i.jsx)(m,{children:t})]})}},7212:(e,t,n)=>{"use strict";n.d(t,{N:()=>j});var i=n(7876),r=n(4232),s=n(5048),a=n(1200),o=n(181),l=n(3866),c=n(7990),d=n(9751);class h extends r.Component{getSnapshotBeforeUpdate(e){let t=this.props.childRef.current;if(t&&e.isPresent&&!this.props.isPresent){let e=t.offsetParent,n=(0,c.s)(e)&&e.offsetWidth||0,i=this.props.sizeRef.current;i.height=t.offsetHeight||0,i.width=t.offsetWidth||0,i.top=t.offsetTop,i.left=t.offsetLeft,i.right=n-i.width-i.left}return null}componentDidUpdate(){}render(){return this.props.children}}function p({children:e,isPresent:t,anchorX:n,root:s}){let a=(0,r.useId)(),o=(0,r.useRef)(null),l=(0,r.useRef)({width:0,height:0,top:0,left:0,right:0}),{nonce:c}=(0,r.useContext)(d.Q);return(0,r.useInsertionEffect)(()=>{let{width:e,height:i,top:r,left:d,right:h}=l.current;if(t||!o.current||!e||!i)return;let p="left"===n?`left: ${d}`:`right: ${h}`;o.current.dataset.motionPopId=a;let u=document.createElement("style");c&&(u.nonce=c);let x=s??document.head;return x.appendChild(u),u.sheet&&u.sheet.insertRule(`
|
||||
[data-motion-pop-id="${a}"] {
|
||||
position: absolute !important;
|
||||
width: ${e}px !important;
|
||||
height: ${i}px !important;
|
||||
${p}px !important;
|
||||
top: ${r}px !important;
|
||||
}
|
||||
`),()=>{x.contains(u)&&x.removeChild(u)}},[t]),(0,i.jsx)(h,{isPresent:t,childRef:o,sizeRef:l,children:r.cloneElement(e,{ref:o})})}let u=({children:e,initial:t,isPresent:n,onExitComplete:s,custom:o,presenceAffectsLayout:c,mode:d,anchorX:h,root:u})=>{let m=(0,a.M)(x),f=(0,r.useId)(),g=!0,j=(0,r.useMemo)(()=>(g=!1,{id:f,initial:t,isPresent:n,custom:o,onExitComplete:e=>{for(let t of(m.set(e,!0),m.values()))if(!t)return;s&&s()},register:e=>(m.set(e,!1),()=>m.delete(e))}),[n,m,s]);return c&&g&&(j={...j}),(0,r.useMemo)(()=>{m.forEach((e,t)=>m.set(t,!1))},[n]),r.useEffect(()=>{n||m.size||!s||s()},[n]),"popLayout"===d&&(e=(0,i.jsx)(p,{isPresent:n,anchorX:h,root:u,children:e})),(0,i.jsx)(l.t.Provider,{value:j,children:e})};function x(){return new Map}var m=n(3885);let f=e=>e.key||"";function g(e){let t=[];return r.Children.forEach(e,e=>{(0,r.isValidElement)(e)&&t.push(e)}),t}let j=({children:e,custom:t,initial:n=!0,onExitComplete:l,presenceAffectsLayout:c=!0,mode:d="sync",propagate:h=!1,anchorX:p="left",root:x})=>{let[j,w]=(0,m.xQ)(h),b=(0,r.useMemo)(()=>g(e),[e]),y=h&&!j?[]:b.map(f),v=(0,r.useRef)(!0),N=(0,r.useRef)(b),E=(0,a.M)(()=>new Map),[C,P]=(0,r.useState)(b),[k,R]=(0,r.useState)(b);(0,o.E)(()=>{v.current=!1,N.current=b;for(let e=0;e<k.length;e++){let t=f(k[e]);y.includes(t)?E.delete(t):!0!==E.get(t)&&E.set(t,!1)}},[k,y.length,y.join("-")]);let $=[];if(b!==C){let e=[...b];for(let t=0;t<k.length;t++){let n=k[t],i=f(n);y.includes(i)||(e.splice(t,0,n),$.push(n))}return"wait"===d&&$.length&&(e=$),R(g(e)),P(b),null}let{forceRender:M}=(0,r.useContext)(s.L);return(0,i.jsx)(i.Fragment,{children:k.map(e=>{let r=f(e),s=(!h||!!j)&&(b===k||y.includes(r));return(0,i.jsx)(u,{isPresent:s,initial:(!v.current||!!n)&&void 0,custom:t,presenceAffectsLayout:c,mode:d,root:x,onExitComplete:s?void 0:()=>{if(!E.has(r))return;E.set(r,!0);let e=!0;E.forEach(t=>{t||(e=!1)}),e&&(M?.(),R(N.current),h&&w?.(),l&&l())},anchorX:p,children:e},r)})})}},9099:(e,t,n)=>{e.exports=n(8253)}}]);
|
||||
@ -1 +0,0 @@
|
||||
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[731],{2164:(_,n,e)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/_error",function(){return e(4100)}])}},_=>{var n=n=>_(_.s=n);_.O(0,[636,593,792],()=>n(2164)),_N_E=_.O()}]);
|
||||
@ -1 +0,0 @@
|
||||
(()=>{"use strict";var e={},r={};function t(o){var n=r[o];if(void 0!==n)return n.exports;var i=r[o]={exports:{}},l=!0;try{e[o](i,i.exports,t),l=!1}finally{l&&delete r[o]}return i.exports}t.m=e,(()=>{var e=[];t.O=(r,o,n,i)=>{if(o){i=i||0;for(var l=e.length;l>0&&e[l-1][2]>i;l--)e[l]=e[l-1];e[l]=[o,n,i];return}for(var a=1/0,l=0;l<e.length;l++){for(var[o,n,i]=e[l],u=!0,f=0;f<o.length;f++)(!1&i||a>=i)&&Object.keys(t.O).every(e=>t.O[e](o[f]))?o.splice(f--,1):(u=!1,i<a&&(a=i));if(u){e.splice(l--,1);var s=n();void 0!==s&&(r=s)}}return r}})(),t.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return t.d(r,{a:r}),r},t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.p="/_next/",(()=>{var e={68:0};t.O.j=r=>0===e[r];var r=(r,o)=>{var n,i,[l,a,u]=o,f=0;if(l.some(r=>0!==e[r])){for(n in a)t.o(a,n)&&(t.m[n]=a[n]);if(u)var s=u(t)}for(r&&r(o);f<l.length;f++)i=l[f],t.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return t.O(s)},o=self.webpackChunk_N_E=self.webpackChunk_N_E||[];o.forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o))})()})();
|
||||
@ -1 +0,0 @@
|
||||
self.__BUILD_MANIFEST=function(s,t,a,e,c,r){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:0,errorRate:1e-4,numBits:0,numHashes:null,bitArray:[]},__routerFilterDynamic:{numItems:t,errorRate:1e-4,numBits:t,numHashes:null,bitArray:[]},"/":[s,"static/chunks/pages/index-20fac084227e433f.js"],"/404":[s,"static/chunks/pages/404-88ca1a114c255c82.js"],"/_error":["static/chunks/pages/_error-41608b100cc61246.js"],"/access-control":[s,c,"static/chunks/pages/access-control-02dfbb4c16554211.js"],"/dashboard":[s,r,"static/chunks/335-efb20d23e9c8fbdc.js","static/chunks/pages/dashboard-79264065de788f0d.js"],"/detection":[s,c,"static/chunks/pages/detection-58f841797f6fb8cf.js"],"/statistics":[s,r,"static/chunks/pages/statistics-2ac73b87bd720929.js"],sortedPages:["/","/404","/_app","/_error","/access-control","/dashboard","/detection","/statistics"]}}("static/chunks/182-f7d7e0bcbc4935b2.js",0,1e-4,null,"static/chunks/597-536a1ec6d7dc1ed9.js","static/chunks/620-cfbe65d7a4660b89.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
|
||||
@ -1 +0,0 @@
|
||||
self.__SSG_MANIFEST=new Set,self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB();
|
||||
@ -1,21 +0,0 @@
|
||||
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1" data-next-head=""/><title data-next-head="">NetGuardia</title><meta name="description" content="NetGuardia" data-next-head=""/><link rel="icon" href="/favicon.ico" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta property="og:title" content="NetGuardia" data-next-head=""/><meta property="og:description" content="NetGuardia" data-next-head=""/><meta property="og:url" content="http://140.130.34.65:59182" data-next-head=""/><meta property="og:image" content="http://140.130.34.65:59182/logo.png" data-next-head=""/><meta property="og:image:width" content="200" data-next-head=""/><meta property="og:image:height" content="200" data-next-head=""/><meta property="og:image:alt" content="NetGuardia" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="NetGuardia" data-next-head=""/><meta name="twitter:description" content="NetGuardia" data-next-head=""/><meta name="twitter:image" content="http://140.130.34.65:59182/logo.png" data-next-head=""/><link rel="preload" href="/_next/static/css/d0ec348c2f7ab2b9.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d0ec348c2f7ab2b9.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8cac0b4b405cede1.js" defer=""></script><script src="/_next/static/chunks/framework-8241368a3aa58199.js" defer=""></script><script src="/_next/static/chunks/main-8b597568282ddf7d.js" defer=""></script><script src="/_next/static/chunks/pages/_app-3847060648a79052.js" defer=""></script><script src="/_next/static/chunks/182-f7d7e0bcbc4935b2.js" defer=""></script><script src="/_next/static/chunks/620-cfbe65d7a4660b89.js" defer=""></script><script src="/_next/static/chunks/335-efb20d23e9c8fbdc.js" defer=""></script><script src="/_next/static/chunks/pages/dashboard-79264065de788f0d.js" defer=""></script><script src="/_next/static/wASj1qj7ED75Mpwihahbt/_buildManifest.js" defer=""></script><script src="/_next/static/wASj1qj7ED75Mpwihahbt/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="flex min-h-screen bg-gray-100"><aside class="fixed top-0 left-0 h-screen bg-gradient-to-br from-slate-800 to-slate-700 text-white flex flex-col shadow-lg z-50 overflow-hidden" style="width:240px"><div class="flex items-center justify-between p-4 border-b border-white/10 min-h-[70px]"><a class="no-underline text-inherit" href="/"><h1 class="text-2xl font-bold text-blue-400 m-0 whitespace-nowrap" style="opacity:0">NetGuardia</h1></a><button class="bg-transparent border-none text-white cursor-pointer p-2 rounded-md flex items-center justify-center w-10 h-10 hover:bg-white/10 transition-colors duration-200"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div><nav class="flex-1 py-4 flex flex-col gap-2"><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="house" class="svg-inline--fa fa-house text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c0 2.7-.2 5.4-.5 8.1l0 16.2c0 22.1-17.9 40-40 40l-16 0c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1L416 512l-24 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Home</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
bg-blue-600 text-white shadow-lg shadow-blue-600/30
|
||||
" href="/dashboard"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Dashboard</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/statistics"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="chart-bar" class="svg-inline--fa fa-chart-bar text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 64l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 96l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Statistics</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/access-control"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="shield-halved" class="svg-inline--fa fa-shield-halved text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8l0 378.1C394 378 431.1 230.1 432 141.4L256 66.8s0 0 0 0z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Access Control</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/detection"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="robot" class="svg-inline--fa fa-robot text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 0c17.7 0 32 14.3 32 32l0 64 120 0c39.8 0 72 32.2 72 72l0 272c0 39.8-32.2 72-72 72l-304 0c-39.8 0-72-32.2-72-72l0-272c0-39.8 32.2-72 72-72l120 0 0-64c0-17.7 14.3-32 32-32zM208 384c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zM264 256a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm152 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM48 224l16 0 0 192-16 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-16 0 0-192 16 0z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Detection</span></a></nav></aside><div class="flex-1 flex flex-col transition-all duration-300 ml-60"><section class="flex-1 p-8"><div class="max-w-full mx-auto"><div class="flex items-center justify-center w-full h-full min-h-[calc(100vh-4rem)]"><div class="flex flex-col items-center space-y-4"><div class="flex justify-center items-center"><div class="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600"></div></div></div></div></div></section></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/dashboard","query":{},"buildId":"wASj1qj7ED75Mpwihahbt","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
||||
@ -1,21 +0,0 @@
|
||||
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1" data-next-head=""/><title data-next-head="">NetGuardia</title><meta name="description" content="NetGuardia" data-next-head=""/><link rel="icon" href="/favicon.ico" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta property="og:title" content="NetGuardia" data-next-head=""/><meta property="og:description" content="NetGuardia" data-next-head=""/><meta property="og:url" content="http://140.130.34.65:59182" data-next-head=""/><meta property="og:image" content="http://140.130.34.65:59182/logo.png" data-next-head=""/><meta property="og:image:width" content="200" data-next-head=""/><meta property="og:image:height" content="200" data-next-head=""/><meta property="og:image:alt" content="NetGuardia" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="NetGuardia" data-next-head=""/><meta name="twitter:description" content="NetGuardia" data-next-head=""/><meta name="twitter:image" content="http://140.130.34.65:59182/logo.png" data-next-head=""/><link rel="preload" href="/_next/static/css/d0ec348c2f7ab2b9.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d0ec348c2f7ab2b9.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8cac0b4b405cede1.js" defer=""></script><script src="/_next/static/chunks/framework-8241368a3aa58199.js" defer=""></script><script src="/_next/static/chunks/main-8b597568282ddf7d.js" defer=""></script><script src="/_next/static/chunks/pages/_app-3847060648a79052.js" defer=""></script><script src="/_next/static/chunks/182-f7d7e0bcbc4935b2.js" defer=""></script><script src="/_next/static/chunks/597-536a1ec6d7dc1ed9.js" defer=""></script><script src="/_next/static/chunks/pages/detection-58f841797f6fb8cf.js" defer=""></script><script src="/_next/static/wASj1qj7ED75Mpwihahbt/_buildManifest.js" defer=""></script><script src="/_next/static/wASj1qj7ED75Mpwihahbt/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="flex min-h-screen bg-gray-100"><aside class="fixed top-0 left-0 h-screen bg-gradient-to-br from-slate-800 to-slate-700 text-white flex flex-col shadow-lg z-50 overflow-hidden" style="width:240px"><div class="flex items-center justify-between p-4 border-b border-white/10 min-h-[70px]"><a class="no-underline text-inherit" href="/"><h1 class="text-2xl font-bold text-blue-400 m-0 whitespace-nowrap" style="opacity:0">NetGuardia</h1></a><button class="bg-transparent border-none text-white cursor-pointer p-2 rounded-md flex items-center justify-center w-10 h-10 hover:bg-white/10 transition-colors duration-200"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div><nav class="flex-1 py-4 flex flex-col gap-2"><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="house" class="svg-inline--fa fa-house text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c0 2.7-.2 5.4-.5 8.1l0 16.2c0 22.1-17.9 40-40 40l-16 0c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1L416 512l-24 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Home</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/dashboard"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Dashboard</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/statistics"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="chart-bar" class="svg-inline--fa fa-chart-bar text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 64l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 96l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Statistics</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/access-control"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="shield-halved" class="svg-inline--fa fa-shield-halved text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8l0 378.1C394 378 431.1 230.1 432 141.4L256 66.8s0 0 0 0z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Access Control</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
bg-blue-600 text-white shadow-lg shadow-blue-600/30
|
||||
" href="/detection"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="robot" class="svg-inline--fa fa-robot text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 0c17.7 0 32 14.3 32 32l0 64 120 0c39.8 0 72 32.2 72 72l0 272c0 39.8-32.2 72-72 72l-304 0c-39.8 0-72-32.2-72-72l0-272c0-39.8 32.2-72 72-72l120 0 0-64c0-17.7 14.3-32 32-32zM208 384c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zM264 256a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm152 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM48 224l16 0 0 192-16 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-16 0 0-192 16 0z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Detection</span></a></nav></aside><div class="flex-1 flex flex-col transition-all duration-300 ml-60"><section class="flex-1 p-8"><div class="max-w-full mx-auto"><div class="flex items-center justify-center w-full h-full min-h-[calc(100vh-4rem)]"><div class="flex flex-col items-center space-y-4"><div class="flex justify-center items-center"><div class="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600"></div></div></div></div></div></section></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/detection","query":{},"buildId":"wASj1qj7ED75Mpwihahbt","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
||||
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 58 KiB |
@ -1,21 +0,0 @@
|
||||
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1" data-next-head=""/><title data-next-head="">NetGuardia</title><meta name="description" content="NetGuardia" data-next-head=""/><link rel="icon" href="/favicon.ico" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta property="og:title" content="NetGuardia" data-next-head=""/><meta property="og:description" content="NetGuardia" data-next-head=""/><meta property="og:url" content="http://140.130.34.65:59182" data-next-head=""/><meta property="og:image" content="http://140.130.34.65:59182/logo.png" data-next-head=""/><meta property="og:image:width" content="200" data-next-head=""/><meta property="og:image:height" content="200" data-next-head=""/><meta property="og:image:alt" content="NetGuardia" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="NetGuardia" data-next-head=""/><meta name="twitter:description" content="NetGuardia" data-next-head=""/><meta name="twitter:image" content="http://140.130.34.65:59182/logo.png" data-next-head=""/><link rel="preload" href="/_next/static/css/d0ec348c2f7ab2b9.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d0ec348c2f7ab2b9.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8cac0b4b405cede1.js" defer=""></script><script src="/_next/static/chunks/framework-8241368a3aa58199.js" defer=""></script><script src="/_next/static/chunks/main-8b597568282ddf7d.js" defer=""></script><script src="/_next/static/chunks/pages/_app-3847060648a79052.js" defer=""></script><script src="/_next/static/chunks/182-f7d7e0bcbc4935b2.js" defer=""></script><script src="/_next/static/chunks/pages/index-20fac084227e433f.js" defer=""></script><script src="/_next/static/wASj1qj7ED75Mpwihahbt/_buildManifest.js" defer=""></script><script src="/_next/static/wASj1qj7ED75Mpwihahbt/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="flex min-h-screen bg-gray-100"><aside class="fixed top-0 left-0 h-screen bg-gradient-to-br from-slate-800 to-slate-700 text-white flex flex-col shadow-lg z-50 overflow-hidden" style="width:240px"><div class="flex items-center justify-between p-4 border-b border-white/10 min-h-[70px]"><a class="no-underline text-inherit" href="/"><h1 class="text-2xl font-bold text-blue-400 m-0 whitespace-nowrap" style="opacity:0">NetGuardia</h1></a><button class="bg-transparent border-none text-white cursor-pointer p-2 rounded-md flex items-center justify-center w-10 h-10 hover:bg-white/10 transition-colors duration-200"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div><nav class="flex-1 py-4 flex flex-col gap-2"><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
bg-blue-600 text-white shadow-lg shadow-blue-600/30
|
||||
" href="/"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="house" class="svg-inline--fa fa-house text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c0 2.7-.2 5.4-.5 8.1l0 16.2c0 22.1-17.9 40-40 40l-16 0c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1L416 512l-24 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Home</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/dashboard"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Dashboard</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/statistics"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="chart-bar" class="svg-inline--fa fa-chart-bar text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 64l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 96l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Statistics</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/access-control"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="shield-halved" class="svg-inline--fa fa-shield-halved text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8l0 378.1C394 378 431.1 230.1 432 141.4L256 66.8s0 0 0 0z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Access Control</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/detection"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="robot" class="svg-inline--fa fa-robot text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 0c17.7 0 32 14.3 32 32l0 64 120 0c39.8 0 72 32.2 72 72l0 272c0 39.8-32.2 72-72 72l-304 0c-39.8 0-72-32.2-72-72l0-272c0-39.8 32.2-72 72-72l120 0 0-64c0-17.7 14.3-32 32-32zM208 384c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zM264 256a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm152 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM48 224l16 0 0 192-16 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-16 0 0-192 16 0z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Detection</span></a></nav></aside><div class="flex-1 flex flex-col transition-all duration-300 ml-60"><section class="flex-1 p-8"><div class="max-w-full mx-auto"><div class="flex items-center justify-center w-full h-full min-h-[calc(100vh-4rem)]"><div class="flex flex-col items-center space-y-4"><div class="flex justify-center items-center"><div class="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600"></div></div></div></div></div></section></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"wASj1qj7ED75Mpwihahbt","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
||||
@ -1,21 +0,0 @@
|
||||
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1" data-next-head=""/><title data-next-head="">NetGuardia</title><meta name="description" content="NetGuardia" data-next-head=""/><link rel="icon" href="/favicon.ico" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta property="og:title" content="NetGuardia" data-next-head=""/><meta property="og:description" content="NetGuardia" data-next-head=""/><meta property="og:url" content="http://140.130.34.65:59182" data-next-head=""/><meta property="og:image" content="http://140.130.34.65:59182/logo.png" data-next-head=""/><meta property="og:image:width" content="200" data-next-head=""/><meta property="og:image:height" content="200" data-next-head=""/><meta property="og:image:alt" content="NetGuardia" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="NetGuardia" data-next-head=""/><meta name="twitter:description" content="NetGuardia" data-next-head=""/><meta name="twitter:image" content="http://140.130.34.65:59182/logo.png" data-next-head=""/><link rel="preload" href="/_next/static/css/d0ec348c2f7ab2b9.css" as="style"/><link rel="stylesheet" href="/_next/static/css/d0ec348c2f7ab2b9.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-8cac0b4b405cede1.js" defer=""></script><script src="/_next/static/chunks/framework-8241368a3aa58199.js" defer=""></script><script src="/_next/static/chunks/main-8b597568282ddf7d.js" defer=""></script><script src="/_next/static/chunks/pages/_app-3847060648a79052.js" defer=""></script><script src="/_next/static/chunks/182-f7d7e0bcbc4935b2.js" defer=""></script><script src="/_next/static/chunks/620-cfbe65d7a4660b89.js" defer=""></script><script src="/_next/static/chunks/pages/statistics-2ac73b87bd720929.js" defer=""></script><script src="/_next/static/wASj1qj7ED75Mpwihahbt/_buildManifest.js" defer=""></script><script src="/_next/static/wASj1qj7ED75Mpwihahbt/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div class="flex min-h-screen bg-gray-100"><aside class="fixed top-0 left-0 h-screen bg-gradient-to-br from-slate-800 to-slate-700 text-white flex flex-col shadow-lg z-50 overflow-hidden" style="width:240px"><div class="flex items-center justify-between p-4 border-b border-white/10 min-h-[70px]"><a class="no-underline text-inherit" href="/"><h1 class="text-2xl font-bold text-blue-400 m-0 whitespace-nowrap" style="opacity:0">NetGuardia</h1></a><button class="bg-transparent border-none text-white cursor-pointer p-2 rounded-md flex items-center justify-center w-10 h-10 hover:bg-white/10 transition-colors duration-200"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></svg></button></div><nav class="flex-1 py-4 flex flex-col gap-2"><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="house" class="svg-inline--fa fa-house text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c0 2.7-.2 5.4-.5 8.1l0 16.2c0 22.1-17.9 40-40 40l-16 0c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1L416 512l-24 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Home</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/dashboard"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gauge-high" class="svg-inline--fa fa-gauge-high text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0A256 256 0 1 1 0 256zM288 96a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM256 416c35.3 0 64-28.7 64-64c0-17.4-6.9-33.1-18.1-44.6L366 161.7c5.3-12.1-.2-26.3-12.3-31.6s-26.3 .2-31.6 12.3L257.9 288c-.6 0-1.3 0-1.9 0c-35.3 0-64 28.7-64 64s28.7 64 64 64zM176 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM96 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm352-32a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Dashboard</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
bg-blue-600 text-white shadow-lg shadow-blue-600/30
|
||||
" href="/statistics"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="chart-bar" class="svg-inline--fa fa-chart-bar text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 32c17.7 0 32 14.3 32 32l0 336c0 8.8 7.2 16 16 16l400 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L80 480c-44.2 0-80-35.8-80-80L0 64C0 46.3 14.3 32 32 32zm96 96c0-17.7 14.3-32 32-32l192 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-192 0c-17.7 0-32-14.3-32-32zm32 64l128 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 96l256 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-256 0c-17.7 0-32-14.3-32-32s14.3-32 32-32z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Statistics</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/access-control"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="shield-halved" class="svg-inline--fa fa-shield-halved text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0c4.6 0 9.2 1 13.4 2.9L457.7 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-16.7 8-36.1 8-52.8 0C57.3 420.7 16.5 239.2 16 140c-.1-26.2 16.3-47.9 38.3-57.2L242.7 2.9C246.8 1 251.4 0 256 0zm0 66.8l0 378.1C394 378 431.1 230.1 432 141.4L256 66.8s0 0 0 0z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Access Control</span></a><a class="
|
||||
flex items-center no-underline transition-all duration-200 relative mx-2 rounded-lg
|
||||
px-4 py-3
|
||||
text-slate-300 hover:bg-white/10 hover:text-white
|
||||
" href="/detection"><div class="flex items-center justify-center flex-shrink-0 w-6 h-6"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="robot" class="svg-inline--fa fa-robot text-lg" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M320 0c17.7 0 32 14.3 32 32l0 64 120 0c39.8 0 72 32.2 72 72l0 272c0 39.8-32.2 72-72 72l-304 0c-39.8 0-72-32.2-72-72l0-272c0-39.8 32.2-72 72-72l120 0 0-64c0-17.7 14.3-32 32-32zM208 384c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zm96 0c-8.8 0-16 7.2-16 16s7.2 16 16 16l32 0c8.8 0 16-7.2 16-16s-7.2-16-16-16l-32 0zM264 256a40 40 0 1 0 -80 0 40 40 0 1 0 80 0zm152 40a40 40 0 1 0 0-80 40 40 0 1 0 0 80zM48 224l16 0 0 192-16 0c-26.5 0-48-21.5-48-48l0-96c0-26.5 21.5-48 48-48zm544 0c26.5 0 48 21.5 48 48l0 96c0 26.5-21.5 48-48 48l-16 0 0-192 16 0z"></path></svg></div><span class="font-medium whitespace-nowrap overflow-hidden ml-3" style="opacity:1;transform:none">Detection</span></a></nav></aside><div class="flex-1 flex flex-col transition-all duration-300 ml-60"><section class="flex-1 p-8"><div class="max-w-full mx-auto"><div class="flex items-center justify-center w-full h-full min-h-[calc(100vh-4rem)]"><div class="flex flex-col items-center space-y-4"><div class="flex justify-center items-center"><div class="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600"></div></div></div></div></div></section></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/statistics","query":{},"buildId":"wASj1qj7ED75Mpwihahbt","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
||||