diff --git a/backend/internal/stream.js b/backend/internal/stream.js
index bec95b6e..805b6652 100644
--- a/backend/internal/stream.js
+++ b/backend/internal/stream.js
@@ -348,7 +348,7 @@ const internalStream = {
// Add to audit log
return internalAuditLog.add(access, {
action: "disabled",
- object_type: "stream-host",
+ object_type: "stream",
object_id: row.id,
meta: _.omit(row, omissions()),
});
diff --git a/frontend/src/components/Table/Formatter/EventFormatter.tsx b/frontend/src/components/Table/Formatter/EventFormatter.tsx
index 61655ac7..7cd595d3 100644
--- a/frontend/src/components/Table/Formatter/EventFormatter.tsx
+++ b/frontend/src/components/Table/Formatter/EventFormatter.tsx
@@ -1,4 +1,4 @@
-import { IconBoltOff, IconUser } from "@tabler/icons-react";
+import { IconBoltOff, IconDisc, IconUser } from "@tabler/icons-react";
import type { AuditLog } from "src/api/backend";
import { DateTimeFormat, intl } from "src/locale";
@@ -12,6 +12,8 @@ const getEventValue = (event: AuditLog) => {
return event.meta?.name;
case "dead-host":
return event.meta?.domainNames?.join(", ") || "N/A";
+ case "stream":
+ return event.meta?.incomingPort || "N/A";
default:
return `UNKNOWN EVENT TYPE: ${event.objectType}`;
}
@@ -38,6 +40,9 @@ const getIcon = (row: AuditLog) => {
case "dead-host":
ico = ;
break;
+ case "stream":
+ ico = ;
+ break;
}
return ico;
diff --git a/frontend/src/locale/lang/en.json b/frontend/src/locale/lang/en.json
index f6eeab1f..79db31bc 100644
--- a/frontend/src/locale/lang/en.json
+++ b/frontend/src/locale/lang/en.json
@@ -72,11 +72,15 @@
"error.passwords-must-match": "Passwords must match",
"error.required": "This is required",
"event.created-dead-host": "Created 404 Host",
+ "event.created-stream": "Created Stream",
"event.created-user": "Created User",
"event.deleted-dead-host": "Deleted 404 Host",
+ "event.deleted-stream": "Deleted Stream",
"event.deleted-user": "Deleted User",
"event.disabled-dead-host": "Disabled 404 Host",
+ "event.disabled-stream": "Disabled Stream",
"event.enabled-dead-host": "Enabled 404 Host",
+ "event.enabled-stream": "Enabled Stream",
"event.updated-user": "Updated User",
"footer.github-fork": "Fork me on Github",
"hosts.title": "Hosts",
@@ -95,6 +99,9 @@
"notification.host-deleted": "Host has been deleted",
"notification.host-disabled": "Host has been disabled",
"notification.host-enabled": "Host has been enabled",
+ "notification.stream-deleted": "Stream has been deleted",
+ "notification.stream-disabled": "Stream has been disabled",
+ "notification.stream-enabled": "Stream has been enabled",
"notification.success": "Success",
"notification.user-deleted": "User has been deleted",
"notification.user-disabled": "User has been disabled",
@@ -130,6 +137,8 @@
"setup.title": "Welcome!",
"sign-in": "Sign in",
"ssl-certificate": "SSL Certificate",
+ "stream.delete.content": "Are you sure you want to delete this Stream?",
+ "stream.delete.title": "Delete Stream",
"stream.forward-host": "Forward Host",
"stream.forward-port": "Forward Port",
"stream.incoming-port": "Incoming Port",
diff --git a/frontend/src/locale/src/en.json b/frontend/src/locale/src/en.json
index 2376d19c..7c5afff8 100644
--- a/frontend/src/locale/src/en.json
+++ b/frontend/src/locale/src/en.json
@@ -215,21 +215,33 @@
"event.created-dead-host": {
"defaultMessage": "Created 404 Host"
},
+ "event.created-stream": {
+ "defaultMessage": "Created Stream"
+ },
"event.created-user": {
"defaultMessage": "Created User"
},
"event.deleted-dead-host": {
"defaultMessage": "Deleted 404 Host"
},
+ "event.deleted-stream": {
+ "defaultMessage": "Deleted Stream"
+ },
"event.deleted-user": {
"defaultMessage": "Deleted User"
},
"event.disabled-dead-host": {
"defaultMessage": "Disabled 404 Host"
},
+ "event.disabled-stream": {
+ "defaultMessage": "Disabled Stream"
+ },
"event.enabled-dead-host": {
"defaultMessage": "Enabled 404 Host"
},
+ "event.enabled-stream": {
+ "defaultMessage": "Enabled Stream"
+ },
"event.updated-user": {
"defaultMessage": "Updated User"
},
@@ -281,15 +293,24 @@
"notification.host-deleted": {
"defaultMessage": "Host has been deleted"
},
- "notification.user-deleted": {
- "defaultMessage": "User has been deleted"
- },
"notification.host-disabled": {
"defaultMessage": "Host has been disabled"
},
"notification.host-enabled": {
"defaultMessage": "Host has been enabled"
},
+ "notification.stream-deleted": {
+ "defaultMessage": "Stream has been deleted"
+ },
+ "notification.stream-disabled": {
+ "defaultMessage": "Stream has been disabled"
+ },
+ "notification.stream-enabled": {
+ "defaultMessage": "Stream has been enabled"
+ },
+ "notification.user-deleted": {
+ "defaultMessage": "User has been deleted"
+ },
"notification.user-disabled": {
"defaultMessage": "User has been disabled"
},
@@ -392,6 +413,12 @@
"ssl-certificate": {
"defaultMessage": "SSL Certificate"
},
+ "stream.delete.content": {
+ "defaultMessage": "Are you sure you want to delete this Stream?"
+ },
+ "stream.delete.title": {
+ "defaultMessage": "Delete Stream"
+ },
"stream.forward-host": {
"defaultMessage": "Forward Host"
},
diff --git a/frontend/src/pages/Nginx/Streams/TableWrapper.tsx b/frontend/src/pages/Nginx/Streams/TableWrapper.tsx
index 7fc7f5f6..3b651c26 100644
--- a/frontend/src/pages/Nginx/Streams/TableWrapper.tsx
+++ b/frontend/src/pages/Nginx/Streams/TableWrapper.tsx
@@ -2,6 +2,7 @@ import { IconSearch } from "@tabler/icons-react";
import { useQueryClient } from "@tanstack/react-query";
import { useState } from "react";
import Alert from "react-bootstrap/Alert";
+import { deleteStream, toggleStream } from "src/api/backend";
import { Button, LoadingPage } from "src/components";
import { useStreams } from "src/hooks";
import { intl } from "src/locale";
@@ -25,22 +26,27 @@ export default function TableWrapper() {
}
const handleDelete = async () => {
- // await deleteDeadHost(deleteId);
- showSuccess(intl.formatMessage({ id: "notification.host-deleted" }));
+ await deleteStream(deleteId);
+ showSuccess(intl.formatMessage({ id: "notification.stream-deleted" }));
};
const handleDisableToggle = async (id: number, enabled: boolean) => {
- // await toggleDeadHost(id, enabled);
- queryClient.invalidateQueries({ queryKey: ["dead-hosts"] });
- queryClient.invalidateQueries({ queryKey: ["dead-host", id] });
- showSuccess(intl.formatMessage({ id: enabled ? "notification.host-enabled" : "notification.host-disabled" }));
+ await toggleStream(id, enabled);
+ queryClient.invalidateQueries({ queryKey: ["streams"] });
+ queryClient.invalidateQueries({ queryKey: ["stream", id] });
+ showSuccess(
+ intl.formatMessage({ id: enabled ? "notification.stream-enabled" : "notification.stream-disabled" }),
+ );
};
let filtered = null;
if (search && data) {
- filtered = data?.filter((_item) => {
- return true;
- // return item.domainNames.some((domain: string) => domain.toLowerCase().includes(search));
+ filtered = data?.filter((item) => {
+ return (
+ `${item.incomingPort}`.includes(search) ||
+ `${item.forwardingPort}`.includes(search) ||
+ item.forwardingHost.includes(search)
+ );
});
} else if (search !== "") {
// this can happen if someone deletes the last item while searching
@@ -82,6 +88,7 @@ export default function TableWrapper() {
setEditId(id)}
onDelete={(id: number) => setDeleteId(id)}
onDisableToggle={handleDisableToggle}