diff --git a/index.html b/index.html
index cec5d6ca6e..9dac9d0087 100644
--- a/index.html
+++ b/index.html
@@ -1,8 +1,8 @@
-
+
-
+
Greenbone Security Assistant
@@ -11,5 +11,24 @@
+
diff --git a/package-lock.json b/package-lock.json
index 9c6b1d0e3d..a7494c84f1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,7 @@
"version": "23.3.1-dev1",
"license": "AGPL-3.0+",
"dependencies": {
- "@greenbone/opensight-ui-components": "^0.4.0",
+ "@greenbone/opensight-ui-components": "^0.4.1-alpha6",
"@mantine/core": "^6.0.0",
"@reduxjs/toolkit": "^2.2.7",
"@sentry/react": "^8.28.0",
@@ -2105,9 +2105,9 @@
"integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA=="
},
"node_modules/@babel/runtime": {
- "version": "7.24.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz",
- "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==",
+ "version": "7.25.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
+ "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -2782,21 +2782,21 @@
"integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q=="
},
"node_modules/@greenbone/opensight-ui-components": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/@greenbone/opensight-ui-components/-/opensight-ui-components-0.4.0.tgz",
- "integrity": "sha512-PQBw0uflyF1xMjerJOr3eOmYP9ebAKoq68JMY2hVD5C2iZI7XmGTXYhu3ykFHQNxSvFJOYRrxnTrmuxBtTH39w==",
+ "version": "0.4.1-alpha6",
+ "resolved": "https://registry.npmjs.org/@greenbone/opensight-ui-components/-/opensight-ui-components-0.4.1-alpha6.tgz",
+ "integrity": "sha512-/uHRSHUkHdJ4fJBkGc4bo7EhVbouXtKDNe6bCjWysWMoIpNjLYWvBY+rRbDuRzkSzgnVHIdKm6GE+HH9nGchMg==",
"dependencies": {
"@mantine/core": "^6.x.x",
"@mantine/dates": "^6.x.x",
"@mantine/hooks": "^6.x.x",
"@mantine/notifications": "^6.x.x",
- "lucide-react": "^0.427.0",
+ "lucide-react": "^0.446.0",
"luxon": "^3.5.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-hook-form": "^7",
- "react-i18next": "^14.1.2",
- "react-select": "^5.8.0",
+ "react-i18next": "^15.0.2",
+ "react-select": "^5.8.1",
"tiny-invariant": "^1.3.3",
"urlcat": "^3",
"webfontloader": "^1.6.28",
@@ -2818,13 +2818,34 @@
}
},
"node_modules/@greenbone/opensight-ui-components/node_modules/lucide-react": {
- "version": "0.427.0",
- "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.427.0.tgz",
- "integrity": "sha512-lv9s6c5BDF/ccuA0EgTdskTxIe11qpwBDmzRZHJAKtp8LTewAvDvOM+pTES9IpbBuTqkjiMhOmGpJ/CB+mKjFw==",
+ "version": "0.446.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.446.0.tgz",
+ "integrity": "sha512-BU7gy8MfBMqvEdDPH79VhOXSEgyG8TSPOKWaExWGCQVqnGH7wGgDngPbofu+KdtVjPQBWbEmnfMTq90CTiiDRg==",
"peerDependencies": {
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
}
},
+ "node_modules/@greenbone/opensight-ui-components/node_modules/react-i18next": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.2.tgz",
+ "integrity": "sha512-z0W3/RES9Idv3MmJUcf0mDNeeMOUXe+xoL0kPfQPbDoZHmni/XsIoq5zgT2MCFUiau283GuBUK578uD/mkAbLQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.25.0",
+ "html-parse-stringify": "^3.0.1"
+ },
+ "peerDependencies": {
+ "i18next": ">= 23.2.3",
+ "react": ">= 16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@humanwhocodes/config-array": {
"version": "0.11.14",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
@@ -10079,9 +10100,9 @@
}
},
"node_modules/react-select": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz",
- "integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==",
+ "version": "5.8.1",
+ "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.1.tgz",
+ "integrity": "sha512-RT1CJmuc+ejqm5MPgzyZujqDskdvB9a9ZqrdnVLsvAHjJ3Tj0hELnLeVPQlmYdVKCdCpxanepl6z7R5KhXhWzg==",
"dependencies": {
"@babel/runtime": "^7.12.0",
"@emotion/cache": "^11.4.0",
diff --git a/package.json b/package.json
index 88938b8c1f..fd2e2d5592 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,7 @@
"node": ">=18.0"
},
"dependencies": {
- "@greenbone/opensight-ui-components": "^0.4.0",
+ "@greenbone/opensight-ui-components": "^0.4.1-alpha6",
"@mantine/core": "^6.0.0",
"@reduxjs/toolkit": "^2.2.7",
"@sentry/react": "^8.28.0",
diff --git a/src/web/components/icon/GreenboneApplianceLogo.jsx b/src/web/components/icon/GreenboneApplianceLogo.jsx
new file mode 100644
index 0000000000..80895ff8b1
--- /dev/null
+++ b/src/web/components/icon/GreenboneApplianceLogo.jsx
@@ -0,0 +1,35 @@
+/* SPDX-FileCopyrightText: 2024 Greenbone AG
+ *
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import SvgIconWrapper from './SvgIconWrapper';
+import Enterprise150Svg from 'web/components/icon/svg/Enterprise_150.svg';
+import Enterprise400Svg from 'web/components/icon/svg/Enterprise_400.svg';
+import Enterprise450Svg from 'web/components/icon/svg/Enterprise_450.svg';
+import Enterprise600Svg from 'web/components/icon/svg/Enterprise_600.svg';
+import Enterprise650Svg from 'web/components/icon/svg/Enterprise_650.svg';
+import Enterprise5400Svg from 'web/components/icon/svg/Enterprise_5400.svg';
+import Enterprise6500Svg from 'web/components/icon/svg/Enterprise_6500.svg';
+import EnterpriseCenoSvg from 'web/components/icon/svg/Enterprise_CENO.svg';
+import EnterpriseDecaSvg from 'web/components/icon/svg/Enterprise_DECA.svg';
+import EnterpriseExaSvg from 'web/components/icon/svg/Enterprise_EXA.svg';
+import EnterprisePetaSvg from 'web/components/icon/svg/Enterprise_PETA.svg';
+import EnterpriseTeraSvg from 'web/components/icon/svg/Enterprise_TERA.svg';
+
+const createEnterpriseComponent = Component => () => (
+
+);
+
+export const Enterprise150 = createEnterpriseComponent(Enterprise150Svg);
+export const Enterprise400 = createEnterpriseComponent(Enterprise400Svg);
+export const Enterprise450 = createEnterpriseComponent(Enterprise450Svg);
+export const Enterprise600 = createEnterpriseComponent(Enterprise600Svg);
+export const Enterprise650 = createEnterpriseComponent(Enterprise650Svg);
+export const Enterprise5400 = createEnterpriseComponent(Enterprise5400Svg);
+export const Enterprise6500 = createEnterpriseComponent(Enterprise6500Svg);
+export const EnterpriseCeno = createEnterpriseComponent(EnterpriseCenoSvg);
+export const EnterpriseDeca = createEnterpriseComponent(EnterpriseDecaSvg);
+export const EnterpriseExa = createEnterpriseComponent(EnterpriseExaSvg);
+export const EnterprisePeta = createEnterpriseComponent(EnterprisePetaSvg);
+export const EnterpriseTera = createEnterpriseComponent(EnterpriseTeraSvg);
diff --git a/src/web/components/icon/SvgIconWrapper.jsx b/src/web/components/icon/SvgIconWrapper.jsx
new file mode 100644
index 0000000000..c767643923
--- /dev/null
+++ b/src/web/components/icon/SvgIconWrapper.jsx
@@ -0,0 +1,23 @@
+/* SPDX-FileCopyrightText: 2024 Greenbone AG
+ *
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import PropTypes from 'web/utils/proptypes';
+import SvgIcon from './svgicon';
+
+const SvgIconWrapper = ({component: Component, size, ...props}) => (
+
+ {svgProps => }
+
+);
+
+SvgIconWrapper.propTypes = {
+ component: PropTypes.node.isRequired,
+ size: PropTypes.oneOfType([
+ PropTypes.oneOf(['tiny', 'small', 'medium', 'large']),
+ PropTypes.string,
+ ]),
+};
+
+export default SvgIconWrapper;
diff --git a/src/web/components/icon/svg/Enterprise_150.svg b/src/web/components/icon/svg/Enterprise_150.svg
new file mode 100644
index 0000000000..fb3c5db66f
--- /dev/null
+++ b/src/web/components/icon/svg/Enterprise_150.svg
@@ -0,0 +1,31 @@
+
diff --git a/src/web/components/icon/svg/Enterprise_400.svg b/src/web/components/icon/svg/Enterprise_400.svg
new file mode 100644
index 0000000000..151eca4004
--- /dev/null
+++ b/src/web/components/icon/svg/Enterprise_400.svg
@@ -0,0 +1,31 @@
+
diff --git a/src/web/components/icon/svg/Enterprise_450.svg b/src/web/components/icon/svg/Enterprise_450.svg
new file mode 100644
index 0000000000..b7e5567708
--- /dev/null
+++ b/src/web/components/icon/svg/Enterprise_450.svg
@@ -0,0 +1,31 @@
+
diff --git a/src/web/components/icon/svg/Enterprise_5400.svg b/src/web/components/icon/svg/Enterprise_5400.svg
new file mode 100644
index 0000000000..f8af1c1cbc
--- /dev/null
+++ b/src/web/components/icon/svg/Enterprise_5400.svg
@@ -0,0 +1,31 @@
+
diff --git a/src/web/components/icon/svg/Enterprise_600.svg b/src/web/components/icon/svg/Enterprise_600.svg
new file mode 100644
index 0000000000..c67be5aa09
--- /dev/null
+++ b/src/web/components/icon/svg/Enterprise_600.svg
@@ -0,0 +1,31 @@
+
diff --git a/src/web/components/icon/svg/Enterprise_650.svg b/src/web/components/icon/svg/Enterprise_650.svg
new file mode 100644
index 0000000000..881c769a70
--- /dev/null
+++ b/src/web/components/icon/svg/Enterprise_650.svg
@@ -0,0 +1,31 @@
+
diff --git a/src/web/components/icon/svg/Enterprise_6500.svg b/src/web/components/icon/svg/Enterprise_6500.svg
new file mode 100644
index 0000000000..9085d67010
--- /dev/null
+++ b/src/web/components/icon/svg/Enterprise_6500.svg
@@ -0,0 +1,31 @@
+
diff --git a/src/web/components/icon/svg/Enterprise_CENO.svg b/src/web/components/icon/svg/Enterprise_CENO.svg
new file mode 100644
index 0000000000..3e6c69e1a4
--- /dev/null
+++ b/src/web/components/icon/svg/Enterprise_CENO.svg
@@ -0,0 +1,32 @@
+
diff --git a/src/web/components/icon/svg/Enterprise_DECA.svg b/src/web/components/icon/svg/Enterprise_DECA.svg
new file mode 100644
index 0000000000..b794a4d51e
--- /dev/null
+++ b/src/web/components/icon/svg/Enterprise_DECA.svg
@@ -0,0 +1,32 @@
+
diff --git a/src/web/components/icon/svg/Enterprise_EXA.svg b/src/web/components/icon/svg/Enterprise_EXA.svg
new file mode 100644
index 0000000000..e85f83463f
--- /dev/null
+++ b/src/web/components/icon/svg/Enterprise_EXA.svg
@@ -0,0 +1,32 @@
+
diff --git a/src/web/components/icon/svg/Enterprise_PETA.svg b/src/web/components/icon/svg/Enterprise_PETA.svg
new file mode 100644
index 0000000000..c76016a808
--- /dev/null
+++ b/src/web/components/icon/svg/Enterprise_PETA.svg
@@ -0,0 +1,32 @@
+
diff --git a/src/web/components/icon/svg/Enterprise_TERA.svg b/src/web/components/icon/svg/Enterprise_TERA.svg
new file mode 100644
index 0000000000..884b841306
--- /dev/null
+++ b/src/web/components/icon/svg/Enterprise_TERA.svg
@@ -0,0 +1,32 @@
+
diff --git a/src/web/components/layout/__tests__/__snapshots__/pagetitle.jsx.snap b/src/web/components/layout/__tests__/__snapshots__/pagetitle.jsx.snap
deleted file mode 100644
index 2805c1d908..0000000000
--- a/src/web/components/layout/__tests__/__snapshots__/pagetitle.jsx.snap
+++ /dev/null
@@ -1,3 +0,0 @@
-// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
-
-exports[`PageTitle tests > should render 1`] = `null`;
diff --git a/src/web/components/layout/__tests__/pagetitle.jsx b/src/web/components/layout/__tests__/pagetitle.jsx
index 3c9fc0419d..997fcc3449 100644
--- a/src/web/components/layout/__tests__/pagetitle.jsx
+++ b/src/web/components/layout/__tests__/pagetitle.jsx
@@ -3,20 +3,22 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
import {describe, test, expect} from '@gsa/testing';
import PageTitle from 'web/components/layout/pagetitle';
-import {render} from 'web/utils/testing';
+import {rendererWith} from 'web/utils/testing';
-describe('PageTitle tests', () => {
- test('should render', () => {
- const {element} = render();
- expect(element).toMatchSnapshot();
- });
+const gmp = {
+ settings: {
+ vendorLabel: 'someVendorLabel',
+ },
+};
+describe('PageTitle tests', () => {
test('Should render default title', () => {
+ const {render} = rendererWith({gmp});
+
const defaultTitle = 'Greenbone Security Assistant';
render();
@@ -24,6 +26,8 @@ describe('PageTitle tests', () => {
});
test('Should render custom title', () => {
+ const {render} = rendererWith({gmp});
+
const title = 'foo';
const defaultTitle = 'Greenbone Security Assistant';
render();
@@ -32,6 +36,8 @@ describe('PageTitle tests', () => {
});
test('should update value', () => {
+ const {render} = rendererWith({gmp});
+
const title1 = 'foo';
const title2 = 'bar';
const defaultTitle = 'Greenbone Security Assistant';
@@ -43,4 +49,16 @@ describe('PageTitle tests', () => {
expect(global.window.document.title).toBe(defaultTitle + ' - ' + title2);
});
+ test('should render appliance model title', () => {
+ const {render} = rendererWith({
+ gmp: {
+ settings: {
+ vendorLabel: 'gsm-150_label.svg',
+ },
+ },
+ });
+ render();
+
+ expect(global.window.document.title).toBe('Greenbone - 150');
+ });
});
diff --git a/src/web/components/layout/pagetitle.jsx b/src/web/components/layout/pagetitle.jsx
index b1382eacd0..a66ad27012 100644
--- a/src/web/components/layout/pagetitle.jsx
+++ b/src/web/components/layout/pagetitle.jsx
@@ -6,10 +6,15 @@
import {useEffect} from 'react';
import {isDefined} from 'gmp/utils/identity';
import PropTypes from 'web/utils/proptypes';
-
-const defaultTitle = 'Greenbone Security Assistant';
+import useGmp from 'web/hooks/useGmp';
+import {applianceTitle} from 'web/utils/applianceData';
const PageTitle = ({title}) => {
+ const gmp = useGmp();
+ const vendorLabel = gmp?.settings?.vendorLabel || 'defaultVendorLabel';
+ const defaultTitle =
+ applianceTitle[vendorLabel] || 'Greenbone Security Assistant';
+
useEffect(() => {
if (isDefined(title)) {
document.title = defaultTitle + ' - ' + title;
@@ -20,7 +25,8 @@ const PageTitle = ({title}) => {
return () => {
document.title = defaultTitle;
};
- }, [title]);
+ }, [defaultTitle, title]);
+
return null;
};
diff --git a/src/web/components/structure/__tests__/getLogo.jsx b/src/web/components/structure/__tests__/getLogo.jsx
new file mode 100644
index 0000000000..ea13984c79
--- /dev/null
+++ b/src/web/components/structure/__tests__/getLogo.jsx
@@ -0,0 +1,39 @@
+/* SPDX-FileCopyrightText: 2024 Greenbone AG
+ *
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import {describe, test, expect} from '@gsa/testing';
+import {render} from 'web/utils/testing';
+import getLogo from 'web/components/structure/getLogo';
+
+describe('getLogo', () => {
+ const testCases = [
+ ['gsm-150_label.svg', 'Enterprise150'],
+ ['gsm-400_label.svg', 'Enterprise400'],
+ ['gsm-400r2_label.svg', 'Enterprise400'],
+ ['gsm-450_label.svg', 'Enterprise450'],
+ ['gsm-450r2_label.svg', 'Enterprise450'],
+ ['gsm-600_label.svg', 'Enterprise600'],
+ ['gsm-600r2_label.svg', 'Enterprise600'],
+ ['gsm-650_label.svg', 'Enterprise650'],
+ ['gsm-650r2_label.svg', 'Enterprise650'],
+ ['gsm-5400_label.svg', 'Enterprise5400'],
+ ['gsm-6500_label.svg', 'Enterprise6500'],
+ ['gsm-ceno_label.svg', 'EnterpriseCeno'],
+ ['gsm-deca_label.svg', 'EnterpriseDeca'],
+ ['gsm-exa_label.svg', 'EnterpriseExa'],
+ ['gsm-peta_label.svg', 'EnterprisePeta'],
+ ['gsm-tera_label.svg', 'EnterpriseTera'],
+ ];
+
+ test.each(testCases)('returns %s for %s', (model, expectedTestId) => {
+ const {getByTestId} = render(getLogo(model));
+ expect(getByTestId(expectedTestId)).toBeInTheDocument();
+ });
+
+ test('returns undefined for unknown model', () => {
+ const result = getLogo('unknown_model.svg');
+ expect(result).toBeUndefined();
+ });
+});
diff --git a/src/web/components/structure/getLogo.jsx b/src/web/components/structure/getLogo.jsx
new file mode 100644
index 0000000000..2910361220
--- /dev/null
+++ b/src/web/components/structure/getLogo.jsx
@@ -0,0 +1,36 @@
+/* SPDX-FileCopyrightText: 2024 Greenbone AG
+ *
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import PropTypes from 'web/utils/proptypes';
+
+import {applianceComponent} from 'web/utils/applianceData';
+
+const getLogo = model => {
+ const Component = applianceComponent[model];
+ return Component ? : undefined;
+};
+
+getLogo.propTypes = {
+ model: PropTypes.oneOf([
+ 'gsm-150_label.svg',
+ 'gsm-400_label.svg',
+ 'gsm-400r2_label.svg',
+ 'gsm-450_label.svg',
+ 'gsm-450r2_label.svg',
+ 'gsm-600_label.svg',
+ 'gsm-600r2_label.svg',
+ 'gsm-650_label.svg',
+ 'gsm-650r2_label.svg',
+ 'gsm-5400_label.svg',
+ 'gsm-6500_label.svg',
+ 'gsm-ceno_label.svg',
+ 'gsm-deca_label.svg',
+ 'gsm-exa_label.svg',
+ 'gsm-peta_label.svg',
+ 'gsm-tera_label.svg',
+ ]),
+};
+
+export default getLogo;
diff --git a/src/web/components/structure/header.jsx b/src/web/components/structure/header.jsx
index bc43312aa9..034c480bbe 100644
--- a/src/web/components/structure/header.jsx
+++ b/src/web/components/structure/header.jsx
@@ -16,6 +16,7 @@ import useUserName from 'web/hooks/useUserName';
import useGmp from 'web/hooks/useGmp';
import LogoutIcon from 'web/components/icon/logouticon';
+import getLogo from 'web/components/structure/getLogo';
import MySettingsIcon from 'web/components/icon/mysettingsicon';
import LanguageSwitch from './languageswitch';
import SessionTimer from '../sessionTimer/SessionTimer';
@@ -25,6 +26,7 @@ const Header = () => {
const username = useUserName();
const loggedIn = useUserIsLoggedIn();
const navigate = useNavigate();
+ const logoComponent = getLogo(gmp.settings.vendorLabel);
const handleSettingsClick = useCallback(
event => {
@@ -57,14 +59,17 @@ const Header = () => {
icon: ,
},
];
+
return (
}
menuPoints={menuPoints}
isLoggedIn={loggedIn}
sessionTimer={}
username={username}
- logoLink="/"
+ logoLink="/dashboards"
+ isThemeSwitchVisible={false}
/>
);
};
diff --git a/src/web/routes.jsx b/src/web/routes.jsx
index b12ae1e86e..3287604d2e 100644
--- a/src/web/routes.jsx
+++ b/src/web/routes.jsx
@@ -244,7 +244,7 @@ const LoggedInRoutes = () => {
/>
}
/>
- } />
+ } />
} />
diff --git a/src/web/utils/applianceData.js b/src/web/utils/applianceData.js
new file mode 100644
index 0000000000..9b6270756d
--- /dev/null
+++ b/src/web/utils/applianceData.js
@@ -0,0 +1,100 @@
+/* SPDX-FileCopyrightText: 2024 Greenbone AG
+ *
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import {
+ Enterprise150,
+ Enterprise400,
+ Enterprise450,
+ Enterprise600,
+ Enterprise650,
+ Enterprise5400,
+ Enterprise6500,
+ EnterpriseCeno,
+ EnterpriseDeca,
+ EnterpriseExa,
+ EnterprisePeta,
+ EnterpriseTera,
+} from 'web/components/icon/GreenboneApplianceLogo';
+
+const APPLIANCE_DATA = {
+ 'gsm-150_label.svg': {
+ title: 'Greenbone - 150',
+ component: Enterprise150,
+ },
+ 'gsm-400_label.svg': {
+ title: 'Greenbone - 400',
+ component: Enterprise400,
+ },
+ 'gsm-400r2_label.svg': {
+ title: 'Greenbone - 400',
+ component: Enterprise400,
+ },
+ 'gsm-450_label.svg': {
+ title: 'Greenbone - 450',
+ component: Enterprise450,
+ },
+ 'gsm-450r2_label.svg': {
+ title: 'Greenbone - 450',
+ component: Enterprise450,
+ },
+ 'gsm-600_label.svg': {
+ title: 'Greenbone - 600',
+ component: Enterprise600,
+ },
+ 'gsm-600r2_label.svg': {
+ title: 'Greenbone - 600',
+ component: Enterprise600,
+ },
+ 'gsm-650_label.svg': {
+ title: 'Greenbone - 650',
+ component: Enterprise650,
+ },
+ 'gsm-650r2_label.svg': {
+ title: 'Greenbone - 650',
+ component: Enterprise650,
+ },
+ 'gsm-5400_label.svg': {
+ title: 'Greenbone - 5400',
+ component: Enterprise5400,
+ },
+ 'gsm-6500_label.svg': {
+ title: 'Greenbone - 6500',
+ component: Enterprise6500,
+ },
+ 'gsm-ceno_label.svg': {
+ title: 'Greenbone - CENO',
+ component: EnterpriseCeno,
+ },
+ 'gsm-deca_label.svg': {
+ title: 'Greenbone - DECA',
+ component: EnterpriseDeca,
+ },
+ 'gsm-exa_label.svg': {
+ title: 'Greenbone - EXA',
+ component: EnterpriseExa,
+ },
+ 'gsm-peta_label.svg': {
+ title: 'Greenbone - PETA',
+ component: EnterprisePeta,
+ },
+ 'gsm-tera_label.svg': {
+ title: 'Greenbone - TERA',
+ component: EnterpriseTera,
+ },
+};
+
+export const applianceTitle = Object.fromEntries(
+ Object.entries(APPLIANCE_DATA).map(([vendorLabel, {title}]) => [
+ vendorLabel,
+ title,
+ ]),
+);
+
+export const applianceComponent = Object.fromEntries(
+ Object.entries(APPLIANCE_DATA).map(([vendorLabel, {component}]) => [
+ vendorLabel,
+ component,
+ ]),
+);