Next.js+React web interface for controlling HAProxy clusters (groups of servers), in conjunction with with https://gitgud.io/fatchan/haproxy-protection.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
5.9 KiB
162 lines
5.9 KiB
import Image from 'next/image';
|
|
import Link from 'next/link';
|
|
import { withRouter } from 'next/router';
|
|
|
|
export default withRouter(function MenuLinks({ router }) {
|
|
return (<>
|
|
<Link href="/">
|
|
<a className="d-flex align-items-center mb-3 mb-md-0 text-body text-decoration-none">
|
|
<Image src="/favicon.ico" width="32" height="32" alt=" " />
|
|
<span className="mx-2 fs-4 text-decoration-none">BasedFlare</span>
|
|
</a>
|
|
</Link>
|
|
<hr />
|
|
<ul className="nav nav-pills flex-column mb-auto">
|
|
{/*<li className="nav-item">
|
|
<Link href="/">
|
|
<a className={router.pathname === "/" ? "nav-link active" : "nav-link"} aria-current="page">
|
|
<i className="bi-house-door pe-none me-2" width="16" height="16" />
|
|
Home
|
|
</a>
|
|
</Link>
|
|
</li>*/}
|
|
<li className="nav-item">
|
|
<Link href="/account">
|
|
<a className={router.pathname === "/account" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-person-square pe-none me-2" width="16" height="16" />
|
|
Account
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link href="/domains">
|
|
<a className={router.pathname === "/domains" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-card-list pe-none me-2" width="16" height="16" />
|
|
Domains
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link href="/clusters">
|
|
<a className={router.pathname === "/clusters" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-hdd-rack pe-none me-2" width="16" height="16" />
|
|
Clusters
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
{/*process.env.NEXT_PUBLIC_CUSTOM_BACKENDS_ENABLED && <li className="nav-item">
|
|
<Link href="/map/backends">
|
|
<a className={router.pathname === "/map/[name]" && router.query.name === "backends" ? "nav-link active" : "nav-link"} aria-current="page">
|
|
<i className="bi-hdd-network pe-none me-2" width="16" height="16" />
|
|
Internal Backends
|
|
</a>
|
|
</Link>
|
|
</li>*/}
|
|
<li className="nav-item">
|
|
<Link href="/map/hosts">
|
|
<a className={router.pathname === "/map/[name]" && router.query.name === "hosts" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-hdd-network pe-none me-2" width="16" height="16" />
|
|
Backends
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link href="/certs">
|
|
<a className={router.pathname === "/certs" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-file-earmark-lock pe-none me-2" width="16" height="16" />
|
|
HTTPS Certificates
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link href="/map/ddos">
|
|
<a className={router.pathname === "/map/[name]" && router.query.name === "ddos" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-shield-check pe-none me-2" width="16" height="16" />
|
|
Protection Rules
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link href="/map/rewrite">
|
|
<a className={router.pathname === "/map/[name]" && router.query.name === "rewrite" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-signpost pe-none me-2" width="16" height="16" />
|
|
Redirects
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link href="/map/blocked">
|
|
<a className={router.pathname === "/map/[name]" && router.query.name === "blocked" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-person-slash pe-none me-2" width="16" height="16" />
|
|
IP Blacklist
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link href="/map/whitelist">
|
|
<a className={router.pathname === "/map/[name]" && router.query.name === "whitelist" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-person-check pe-none me-2" width="16" height="16" />
|
|
IP Whitelist
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link href="/map/maintenance">
|
|
<a className={router.pathname === "/map/[name]" && router.query.name === "maintenance" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-info-square pe-none me-2" width="16" height="16" />
|
|
Maintenance Mode
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link href="/stats">
|
|
<a className={router.pathname === "/stats" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-table pe-none me-2" width="16" height="16" />
|
|
Statistics
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
</ul>
|
|
<hr />
|
|
<ul className="nav nav-pills flex-column">
|
|
<li className="nav-item user-select-none">
|
|
<Link href="/onboarding">
|
|
<a className={router.pathname === "/onboarding" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-rocket-takeoff pe-none me-2" width="16" height="16" />
|
|
Onboarding
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
</ul>
|
|
{/*<hr />
|
|
<ul className="nav nav-pills flex-column">
|
|
<li className="nav-item">
|
|
<Link href="/login">
|
|
<a className={router.pathname === "/login" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-door-closed pe-none me-2" width="16" height="16" />
|
|
Login
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
<li className="nav-item">
|
|
<Link href="/register">
|
|
<a className={router.pathname === "/register" ? "nav-link active" : "nav-link text-body"} aria-current="page">
|
|
<i className="bi-person-plus pe-none me-2" width="16" height="16" />
|
|
Register
|
|
</a>
|
|
</Link>
|
|
</li>
|
|
</ul>*/}
|
|
<hr />
|
|
<ul className="nav nav-pills flex-column">
|
|
<li className="nav-item">
|
|
<form action="/forms/logout" method="POST">
|
|
<button className="nav-link text-body" type="submit">
|
|
<i className="bi-door-open pe-none me-2" width="16" height="16" />
|
|
Logout
|
|
</button>
|
|
</form>
|
|
</li>
|
|
</ul>
|
|
</>);
|
|
})
|
|
|