Skip to content

Commit 546254c

Browse files
committed
add: appliance model to page title
1 parent 6301c72 commit 546254c

File tree

6 files changed

+157
-48
lines changed

6 files changed

+157
-48
lines changed

index.html

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<!doctype html>
2-
<html>
2+
<html lang="en">
33
<head>
44
<meta charset="UTF-8" />
5-
<link rel="icon" href="/img/favicon.png" type="image/png"/>
5+
<link rel="icon" href="/img/favicon.png" type="image/png" />
66
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
77
<title>Greenbone Security Assistant</title>
88
<script type="text/javascript" src="/config.js"></script>
@@ -11,5 +11,24 @@
1111
<div id="app"></div>
1212
<div id="portals"></div>
1313
<script type="module" src="/src/index.jsx"></script>
14+
<script>
15+
window.addEventListener('DOMContentLoaded', () => {
16+
try {
17+
const vendorLabel = config.vendorLabel;
18+
19+
const match = vendorLabel.match(/gsm-(\w+)_label\.svg/);
20+
if (match) {
21+
let labelPart = match[1];
22+
if (isNaN(labelPart)) {
23+
labelPart = labelPart.toUpperCase();
24+
}
25+
const pageTitle = `Greenbone - ${labelPart}`;
26+
document.title = pageTitle;
27+
} else {
28+
document.title = 'Greenbone Security Assistant';
29+
}
30+
} catch (error) {}
31+
});
32+
</script>
1433
</body>
1534
</html>

src/web/components/layout/__tests__/__snapshots__/pagetitle.jsx.snap

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/web/components/layout/__tests__/pagetitle.jsx

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,31 @@
33
* SPDX-License-Identifier: AGPL-3.0-or-later
44
*/
55

6-
76
import {describe, test, expect} from '@gsa/testing';
87

98
import PageTitle from 'web/components/layout/pagetitle';
109

11-
import {render} from 'web/utils/testing';
10+
import {rendererWith} from 'web/utils/testing';
1211

