Compare commits

..
124 changed files with 3395 additions and 5373 deletions

No files matched your search

+6 -2
View File
@@ -41,14 +41,18 @@ export default function AccessControlPage() {
<h1 ref={headingRef}>Access Control Policies</h1>
<Paragraph>
Create rules to manage access in your network and define what peers
can connect.{" "}
can connect.
</Paragraph>
<Paragraph>
Learn more about
<InlineLink
href={"https://docs.netbird.io/how-to/manage-network-access"}
target={"_blank"}
>
Learn more
Access Controls
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
</div>
+6 -2
View File
@@ -45,14 +45,18 @@ export default function NameServers() {
</Breadcrumbs>
<h1 ref={headingRef}>Nameservers</h1>
<Paragraph>
Add nameservers for domain name resolution in your NetBird network.{" "}
Add nameservers for domain name resolution in your NetBird network.
</Paragraph>
<Paragraph>
Learn more about
<InlineLink
href={"https://docs.netbird.io/how-to/manage-dns-in-your-network"}
target={"_blank"}
>
Learn more
DNS
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
</div>
+4 -2
View File
@@ -52,15 +52,17 @@ export default function NameServerSettings() {
/>
</Breadcrumbs>
<h1>DNS Settings</h1>
<Paragraph>{"Manage your account's DNS settings."}</Paragraph>
<Paragraph>
{"Manage your account's DNS settings."}{" "}
Learn more about
<InlineLink
href={"https://docs.netbird.io/how-to/manage-dns-in-your-network"}
target={"_blank"}
>
Learn more
DNS
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
<RestrictedAccess page={"DNS Settings"} hasAccess={permission.dns.read}>
{!isLoading && initialDNSGroups !== undefined ? (
+6 -2
View File
@@ -42,11 +42,15 @@ export default function DNSZonePage() {
</Breadcrumbs>
<h1 ref={headingRef}>Zones</h1>
<Paragraph>
Manage DNS zones to control domain name resolution for your network.{" "}
Manage DNS zones to control domain name resolution for your network.
</Paragraph>
<Paragraph>
Learn more about
<InlineLink href={DNS_ZONE_DOCS_LINK} target={"_blank"}>
Learn more
DNS Zones
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
</div>
+4 -3
View File
@@ -39,16 +39,17 @@ export default function Activity() {
/>
</Breadcrumbs>
<h1 ref={headingRef}>Audit Events</h1>
<Paragraph>Here you can see all the audit activity events.</Paragraph>
<Paragraph>
Audit configuration changes, access policy updates, and peer
registration and login events across your network.{" "}
Learn more about{" "}
<InlineLink
href={"https://docs.netbird.io/how-to/audit-events-logging"}
target={"_blank"}
>
Learn more
Audit Events
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
</div>
<RestrictedAccess page={"Activity"} hasAccess={permission.events.read}>
+80 -2
View File
@@ -1,5 +1,83 @@
import { redirect } from "next/navigation";
"use client";
import Breadcrumbs from "@components/Breadcrumbs";
import InlineLink from "@components/InlineLink";
import Paragraph from "@components/Paragraph";
import { RestrictedAccess } from "@components/ui/RestrictedAccess";
import dayjs from "dayjs";
import { ExternalLinkIcon } from "lucide-react";
import ReverseProxyIcon from "@/assets/icons/ReverseProxyIcon";
import React, { useMemo } from "react";
import ActivityIcon from "@/assets/icons/ActivityIcon";
import PeersProvider from "@/contexts/PeersProvider";
import { usePermissions } from "@/contexts/PermissionsProvider";
import ServerPaginationProvider from "@/contexts/ServerPaginationProvider";
import PageContainer from "@/layouts/PageContainer";
import ReverseProxyEventsTable from "@/modules/reverse-proxy/events/ReverseProxyEventsTable";
import { usePortalElement } from "@hooks/usePortalElement";
import { REVERSE_PROXY_EVENTS_DOCS_LINK } from "@/interfaces/ReverseProxy";
export default function ProxyEventsPage() {
redirect("/reverse-proxy/logs");
const { permission } = usePermissions();
const { ref: headingRef, portalTarget } =
usePortalElement<HTMLHeadingElement>();
const defaultFilters = useMemo(
() => ({
start_date: dayjs().subtract(7, "day").startOf("day").toISOString(),
end_date: dayjs().endOf("day").toISOString(),
sort_by: "timestamp",
sort_order: "desc",
}),
[],
);
return (
<PageContainer>
<div className="p-default py-6">
<Breadcrumbs>
<Breadcrumbs.Item
label="Activity"
disabled
icon={<ActivityIcon size={13} />}
/>
<Breadcrumbs.Item
href="/events/proxy"
label="Proxy Events"
icon={<ReverseProxyIcon size={15} />}
/>
</Breadcrumbs>
<h1 ref={headingRef}>Proxy Events</h1>
<Paragraph>
View access logs for your reverse proxy services, including allowed
and denied requests.
</Paragraph>
<Paragraph>
Learn more about{" "}
<InlineLink href={REVERSE_PROXY_EVENTS_DOCS_LINK} target="_blank">
Proxy Events <ExternalLinkIcon size={12} />
</InlineLink>{" "}
in our documentation.
</Paragraph>
</div>
<RestrictedAccess
page="Proxy Events"
hasAccess={permission?.services?.read}
>
<ServerPaginationProvider
url="/events/proxy"
defaultPageSize={10}
defaultFilters={defaultFilters}
>
<PeersProvider>
<ReverseProxyEventsTable headingTarget={portalTarget} />
</PeersProvider>
</ServerPaginationProvider>
</RestrictedAccess>
</PageContainer>
);
}
+7 -2
View File
@@ -31,14 +31,19 @@ export default function GroupsPage() {
</Breadcrumbs>
<h1 ref={headingRef}>Groups</h1>
<Paragraph>
Organize peers, users and resources into groups to manage access.{" "}
Here is the overview of the groups of your organization. You can
delete the unused ones.
</Paragraph>
<Paragraph>
Learn more about{" "}
<InlineLink
href={"https://docs.netbird.io/how-to/manage-network-access"}
target={"_blank"}
>
Learn more
Groups
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
</div>
<RestrictedAccess hasAccess={permission.groups.read} page={"Groups"}>
+10 -9
View File
@@ -37,27 +37,28 @@ export default function NetworkRoutes() {
<div className={"p-default py-6"}>
<Breadcrumbs>
<Breadcrumbs.Item
label={"Network Routing"}
href={"/network-routes"}
label={"Network Routes"}
icon={<NetworkRoutesIcon size={13} />}
/>
<Breadcrumbs.Item href={"/network-routes"} label={"Routes"} />
</Breadcrumbs>
<h1 ref={headingRef}>Routes</h1>
<h1 ref={headingRef}>Network Routes</h1>
<Paragraph>
Access other networks like LANs and VPCs without installing
NetBird on every resource.{" "}
Network routes allow you to access other networks like LANs and
VPCs without installing NetBird on every resource.
</Paragraph>
<Paragraph>
Learn more about
<InlineLink
href={
"https://docs.netbird.io/how-to/routing-traffic-to-private-networks"
}
target={"_blank"}
aria-label={
"Learn more about routing traffic to private networks"
}
>
Learn more
Network Routes
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
<Callout className={"max-w-xl mt-5"} variant={"warning"}>
+9 -5
View File
@@ -26,22 +26,26 @@ export default function Networks() {
<div className={"p-default py-6"}>
<Breadcrumbs>
<Breadcrumbs.Item
label={"Network Routing"}
href={"/networks"}
label={"Networks"}
icon={<NetworkRoutesIcon size={13} />}
/>
<Breadcrumbs.Item href={"/networks"} label={"Networks"} />
</Breadcrumbs>
<h1 ref={headingRef}>Networks</h1>
<Paragraph>
Access internal resources in LANs and VPCs without installing NetBird
on every machine.{" "}
Networks allow you to access internal resources in LANs and VPCs
without installing NetBird on every machine.
</Paragraph>
<Paragraph>
Learn more about
<InlineLink
href={"https://docs.netbird.io/how-to/networks"}
target={"_blank"}
>
Learn more
Networks
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
</div>
+3 -13
View File
@@ -61,7 +61,6 @@ import RoutesProvider from "@/contexts/RoutesProvider";
import { useHasChanges } from "@/hooks/useHasChanges";
import type { Group } from "@/interfaces/Group";
import type { Peer } from "@/interfaces/Peer";
import type { User } from "@/interfaces/User";
import PageContainer from "@/layouts/PageContainer";
import useGroupHelper from "@/modules/groups/useGroupHelper";
import { AccessiblePeersSection } from "@/modules/peer/AccessiblePeersSection";
@@ -119,17 +118,8 @@ export default function PeerPage() {
);
}
// Route the user back to the list view that matches the peer's kind
// (a real user owner → /peers/users, otherwise /peers/servers). Used
// for the breadcrumb and the Cancel back-button so they don't bounce
// through the legacy /peers redirect.
function peerListPath(user: User | undefined): string {
const hasRealUser = !!user && !user.is_service_user;
return hasRealUser ? "/peers/users" : "/peers/servers";
}
function PeerOverview() {
const { peer, user } = usePeer();
const { peer } = usePeer();
return (
<PageContainer>
@@ -138,7 +128,7 @@ function PeerOverview() {
<div className={"p-default py-6 pb-0"}>
<Breadcrumbs>
<Breadcrumbs.Item
href={peerListPath(user)}
href={"/peers"}
label={"Peers"}
icon={<PeerIcon size={13} />}
/>
@@ -307,7 +297,7 @@ const PeerHeader = () => {
<Button
variant={"default"}
className={"w-full"}
onClick={() => router.push(peerListPath(user))}
onClick={() => router.push("/peers")}
>
Cancel
</Button>
+2 -10
View File
@@ -68,16 +68,8 @@ function ServersView() {
<h1 ref={headingRef}>Servers</h1>
<Paragraph>
Servers, VMs, autonomous agents and other unattended machines with no
user behind them, typically enrolled with a setup key.{" "}
<InlineLink
href={
"https://docs.netbird.io/how-to/register-machines-using-setup-keys"
}
target={"_blank"}
>
Learn more
<ExternalLinkIcon size={12} />
</InlineLink>
user behind them, typically enrolled with a{" "}
<InlineLink href={"/settings?tab=setup-keys"}>setup key.</InlineLink>
</Paragraph>
</div>
<Suspense fallback={<SkeletonTable />}>
+6 -2
View File
@@ -46,14 +46,18 @@ export default function PostureChecksPage() {
</Breadcrumbs>
<h1 ref={headingRef}>Posture Checks</h1>
<Paragraph>
Use posture checks to further restrict access in your network.{" "}
Use posture checks to further restrict access in your network.
</Paragraph>
<Paragraph>
Learn more about
<InlineLink
href={"https://docs.netbird.io/how-to/manage-posture-checks"}
target={"_blank"}
>
Learn more
Posture Checks
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
</div>
@@ -42,11 +42,15 @@ export default function ReverseProxyClustersPage() {
<Paragraph>
Proxy clusters that route inbound traffic to your services. Shared
clusters are deployed at the server level; account clusters are
self-hosted on your own infrastructure.{" "}
self-hosted on your own infrastructure.
</Paragraph>
<Paragraph>
Learn more about
<InlineLink href={REVERSE_PROXY_CLUSTERS_DOCS_LINK} target={"_blank"}>
Learn more
Clusters
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
</div>
<RestrictedAccess
@@ -41,14 +41,18 @@ export default function ReverseProxyCustomDomainsPage() {
</Breadcrumbs>
<h1 ref={headingRef}>Domains</h1>
<Paragraph>
Add and manage custom domains for your reverse proxy services.{" "}
Add and manage custom domains for your reverse proxy services.
</Paragraph>
<Paragraph>
Learn more about
<InlineLink
href={REVERSE_PROXY_CUSTOM_DOMAINS_DOCS_LINK}
target={"_blank"}
>
Learn more
Custom Domains
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
</div>
<RestrictedAccess
@@ -1,8 +0,0 @@
import { globalMetaTitle } from "@utils/meta";
import type { Metadata } from "next";
import BlankLayout from "@/layouts/BlankLayout";
export const metadata: Metadata = {
title: `Access Logs - Reverse Proxy - ${globalMetaTitle}`,
};
export default BlankLayout;
@@ -1,77 +0,0 @@
"use client";
import Breadcrumbs from "@components/Breadcrumbs";
import InlineLink from "@components/InlineLink";
import Paragraph from "@components/Paragraph";
import { RestrictedAccess } from "@components/ui/RestrictedAccess";
import dayjs from "dayjs";
import { ExternalLinkIcon } from "lucide-react";
import ReverseProxyIcon from "@/assets/icons/ReverseProxyIcon";
import React, { useMemo } from "react";
import PeersProvider from "@/contexts/PeersProvider";
import { usePermissions } from "@/contexts/PermissionsProvider";
import ServerPaginationProvider from "@/contexts/ServerPaginationProvider";
import PageContainer from "@/layouts/PageContainer";
import ReverseProxyEventsTable from "@/modules/reverse-proxy/events/ReverseProxyEventsTable";
import { usePortalElement } from "@hooks/usePortalElement";
import { REVERSE_PROXY_EVENTS_DOCS_LINK } from "@/interfaces/ReverseProxy";
export default function ProxyLogsPage() {
const { permission } = usePermissions();
const { ref: headingRef, portalTarget } =
usePortalElement<HTMLHeadingElement>();
const defaultFilters = useMemo(
() => ({
start_date: dayjs().subtract(7, "day").startOf("day").toISOString(),
end_date: dayjs().endOf("day").toISOString(),
sort_by: "timestamp",
sort_order: "desc",
}),
[],
);
return (
<PageContainer>
<div className="p-default py-6">
<Breadcrumbs>
<Breadcrumbs.Item
label="Reverse Proxy"
disabled
icon={<ReverseProxyIcon size={15} />}
/>
<Breadcrumbs.Item
href="/reverse-proxy/logs"
label="Access Logs"
icon={<ReverseProxyIcon size={15} />}
/>
</Breadcrumbs>
<h1 ref={headingRef}>Access Logs</h1>
<Paragraph>
View access logs for your reverse proxy services, including allowed
and denied requests.{" "}
<InlineLink href={REVERSE_PROXY_EVENTS_DOCS_LINK} target="_blank">
Learn more <ExternalLinkIcon size={12} />
</InlineLink>
</Paragraph>
</div>
<RestrictedAccess
page="Access Logs"
hasAccess={permission?.services?.read}
>
<ServerPaginationProvider
url="/events/proxy"
defaultPageSize={25}
defaultFilters={defaultFilters}
>
<PeersProvider>
<ReverseProxyEventsTable headingTarget={portalTarget} />
</PeersProvider>
</ServerPaginationProvider>
</RestrictedAccess>
</PageContainer>
);
}
@@ -43,11 +43,15 @@ export default function ReverseProxyServicesPage() {
</Breadcrumbs>
<h1 ref={headingRef}>Services</h1>
<Paragraph>
Expose services securely through NetBird&apos;s reverse proxy.{" "}
Expose services securely through NetBird&apos;s reverse proxy.
</Paragraph>
<Paragraph>
Learn more about
<InlineLink href={REVERSE_PROXY_DOCS_LINK} target={"_blank"}>
Learn more
Services
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
{isNetBirdHosted() ? (
+2 -2
View File
@@ -6,7 +6,6 @@ import {
AlertOctagonIcon,
FingerprintIcon,
FolderGit2Icon,
KeyRound,
LockIcon,
MonitorSmartphoneIcon,
NetworkIcon,
@@ -14,6 +13,7 @@ import {
} from "lucide-react";
import { useSearchParams } from "next/navigation";
import React, { useEffect, useMemo, useState } from "react";
import SetupKeysIcon from "@/assets/icons/SetupKeysIcon";
import { usePermissions } from "@/contexts/PermissionsProvider";
import { useLoggedInUser } from "@/contexts/UsersProvider";
import PageContainer from "@/layouts/PageContainer";
@@ -59,7 +59,7 @@ export default function NetBirdSettings() {
</VerticalTabs.Trigger>
{permission.setup_keys.read && (
<VerticalTabs.Trigger value="setup-keys">
<KeyRound size={14} />
<SetupKeysIcon size={14} />
Setup Keys
</VerticalTabs.Trigger>
)}
@@ -47,14 +47,18 @@ export default function ServiceUsers() {
<h1 ref={headingRef}>Service Users</h1>
<Paragraph>
Use service users to create API tokens and avoid losing automated
access.{" "}
access.
</Paragraph>
<Paragraph>
Learn more about
<InlineLink
href={"https://docs.netbird.io/how-to/access-netbird-public-api"}
target={"_blank"}
>
Learn more
Service Users
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
</div>
<RestrictedAccess
+6 -2
View File
@@ -46,14 +46,18 @@ export default function TeamUsers() {
<h1 ref={headingRef}>Users</h1>
<Paragraph>
Manage users and their permissions. Same-domain email users are added
automatically on first sign-in.{" "}
automatically on first sign-in.
</Paragraph>
<Paragraph>
Learn more about
<InlineLink
href={"https://docs.netbird.io/how-to/add-users-to-your-network"}
target={"_blank"}
>
Learn more
Users
<ExternalLinkIcon size={12} />
</InlineLink>
in our documentation.
</Paragraph>
</div>
<RestrictedAccess page={"Users"} hasAccess={permission.users.read}>
Loaded 20 of 124 files, more files were not shown because too many files have changed in this diff. Show more