From 1df7c490a66f9774e582fd8c945f973daa9333c2 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Mon, 6 Oct 2025 23:21:34 -0700 Subject: [PATCH] feat: add cyberchef as app --- admin/app/services/docker_service.ts | 1 + admin/database/seeders/service_seeder.ts | 16 ++++++++++++++++ admin/inertia/pages/settings/apps.tsx | 3 ++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/admin/app/services/docker_service.ts b/admin/app/services/docker_service.ts index 0ee8858..75533b3 100644 --- a/admin/app/services/docker_service.ts +++ b/admin/app/services/docker_service.ts @@ -18,6 +18,7 @@ export class DockerService { public static OPENSTREETMAP_IMPORT_SERVICE_NAME = 'nomad_openstreetmap_import'; public static OLLAMA_SERVICE_NAME = 'nomad_ollama'; public static OPEN_WEBUI_SERVICE_NAME = 'nomad_open_webui'; + public static CYBERCHEF_SERVICE_NAME = 'nomad_cyberchef'; public static NOMAD_STORAGE_ABS_PATH = '/opt/project-nomad/storage'; constructor() { diff --git a/admin/database/seeders/service_seeder.ts b/admin/database/seeders/service_seeder.ts index 8ca30e7..6b0e1af 100644 --- a/admin/database/seeders/service_seeder.ts +++ b/admin/database/seeders/service_seeder.ts @@ -74,6 +74,22 @@ export default class ServiceSeeder extends BaseSeeder { is_dependency_service: false, depends_on: DockerService.OLLAMA_SERVICE_NAME, }, + { + service_name: DockerService.CYBERCHEF_SERVICE_NAME, + container_image: 'ghcr.io/gchq/cyberchef:latest', + container_command: null, + container_config: JSON.stringify({ + HostConfig: { + RestartPolicy: { Name: 'unless-stopped' }, + PortBindings: { '80/tcp': [{ HostPort: '8100' }] } + }, + ExposedPorts: { '80/tcp': {} } + }), + ui_location: '8100', + installed: false, + is_dependency_service: false, + depends_on: null, + }, ] async run() { diff --git a/admin/inertia/pages/settings/apps.tsx b/admin/inertia/pages/settings/apps.tsx index 24b684f..048a87c 100644 --- a/admin/inertia/pages/settings/apps.tsx +++ b/admin/inertia/pages/settings/apps.tsx @@ -13,6 +13,7 @@ import { useTransmit } from 'react-adonis-transmit' import LoadingSpinner from '~/components/LoadingSpinner' import useErrorNotification from '~/hooks/useErrorNotification' import useInternetStatus from '~/hooks/useInternetStatus' +import { ArrowDownTrayIcon } from '@heroicons/react/24/outline' export default function SettingsPage(props: { system: { services: ServiceSlim[] } }) { const { openModal, closeAllModals } = useModals() @@ -64,7 +65,7 @@ export default function SettingsPage(props: { system: { services: ServiceSlim[] confirmText="Install" cancelText="Cancel" confirmVariant='primary' - icon='ArrowDownTrayIcon' + icon={} >

Are you sure you want to install {service.service_name}? This will start the service and