13-
describe('PageTitle tests', () => {
14-
test('should render', () => {
15-
const {element} = render(<PageTitle />);
16-
expect(element).toMatchSnapshot();
17-
});
12+
const gmp = {
13+
settings: {
14+
vendorLabel: 'someVendorLabel',
15+
},
16+
};
1817

18+
describe('PageTitle tests', () => {
1919
test('Should render default title', () => {
20+
const {render} = rendererWith({gmp});
21+
2022
const defaultTitle = 'Greenbone Security Assistant';
2123
render(<PageTitle />);
2224

2325
expect(global.window.document.title).toBe(defaultTitle);
2426
});
2527

2628
test('Should render custom title', () => {
29+
const {render} = rendererWith({gmp});
30+
2731
const title = 'foo';
2832
const defaultTitle = 'Greenbone Security Assistant';
2933
render(<PageTitle title={title} />);
@@ -32,6 +36,8 @@ describe('PageTitle tests', () => {
3236
});
3337

3438
test('should update value', () => {
39+
const {render} = rendererWith({gmp});
40+
3541
const title1 = 'foo';
3642
const title2 = 'bar';
3743
const defaultTitle = 'Greenbone Security Assistant';
@@ -43,4 +49,16 @@ describe('PageTitle tests', () => {
4349

4450
expect(global.window.document.title).toBe(defaultTitle + ' - ' + title2);
4551
});
52+
test('should render appliance model title', () => {
53+
const {render} = rendererWith({
54+
gmp: {
55+
settings: {
56+
vendorLabel: 'gsm-150_label.svg',
57+
},
58+
},
59+
});
60+
render(<PageTitle />);
61+
62+
expect(global.window.document.title).toBe('Greenbone - 150');
63+
});
4664
});

src/web/components/layout/pagetitle.jsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,15 @@
66
import {useEffect} from 'react';
77
import {isDefined} from 'gmp/utils/identity';
88
import PropTypes from 'web/utils/proptypes';
9-
10-
const defaultTitle = 'Greenbone Security Assistant';
9+
import useGmp from 'web/hooks/useGmp';
10+
import {applianceTitle} from 'web/utils/applianceData';
1111

1212
const PageTitle = ({title}) => {
13+
const gmp = useGmp();
14+
const vendorLabel = gmp?.settings?.vendorLabel || 'defaultVendorLabel';
15+
const defaultTitle =
16+
applianceTitle[vendorLabel] || 'Greenbone Security Assistant';
17+
1318
useEffect(() => {
1419
if (isDefined(title)) {
1520
document.title = defaultTitle + ' - ' + title;
@@ -20,7 +25,8 @@ const PageTitle = ({title}) => {
2025
return () => {
2126
document.title = defaultTitle;
2227
};
23-
}, [title]);
28+
}, [defaultTitle, title]);
29+
2430
return null;
2531
};
2632

src/web/components/structure/getLogo.jsx

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,42 +4,11 @@
44
*/
55

66
import PropTypes from 'web/utils/proptypes';
7-
import {
8-
Enterprise150,
9-
Enterprise400,
10-
Enterprise450,
11-
Enterprise600,
12-
Enterprise650,
13-
Enterprise5400,
14-
Enterprise6500,
15-
EnterpriseCeno,
16-
EnterpriseDeca,
17-
EnterpriseExa,
18-
EnterprisePeta,
19-
EnterpriseTera,
20-
} from 'web/components/icon/GreenboneApplianceLogo';
217

22-
const APPLIANCE_MODELS = {
23-
'gsm-150_label.svg': Enterprise150,
24-
'gsm-400_label.svg': Enterprise400,
25-
'gsm-400r2_label.svg': Enterprise400,
26-
'gsm-450_label.svg': Enterprise450,
27-
'gsm-450r2_label.svg': Enterprise450,
28-
'gsm-600_label.svg': Enterprise600,
29-
'gsm-600r2_label.svg': Enterprise600,
30-
'gsm-650_label.svg': Enterprise650,
31-
'gsm-650r2_label.svg': Enterprise650,
32-
'gsm-5400_label.svg': Enterprise5400,
33-
'gsm-6500_label.svg': Enterprise6500,
34-
'gsm-ceno_label.svg': EnterpriseCeno,
35-
'gsm-deca_label.svg': EnterpriseDeca,
36-
'gsm-exa_label.svg': EnterpriseExa,
37-
'gsm-peta_label.svg': EnterprisePeta,
38-
'gsm-tera_label.svg': EnterpriseTera,
39-
};
8+
import {applianceComponent} from 'web/utils/applianceData';
409

4110
const getLogo = model => {
42-
const Component = APPLIANCE_MODELS[model];
11+
const Component = applianceComponent[model];
4312
return Component ? <Component /> : undefined;
4413
};
4514

src/web/utils/applianceData.js

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/* SPDX-FileCopyrightText: 2024 Greenbone AG
2+
*
3+
* SPDX-License-Identifier: AGPL-3.0-or-later
4+
*/
5+
6+
import {
7+
Enterprise150,
8+
Enterprise400,
9+
Enterprise450,
10+
Enterprise600,
11+
Enterprise650,
12+
Enterprise5400,
13+
Enterprise6500,
14+
EnterpriseCeno,
15+
EnterpriseDeca,
16+
EnterpriseExa,
17+
EnterprisePeta,
18+
EnterpriseTera,
19+
} from 'web/components/icon/GreenboneApplianceLogo';
20+
21+
const APPLIANCE_DATA = {
22+
'gsm-150_label.svg': {
23+
title: 'Greenbone - 150',
24+
component: Enterprise150,
25+
},
26+
'gsm-400_label.svg': {
27+
title: 'Greenbone - 400',
28+
component: Enterprise400,
29+
},
30+
'gsm-400r2_label.svg': {
31+
title: 'Greenbone - 400',
32+
component: Enterprise400,
33+
},
34+
'gsm-450_label.svg': {
35+
title: 'Greenbone - 450',
36+
component: Enterprise450,
37+
},
38+
'gsm-450r2_label.svg': {
39+
title: 'Greenbone - 450',
40+
component: Enterprise450,
41+
},
42+
'gsm-600_label.svg': {
43+
title: 'Greenbone - 600',
44+
component: Enterprise600,
45+
},
46+
'gsm-600r2_label.svg': {
47+
title: 'Greenbone - 600',
48+
component: Enterprise600,
49+
},
50+
'gsm-650_label.svg': {
51+
title: 'Greenbone - 650',
52+
component: Enterprise650,
53+
},
54+
'gsm-650r2_label.svg': {
55+
title: 'Greenbone - 650',
56+
component: Enterprise650,
57+
},
58+
'gsm-5400_label.svg': {
59+
title: 'Greenbone - 5400',
60+
component: Enterprise5400,
61+
},
62+
'gsm-6500_label.svg': {
63+
title: 'Greenbone - 6500',
64+
component: Enterprise6500,
65+
},
66+
'gsm-ceno_label.svg': {
67+
title: 'Greenbone - CENO',
68+
component: EnterpriseCeno,
69+
},
70+
'gsm-deca_label.svg': {
71+
title: 'Greenbone - DECA',
72+
component: EnterpriseDeca,
73+
},
74+
'gsm-exa_label.svg': {
75+
title: 'Greenbone - EXA',
76+
component: EnterpriseExa,
77+
},
78+
'gsm-peta_label.svg': {
79+
title: 'Greenbone - PETA',
80+
component: EnterprisePeta,
81+
},
82+
'gsm-tera_label.svg': {
83+
title: 'Greenbone - TERA',
84+
component: EnterpriseTera,
85+
},
86+
};
87+
88+
export const applianceTitle = Object.fromEntries(
89+
Object.entries(APPLIANCE_DATA).map(([vendorLabel, {title}]) => [
90+
vendorLabel,
91+
title,
92+
]),
93+
);
94+
95+
export const applianceComponent = Object.fromEntries(
96+
Object.entries(APPLIANCE_DATA).map(([vendorLabel, {component}]) => [
97+
vendorLabel,
98+
component,
99+
]),
100+
);

0 commit comments

Comments
 (0)