├── .docker ├── compose.yml └── prod.Dockerfile ├── .dockerignore ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── config.yml │ └── issue-report.md ├── dependabot.yml └── workflows │ ├── changelog.yml │ ├── ci-js.yml │ ├── codeql-analysis.yml │ ├── container.yml │ ├── conventional-commits.yml │ ├── dependency-review.yml │ ├── release.yml │ └── sbom-upload.yml ├── .gitignore ├── .prettierrc.cjs ├── LICENSE ├── README.md ├── cliff.toml ├── eslint-script ├── allowedSnakeCase.js └── no-dynamic-i18n.js ├── eslint.config.js ├── i18next-parser.config.js ├── index.html ├── jsconfig.json ├── package-lock.json ├── package.json ├── public ├── img │ ├── cpe │ │ ├── a:apache:http_server.svg │ │ ├── a:drupal:drupal.svg │ │ ├── a:gnu.svg │ │ ├── a:google.svg │ │ ├── a:mysql:mysql.svg │ │ ├── a:openbsd:openssh.svg │ │ ├── a:otrs:otrs.svg │ │ ├── a:php:php.svg │ │ ├── a:postgresql:postgresql.svg │ │ ├── a:snort:snort.svg │ │ ├── a:sourcefire.svg │ │ ├── a:typo3:typo3.svg │ │ ├── a:wordpress:wordpress.svg │ │ └── other.svg │ ├── favicon.png │ ├── greenbone.svg │ ├── greenbone_banner.jpeg │ ├── greenbone_banner.png │ ├── greenbonehorizontal.png │ ├── gsa.svg │ ├── gsa_splash.svg │ ├── loading.gif │ ├── login-bottom.svg │ ├── login-label.svg │ ├── login-top.svg │ ├── os_aix.svg │ ├── os_apple.svg │ ├── os_arubanetworks.svg │ ├── os_centos.svg │ ├── os_checkpoint.svg │ ├── os_cisco.svg │ ├── os_conflict.svg │ ├── os_cyclades.svg │ ├── os_debian.svg │ ├── os_fedora.svg │ ├── os_fortinet.svg │ ├── os_freebsd.svg │ ├── os_gentoo.svg │ ├── os_gos.svg │ ├── os_hp.svg │ ├── os_huawai.svg │ ├── os_ipfire.svg │ ├── os_junos.svg │ ├── os_linux.svg │ ├── os_mandriva.svg │ ├── os_mcafee.svg │ ├── os_netbsd.svg │ ├── os_netgear.svg │ ├── os_novell.svg │ ├── os_openbsd.svg │ ├── os_paloalto.svg │ ├── os_redhat.svg │ ├── os_ruggedcom.svg │ ├── os_slackware.svg │ ├── os_sourcefire.svg │ ├── os_sun.svg │ ├── os_suse.svg │ ├── os_synology.svg │ ├── os_trustix.svg │ ├── os_ubuntu.svg │ ├── os_ucs.svg │ ├── os_unknown.svg │ ├── os_vmware.svg │ └── os_windows.svg ├── locales │ ├── gsa-ar.json │ ├── gsa-de.json │ ├── gsa-en.json │ ├── gsa-fr.json │ ├── gsa-pt_BR.json │ ├── gsa-ru.json │ ├── gsa-tr.json │ ├── gsa-zh_CN.json │ └── gsa-zh_TW.json └── robots.txt ├── src ├── __tests__ │ └── version.test.ts ├── gmp │ ├── __tests__ │ │ ├── cancel.test.ts │ │ ├── gmp.test.ts │ │ ├── gmpsettings.test.ts │ │ ├── log.test.ts │ │ ├── model.test.ts │ │ ├── parser.test.ts │ │ └── timezones.test.ts │ ├── cancel.ts │ ├── capabilities │ │ ├── __tests__ │ │ │ ├── capabilities.test.ts │ │ │ └── everything.test.ts │ │ ├── capabilities.ts │ │ └── everything.ts │ ├── collection │ │ ├── CollectionCounts.ts │ │ ├── __tests__ │ │ │ └── parser.test.ts │ │ └── parser.ts │ ├── command.ts │ ├── commands │ │ ├── __tests__ │ │ │ ├── audit.test.js │ │ │ ├── auditreport.test.js │ │ │ ├── auditreports.test.js │ │ │ ├── auth.test.ts │ │ │ ├── convert.test.js │ │ │ ├── credentials.test.js │ │ │ ├── dashboards.test.js │ │ │ ├── entities.test.js │ │ │ ├── entity.test.js │ │ │ ├── feedstatus.test.js │ │ │ ├── http.test.js │ │ │ ├── license.test.js │ │ │ ├── nvt.test.js │ │ │ ├── nvtfamilies.test.js │ │ │ ├── performance.test.ts │ │ │ ├── policies.test.js │ │ │ ├── policy.test.js │ │ │ ├── portlist.test.ts │ │ │ ├── report.test.js │ │ │ ├── reportconfig.test.js │ │ │ ├── reportconfigs.test.js │ │ │ ├── reports.test.js │ │ │ ├── resourcenames.test.js │ │ │ ├── result.test.js │ │ │ ├── results.test.js │ │ │ ├── scanconfig.test.js │ │ │ ├── tag.test.js │ │ │ ├── target.test.js │ │ │ ├── tasks.test.js │ │ │ ├── ticket.test.js │ │ │ ├── tickets.test.js │ │ │ ├── tlscertificates.test.js │ │ │ └── user.test.ts │ │ ├── alerts.js │ │ ├── auditreports.js │ │ ├── audits.js │ │ ├── auth.ts │ │ ├── certbund.js │ │ ├── convert.js │ │ ├── cpes.js │ │ ├── credentials.js │ │ ├── cves.js │ │ ├── cvsscalculator.js │ │ ├── dashboards.js │ │ ├── dfncert.js │ │ ├── entities.ts │ │ ├── entity.ts │ │ ├── feedstatus.js │ │ ├── filters.js │ │ ├── gmp.js │ │ ├── gmp.ts │ │ ├── groups.js │ │ ├── hosts.js │ │ ├── http.ts │ │ ├── infoentities.js │ │ ├── infoentity.js │ │ ├── license.js │ │ ├── login.ts │ │ ├── notes.js │ │ ├── nvt.js │ │ ├── nvtfamilies.js │ │ ├── os.js │ │ ├── overrides.js │ │ ├── performance.ts │ │ ├── permissions.js │ │ ├── policies.js │ │ ├── portlists.ts │ │ ├── reportconfigs.js │ │ ├── reportformats.js │ │ ├── reports.js │ │ ├── resourcenames.js │ │ ├── results.js │ │ ├── roles.js │ │ ├── scanconfigs.js │ │ ├── scanners.js │ │ ├── schedules.js │ │ ├── tags.js │ │ ├── targets.js │ │ ├── tasks.js │ │ ├── testing.ts │ │ ├── tickets.js │ │ ├── tlscertificates.js │ │ ├── trashcan.js │ │ ├── users.ts │ │ ├── vulns.js │ │ └── wizard.js │ ├── gmp.ts │ ├── gmpsettings.ts │ ├── http │ │ ├── __tests__ │ │ │ ├── http.test.ts │ │ │ ├── rejection.test.ts │ │ │ ├── response.test.ts │ │ │ └── utils.test.ts │ │ ├── gmp.ts │ │ ├── http.ts │ │ ├── rejection.ts │ │ ├── response.ts │ │ ├── transform │ │ │ ├── __tests__ │ │ │ │ ├── fastxml.test.ts │ │ │ │ └── xml.test.ts │ │ │ ├── default.ts │ │ │ ├── fastxml.ts │ │ │ ├── transform.ts │ │ │ └── xml.ts │ │ └── utils.ts │ ├── index.ts │ ├── locale │ │ ├── __tests__ │ │ │ ├── date.test.ts │ │ │ ├── detector.test.ts │ │ │ ├── lang.test.ts │ │ │ └── languages.test.ts │ │ ├── date.ts │ │ ├── detector.ts │ │ ├── index.ts │ │ ├── lang.ts │ │ └── languages.ts │ ├── log.ts │ ├── model.ts │ ├── models │ │ ├── __tests__ │ │ │ ├── alert.test.js │ │ │ ├── asset.test.js │ │ │ ├── audit.test.js │ │ │ ├── certbund.test.js │ │ │ ├── cpe.test.js │ │ │ ├── credential.test.js │ │ │ ├── cve.test.js │ │ │ ├── dfncert.test.js │ │ │ ├── event.test.js │ │ │ ├── filter.test.ts │ │ │ ├── group.test.js │ │ │ ├── host.test.js │ │ │ ├── info.test.js │ │ │ ├── license.test.js │ │ │ ├── login.test.ts │ │ │ ├── note.test.js │ │ │ ├── nvt.test.js │ │ │ ├── os.test.js │ │ │ ├── override.test.js │ │ │ ├── permission.test.js │ │ │ ├── policy.test.js │ │ │ ├── portlist.test.ts │ │ │ ├── reportconfig.test.js │ │ │ ├── reportformat.test.js │ │ │ ├── resourcename.test.js │ │ │ ├── result.test.js │ │ │ ├── role.test.js │ │ │ ├── scanconfig.test.js │ │ │ ├── scanner.test.js │ │ │ ├── schedule.test.js │ │ │ ├── secinfo.test.js │ │ │ ├── setting.test.ts │ │ │ ├── settings.test.ts │ │ │ ├── tag.test.js │ │ │ ├── target.test.js │ │ │ ├── task.test.js │ │ │ ├── ticket.test.js │ │ │ ├── tlscertificate.test.js │ │ │ ├── user.test.ts │ │ │ └── vulnerability.test.js │ │ ├── actionresult.ts │ │ ├── alert.js │ │ ├── asset.js │ │ ├── audit.js │ │ ├── auditreport.js │ │ ├── certbund.js │ │ ├── cpe.js │ │ ├── credential.js │ │ ├── cve.js │ │ ├── date.ts │ │ ├── dfncert.js │ │ ├── event.js │ │ ├── filter.ts │ │ ├── filter │ │ │ ├── __tests__ │ │ │ │ ├── convert.test.ts │ │ │ │ ├── filterterm.test.ts │ │ │ │ └── utils.test.ts │ │ │ ├── convert.ts │ │ │ ├── filterterm.ts │ │ │ ├── keywords.ts │ │ │ └── utils.ts │ │ ├── group.js │ │ ├── host.js │ │ ├── info.js │ │ ├── license.js │ │ ├── login.ts │ │ ├── note.js │ │ ├── nvt.js │ │ ├── os.js │ │ ├── override.js │ │ ├── permission.js │ │ ├── policy.js │ │ ├── portlist.ts │ │ ├── report.js │ │ ├── report │ │ │ ├── __tests__ │ │ │ │ ├── app.test.js │ │ │ │ ├── cve.test.js │ │ │ │ ├── host.test.js │ │ │ │ ├── os.test.js │ │ │ │ ├── parser.test.js │ │ │ │ ├── port.test.js │ │ │ │ ├── task.test.js │ │ │ │ └── tlscertificate.test.js │ │ │ ├── app.js │ │ │ ├── auditreport.js │ │ │ ├── cve.js │ │ │ ├── host.js │ │ │ ├── os.js │ │ │ ├── parser.js │ │ │ ├── port.js │ │ │ ├── report.js │ │ │ ├── task.js │ │ │ └── tlscertificate.js │ │ ├── reportconfig.js │ │ ├── reportformat.js │ │ ├── resourcename.js │ │ ├── result.js │ │ ├── role.js │ │ ├── scanconfig.js │ │ ├── scanner.js │ │ ├── schedule.js │ │ ├── secinfo.js │ │ ├── setting.ts │ │ ├── settings.ts │ │ ├── tag.js │ │ ├── target.js │ │ ├── task.js │ │ ├── testing.js │ │ ├── ticket.js │ │ ├── tlscertificate.js │ │ ├── user.ts │ │ └── vulnerability.js │ ├── parser.ts │ ├── parser │ │ ├── __tests__ │ │ │ ├── cvss.test.ts │ │ │ └── cvssV4.test.ts │ │ ├── cvss.ts │ │ └── cvssV4.ts │ ├── setupTests.ts │ ├── timezones.ts │ └── utils │ │ ├── __tests__ │ │ ├── array.test.ts │ │ ├── entitytype.test.ts │ │ ├── event.test.ts │ │ ├── id.test.ts │ │ ├── identity.test.ts │ │ ├── number.test.ts │ │ ├── object.test.ts │ │ └── string.test.ts │ │ ├── array.ts │ │ ├── entitytype.ts │ │ ├── event.ts │ │ ├── id.ts │ │ ├── identity.ts │ │ ├── number.ts │ │ ├── object.ts │ │ ├── severity.ts │ │ ├── string.ts │ │ └── trace.ts ├── index.tsx ├── setupTests.ts ├── testing.ts ├── version.ts ├── vite-env.d.ts └── web │ ├── App.tsx │ ├── Authorized.jsx │ ├── Routes.jsx │ ├── components │ ├── badge │ │ ├── Badge.jsx │ │ └── __tests__ │ │ │ └── Badge.test.jsx │ ├── bar │ │ ├── ComplianceBar.jsx │ │ ├── ComplianceStatusBar.jsx │ │ ├── ProgressBar.jsx │ │ ├── SeverityBar.tsx │ │ ├── StatusBar.jsx │ │ ├── Toolbar.jsx │ │ └── __tests__ │ │ │ ├── ComplianceStatusBar.test.jsx │ │ │ ├── ProgressBar.test.jsx │ │ │ ├── SeverityBar.test.jsx │ │ │ ├── StatusBar.test.jsx │ │ │ ├── Toolbar.test.jsx │ │ │ └── __snapshots__ │ │ │ ├── Toolbar.test.jsx.snap │ │ │ └── toolbar.test.jsx.snap │ ├── certinfo │ │ └── CertInfo.jsx │ ├── chart │ │ ├── Axis.jsx │ │ ├── Bar.jsx │ │ ├── Bubble.jsx │ │ ├── Donut.jsx │ │ ├── Group.jsx │ │ ├── HostsTopologyChart.tsx │ │ ├── Label.jsx │ │ ├── Legend.jsx │ │ ├── Line.jsx │ │ ├── Schedule.jsx │ │ ├── Svg.jsx │ │ ├── Tooltip.jsx │ │ ├── WordCloud.jsx │ │ ├── donut │ │ │ ├── Arc2d.jsx │ │ │ ├── Arc3d.jsx │ │ │ ├── Labels.jsx │ │ │ ├── Paths.jsx │ │ │ ├── Pie.jsx │ │ │ └── PropTypes.jsx │ │ └── utils │ │ │ ├── Arc.jsx │ │ │ ├── Constants.jsx │ │ │ ├── Path.jsx │ │ │ ├── Update.jsx │ │ │ └── __tests__ │ │ │ ├── Arc.test.jsx │ │ │ ├── Path.test.jsx │ │ │ ├── Update.test.jsx │ │ │ └── __snapshots__ │ │ │ ├── Arc.test.jsx.snap │ │ │ └── arc.test.jsx.snap │ ├── comment │ │ ├── Comment.jsx │ │ └── __tests__ │ │ │ └── Comment.test.jsx │ ├── conditionalRoute │ │ ├── ConditionalRoute.jsx │ │ └── __tests__ │ │ │ └── ConditionalRoute.test.jsx │ ├── dashboard │ │ ├── Controls.jsx │ │ ├── Dashboard.jsx │ │ ├── Registry.jsx │ │ ├── Utils.jsx │ │ ├── __tests__ │ │ │ └── Utils.test.jsx │ │ └── display │ │ │ ├── DataDisplay.tsx │ │ │ ├── DataDisplayIcons.tsx │ │ │ ├── DataTable.jsx │ │ │ ├── DataTableDisplay.jsx │ │ │ ├── Display.jsx │ │ │ ├── FilterSelection.jsx │ │ │ ├── __tests__ │ │ │ └── utils.test.js │ │ │ ├── createDisplay.jsx │ │ │ ├── created │ │ │ ├── CreatedDisplay.jsx │ │ │ └── CreatedTransform.jsx │ │ │ ├── cvss │ │ │ ├── CvssDisplay.jsx │ │ │ ├── CvssTableDisplay.jsx │ │ │ └── cvssTransform.js │ │ │ ├── severity │ │ │ ├── SeverityClassDisplay.tsx │ │ │ ├── SeverityClassTableDisplay.jsx │ │ │ ├── __tests__ │ │ │ │ └── utils.test.js │ │ │ ├── severityClassTransform.ts │ │ │ └── utils.ts │ │ │ ├── status │ │ │ └── StatusDisplay.jsx │ │ │ ├── utils.js │ │ │ └── withFilterSelection.jsx │ ├── date │ │ ├── DateTime.tsx │ │ └── __tests__ │ │ │ └── DateTime.test.jsx │ ├── dialog │ │ ├── CloseButton.jsx │ │ ├── ComposerContent.jsx │ │ ├── ConfirmationDialog.jsx │ │ ├── Container.jsx │ │ ├── Content.jsx │ │ ├── Dialog.jsx │ │ ├── DialogInlineNotification.jsx │ │ ├── Error.jsx │ │ ├── Footer.tsx │ │ ├── MultiStepFooter.jsx │ │ ├── SaveDialog.jsx │ │ ├── SaveDialogFooter.jsx │ │ ├── TwoButtonFooter.jsx │ │ └── __tests__ │ │ │ ├── CloseButton.test.jsx │ │ │ ├── ConfirmationDialog.test.jsx │ │ │ ├── Dialog.test.jsx │ │ │ ├── Error.test.jsx │ │ │ ├── MultiStepFooter.test.jsx │ │ │ ├── SaveDialogFooter.test.jsx │ │ │ └── TwoButtonFooter.test.jsx │ ├── error │ │ ├── ErrorBoundary.jsx │ │ ├── ErrorContainer.jsx │ │ ├── ErrorMessage.tsx │ │ ├── ErrorPanel.jsx │ │ ├── Message.tsx │ │ ├── MessageContainer.jsx │ │ └── __tests__ │ │ │ ├── ErrorBoundary.test.jsx │ │ │ ├── ErrorContainer.test.jsx │ │ │ ├── ErrorMessage.test.jsx │ │ │ └── ErrorPanel.test.jsx │ ├── folding │ │ ├── Folding.jsx │ │ └── __tests__ │ │ │ └── Folding.test.jsx │ ├── footnote │ │ ├── Footnote.jsx │ │ └── __tests__ │ │ │ ├── Footnote.test.jsx │ │ │ └── __snapshots__ │ │ │ ├── Footnote.test.jsx.snap │ │ │ └── footnote.test.jsx.snap │ ├── form │ │ ├── Button.tsx │ │ ├── Checkbox.tsx │ │ ├── DatePicker.tsx │ │ ├── Download.tsx │ │ ├── ErrorMarker.tsx │ │ ├── FileField.tsx │ │ ├── FormGroup.tsx │ │ ├── MultiSelect.tsx │ │ ├── NumberField.tsx │ │ ├── PasswordField.tsx │ │ ├── Radio.tsx │ │ ├── Select.tsx │ │ ├── Spinner.tsx │ │ ├── TextArea.tsx │ │ ├── TextField.tsx │ │ ├── TimeZoneSelect.tsx │ │ ├── ToggleButton.tsx │ │ ├── YesNoRadio.tsx │ │ ├── __tests__ │ │ │ ├── Button.test.tsx │ │ │ ├── Checkbox.test.tsx │ │ │ ├── Download.test.tsx │ │ │ ├── FileField.test.tsx │ │ │ ├── FormGroup.test.tsx │ │ │ ├── MultiSelect.test.tsx │ │ │ ├── NumberField.test.tsx │ │ │ ├── PasswordField.test.tsx │ │ │ ├── Radio.test.tsx │ │ │ ├── Select.test.tsx │ │ │ ├── Spinner.test.tsx │ │ │ ├── TextArea.test.tsx │ │ │ ├── TextField.test.tsx │ │ │ ├── TimeZoneSelect.test.tsx │ │ │ ├── ToggleButton.test.tsx │ │ │ ├── YesNoRadio.test.tsx │ │ │ ├── __snapshots__ │ │ │ │ ├── ToggleButton.test.jsx.snap │ │ │ │ ├── ToggleButton.test.tsx.snap │ │ │ │ └── togglebutton.test.jsx.snap │ │ │ ├── useClickHandler.test.tsx │ │ │ ├── useDownload.test.tsx │ │ │ ├── useFormValidation.test.tsx │ │ │ ├── useFormValues.test.tsx │ │ │ ├── useValueChange.test.tsx │ │ │ ├── withClickHandler.test.tsx │ │ │ └── withDownload.test.tsx │ │ ├── useClickHandler.ts │ │ ├── useDownload.ts │ │ ├── useFormValidation.ts │ │ ├── useFormValues.ts │ │ ├── useValueChange.tsx │ │ ├── withClickHandler.tsx │ │ └── withDownload.tsx │ ├── icon │ │ ├── CpeIcon.jsx │ │ ├── DeleteIcon.tsx │ │ ├── DynamicIcon.tsx │ │ ├── ExportIcon.tsx │ │ ├── FoldStateIcon.tsx │ │ ├── GreenboneApplianceLogo.tsx │ │ ├── Icon.tsx │ │ ├── ListIcon.jsx │ │ ├── ManualIcon.jsx │ │ ├── OsIcon.jsx │ │ ├── SolutionTypeIcon.jsx │ │ ├── TagsIcon.jsx │ │ ├── TrashDeleteIcon.jsx │ │ ├── TrashIcon.tsx │ │ ├── createIconComponents.tsx │ │ ├── index.tsx │ │ ├── svg │ │ │ ├── Enterprise_150.svg │ │ │ ├── Enterprise_400.svg │ │ │ ├── Enterprise_450.svg │ │ │ ├── Enterprise_5400.svg │ │ │ ├── Enterprise_600.svg │ │ │ ├── Enterprise_650.svg │ │ │ ├── Enterprise_6500.svg │ │ │ ├── Enterprise_CENO.svg │ │ │ ├── Enterprise_DECA.svg │ │ │ ├── Enterprise_EXA.svg │ │ │ ├── Enterprise_PETA.svg │ │ │ ├── Enterprise_TERA.svg │ │ │ ├── add_to_assets.svg │ │ │ ├── calendar.svg │ │ │ ├── cert_bund_adv.svg │ │ │ ├── clone.svg │ │ │ ├── config.svg │ │ │ ├── cpe.svg │ │ │ ├── cve.svg │ │ │ ├── cvss_calculator.svg │ │ │ ├── delta.svg │ │ │ ├── delta_second.svg │ │ │ ├── dfn_cert_adv.svg │ │ │ ├── dl_csv.svg │ │ │ ├── dl_deb.svg │ │ │ ├── dl_exe.svg │ │ │ ├── dl_key.svg │ │ │ ├── dl_rpm.svg │ │ │ ├── dl_svg.svg │ │ │ ├── export.svg │ │ │ ├── greenbone.svg │ │ │ ├── host.svg │ │ │ ├── ldap.svg │ │ │ ├── legend.svg │ │ │ ├── new.svg │ │ │ ├── new_note.svg │ │ │ ├── new_override.svg │ │ │ ├── new_ticket.svg │ │ │ ├── note.svg │ │ │ ├── nvt.svg │ │ │ ├── os.svg │ │ │ ├── override.svg │ │ │ ├── port_list.svg │ │ │ ├── provide_view.svg │ │ │ ├── radius.svg │ │ │ ├── remove_from_assets.svg │ │ │ ├── report.svg │ │ │ ├── report_format.svg │ │ │ ├── restore.svg │ │ │ ├── result.svg │ │ │ ├── role.svg │ │ │ ├── scanner.svg │ │ │ ├── sensor.svg │ │ │ ├── st_mitigate.svg │ │ │ ├── st_nonavailable.svg │ │ │ ├── st_unknown.svg │ │ │ ├── st_vendorfix.svg │ │ │ ├── st_willnotfix.svg │ │ │ ├── st_workaround.svg │ │ │ ├── target.svg │ │ │ ├── task.svg │ │ │ ├── ticket.svg │ │ │ ├── tlscertificate.svg │ │ │ ├── toggle3d.svg │ │ │ ├── trend_down.svg │ │ │ ├── trend_less.svg │ │ │ ├── trend_more.svg │ │ │ ├── trend_nochange.svg │ │ │ ├── trend_up.svg │ │ │ ├── vulnerability.svg │ │ │ └── wizard.svg │ │ └── test │ │ │ ├── DynamicIcon.test.tsx │ │ │ ├── Icon.test.jsx │ │ │ ├── SolutionTypeIcon.test.jsx │ │ │ └── createIconComponent.test.tsx │ ├── img │ │ ├── Greenbone.jsx │ │ ├── GreenboneLoginLogo.jsx │ │ ├── Img.jsx │ │ ├── Product.jsx │ │ └── __tests__ │ │ │ ├── Greenbone.test.jsx │ │ │ ├── GreenboneLoginLogo.test.jsx │ │ │ ├── Img.test.jsx │ │ │ ├── Product.test.jsx │ │ │ └── __snapshots__ │ │ │ ├── Greenbone.test.jsx.snap │ │ │ ├── GreenboneLoginLogo.test.jsx.snap │ │ │ ├── Img.test.jsx.snap │ │ │ ├── Product.test.jsx.snap │ │ │ ├── greenbone.test.jsx.snap │ │ │ ├── greenboneloginlogo.test.jsx.snap │ │ │ ├── img.test.jsx.snap │ │ │ └── product.test.jsx.snap │ ├── label │ │ ├── ComplianceState.tsx │ │ ├── Label.tsx │ │ ├── SeverityClass.tsx │ │ └── __tests__ │ │ │ └── SeverityClass.test.jsx │ ├── layout │ │ ├── AutoSize.jsx │ │ ├── Column.tsx │ │ ├── Divider.tsx │ │ ├── GlobalStyles.jsx │ │ ├── HorizontalSep.tsx │ │ ├── IconDivider.jsx │ │ ├── Layout.tsx │ │ ├── PageTitle.jsx │ │ ├── Row.tsx │ │ ├── __tests__ │ │ │ ├── HorizontalSep.test.jsx │ │ │ ├── Layout.test.jsx │ │ │ ├── PageTitle.test.jsx │ │ │ ├── __snapshots__ │ │ │ │ ├── HorizontalSep.test.jsx.snap │ │ │ │ ├── Layout.test.jsx.snap │ │ │ │ └── withLayout.test.jsx.snap │ │ │ └── withLayout.test.jsx │ │ └── withLayout.tsx │ ├── link │ │ ├── BlankLink.jsx │ │ ├── CertLink.jsx │ │ ├── CveLink.jsx │ │ ├── DetailsLink.jsx │ │ ├── ExternalLink.jsx │ │ ├── InnerLink.jsx │ │ ├── Link.jsx │ │ ├── ManualLink.jsx │ │ ├── ProtocolDocLink.jsx │ │ ├── Target.jsx │ │ └── __tests__ │ │ │ ├── BlankLink.test.jsx │ │ │ ├── CertLink.test.jsx │ │ │ ├── CveLink.test.jsx │ │ │ ├── DetailsLink.test.jsx │ │ │ ├── ExternalLink.test.jsx │ │ │ ├── InnerLink.test.jsx │ │ │ ├── Link.test.jsx │ │ │ ├── ManualLink.test.jsx │ │ │ ├── ProtocolDocLink.test.jsx │ │ │ ├── Target.test.jsx │ │ │ └── __snapshots__ │ │ │ ├── Target.test.jsx.snap │ │ │ └── target.test.jsx.snap │ ├── loading │ │ ├── Loading.jsx │ │ ├── Reload.jsx │ │ └── __tests__ │ │ │ ├── Loading.test.jsx │ │ │ └── Reload.test.jsx │ ├── menu │ │ ├── IconMenu.jsx │ │ ├── Menu.jsx │ │ ├── MenuEntry.tsx │ │ ├── MenuHelpEntry.jsx │ │ ├── MenuSection.jsx │ │ └── __tests__ │ │ │ ├── Menu.test.jsx │ │ │ └── MenuEntry.test.tsx │ ├── notification │ │ ├── DialogNotification.jsx │ │ ├── FeedSyncNotification │ │ │ ├── FeedSyncNotification.jsx │ │ │ ├── Helpers.jsx │ │ │ └── __tests__ │ │ │ │ ├── FeedSyncNotification.test.jsx │ │ │ │ └── Helpers.test.jsx │ │ ├── LicenseNotification.jsx │ │ ├── __tests__ │ │ │ ├── DialogNotification.test.jsx │ │ │ └── LicenseNotification.test.jsx │ │ ├── useDialogNotification.jsx │ │ └── withDialogNotifiaction.jsx │ ├── observer │ │ ├── LocationObserver.jsx │ │ └── SessionObserver.jsx │ ├── pagination │ │ └── Pagination.jsx │ ├── panel │ │ ├── Button.jsx │ │ ├── InfoPanel.jsx │ │ └── __tests__ │ │ │ ├── Button.test.jsx │ │ │ ├── InfoPanel.test.jsx │ │ │ └── __snapshots__ │ │ │ ├── Button.test.jsx.snap │ │ │ └── button.test.jsx.snap │ ├── portal │ │ ├── Portal.jsx │ │ └── __tests__ │ │ │ └── Portal.test.jsx │ ├── powerfilter │ │ ├── ApplyOverridesGroup.jsx │ │ ├── BooleanFilterGroup.jsx │ │ ├── ComplianceLevelsGroup.tsx │ │ ├── CreateNamedFilterGroup.jsx │ │ ├── Dialog.jsx │ │ ├── DialogPropTypes.jsx │ │ ├── FilterDialog.jsx │ │ ├── FilterSearchGroup.jsx │ │ ├── FilterStringGroup.jsx │ │ ├── FirstResultGroup.jsx │ │ ├── MinQodGroup.jsx │ │ ├── PowerFilter.jsx │ │ ├── RelationSelector.jsx │ │ ├── ResultsPerPageGroup.jsx │ │ ├── SeverityLevelsGroup.tsx │ │ ├── SeverityValuesGroup.jsx │ │ ├── SolutionTypeGroup.jsx │ │ ├── SortByGroup.jsx │ │ ├── TaskTrendGroup.jsx │ │ ├── TicketStatusGroup.jsx │ │ ├── __tests__ │ │ │ ├── ApplyOverridesGroup.test.jsx │ │ │ ├── ComplianceLevelsGroup.test.tsx │ │ │ ├── RelationSelector.test.jsx │ │ │ ├── SeverityLevelsGroup.test.tsx │ │ │ ├── SeverityValuesGroup.test.jsx │ │ │ ├── SolutionTypeGroup.test.jsx │ │ │ ├── SortByGroup.test.jsx │ │ │ ├── TaskTrendGroup.test.jsx │ │ │ ├── TicketStatusGroup.test.jsx │ │ │ └── __snapshots__ │ │ │ │ ├── booleanfiltergroup.jsx.snap │ │ │ │ ├── createnamedfiltergroup.jsx.snap │ │ │ │ ├── filtersearchgroup.jsx.snap │ │ │ │ ├── filterstringgroup.jsx.snap │ │ │ │ ├── firstresultgroup.jsx.snap │ │ │ │ ├── minqodgroup.jsx.snap │ │ │ │ └── resultsperpagegroup.jsx.snap │ │ ├── useFilterDialog.jsx │ │ ├── useFilterDialogSave.jsx │ │ └── withFilterDialog.jsx │ ├── provider │ │ ├── CapabilitiesProvider.tsx │ │ ├── GmpProvider.tsx │ │ ├── IconSizeProvider.tsx │ │ ├── LanguageProvider.tsx │ │ ├── LicenseProvider.jsx │ │ └── SubscriptionProvider.jsx │ ├── qod │ │ ├── Qod.jsx │ │ └── __tests__ │ │ │ ├── Qod.test.jsx │ │ │ └── __snapshots__ │ │ │ ├── Qod.test.jsx.snap │ │ │ └── qod.test.jsx.snap │ ├── searchbar │ │ ├── SearchBar.jsx │ │ └── __tests__ │ │ │ └── SearchBar.test.jsx │ ├── section │ │ ├── Header.tsx │ │ └── Section.tsx │ ├── sessionTimer │ │ └── SessionTimer.jsx │ ├── snackbar │ │ ├── Snackbar.jsx │ │ └── __tests__ │ │ │ ├── Snackbar.test.jsx │ │ │ └── __snapshots__ │ │ │ ├── Snackbar.test.jsx.snap │ │ │ └── snackbar.test.jsx.snap │ ├── sortable │ │ ├── EmptyRow.jsx │ │ ├── Grid.jsx │ │ ├── Item.jsx │ │ ├── Resizer.jsx │ │ └── Row.jsx │ ├── sortby │ │ └── SortBy.tsx │ ├── structure │ │ ├── Footer.jsx │ │ ├── Header.jsx │ │ ├── LanguageSwitch.tsx │ │ ├── Main.jsx │ │ ├── __tests__ │ │ │ ├── Footer.test.jsx │ │ │ ├── Header.test.jsx │ │ │ ├── LanguageSwitch.test.jsx │ │ │ ├── Main.test.jsx │ │ │ ├── __snapshots__ │ │ │ │ ├── Main.test.jsx.snap │ │ │ │ └── main.test.jsx.snap │ │ │ └── getLogo.test.jsx │ │ └── getLogo.jsx │ ├── tab │ │ ├── Tab.jsx │ │ ├── TabLayout.jsx │ │ ├── TabList.jsx │ │ ├── TabPanel.jsx │ │ ├── TabPanels.tsx │ │ ├── Tabs.tsx │ │ └── __tests__ │ │ │ └── TabPanels.test.tsx │ └── table │ │ ├── Body.jsx │ │ ├── Col.tsx │ │ ├── Data.tsx │ │ ├── DetailsTable.jsx │ │ ├── Footer.jsx │ │ ├── Head.tsx │ │ ├── Header.jsx │ │ ├── InfoTable.jsx │ │ ├── Row.jsx │ │ ├── SimpleTable.jsx │ │ ├── StripedTable.tsx │ │ ├── Table.tsx │ │ └── __tests__ │ │ └── DetailsTable.test.jsx │ ├── entities │ ├── Actions.jsx │ ├── BulkTags.jsx │ ├── Container.jsx │ ├── EntityNameTableData.jsx │ ├── FilterProvider.jsx │ ├── Footer.jsx │ ├── Header.jsx │ ├── Page.jsx │ ├── RowDetailsToggle.jsx │ ├── Selection.jsx │ ├── Table.jsx │ ├── TagsDialog.jsx │ ├── __tests__ │ │ ├── BulkTags.test.jsx │ │ ├── Container.test.jsx │ │ ├── FilterProvider.test.jsx │ │ ├── Footer.test.jsx │ │ ├── RowDetailsToggle.test.jsx │ │ ├── TagsDialog.test.jsx │ │ └── useEntitiesReloadInterval.test.jsx │ ├── useEntitiesReloadInterval.js │ ├── withEntitiesActions.jsx │ ├── withEntitiesContainer.jsx │ └── withRowDetails.jsx │ ├── entity │ ├── Block.jsx │ ├── Box.jsx │ ├── Container.jsx │ ├── EntityComponent.jsx │ ├── EntityInfo.tsx │ ├── EntityPage.tsx │ ├── Link.jsx │ ├── Note.jsx │ ├── Override.jsx │ ├── Page.jsx │ ├── Permissions.jsx │ ├── Tab.jsx │ ├── Tags.jsx │ ├── __tests__ │ │ ├── Block.test.jsx │ │ ├── Box.test.jsx │ │ ├── EntityComponent.test.jsx │ │ ├── Info.test.jsx │ │ ├── Link.test.jsx │ │ ├── Note.test.jsx │ │ ├── Override.test.jsx │ │ └── navigation.tests.js │ ├── hooks │ │ ├── __tests__ │ │ │ ├── actionFunction.test.js │ │ │ ├── usEntityClone.test.js │ │ │ ├── useActiveTab.test.ts │ │ │ ├── useEntityDelete.test.js │ │ │ ├── useEntityDownload.test.js │ │ │ └── useEntitySave.test.js │ │ ├── actionFunction.ts │ │ ├── useActiveTab.ts │ │ ├── useEntityClone.ts │ │ ├── useEntityDelete.ts │ │ ├── useEntityDownload.ts │ │ └── useEntitySave.ts │ ├── icon │ │ ├── CloneIcon.tsx │ │ ├── CreateIcon.tsx │ │ ├── DeleteIcon.tsx │ │ ├── EditIcon.tsx │ │ ├── ObserverIcon.tsx │ │ ├── TrashIcon.tsx │ │ ├── VerifyIcon.tsx │ │ └── __tests__ │ │ │ ├── CloneIcon.test.jsx │ │ │ ├── CreateIcon.test.jsx │ │ │ ├── DeleteIcon.test.jsx │ │ │ ├── EditIcon.test.jsx │ │ │ ├── ObserverIcon.test.jsx │ │ │ ├── TrashIcon.test.jsx │ │ │ └── VerifyIcon.test.jsx │ ├── navigation.ts │ └── withEntityContainer.jsx │ ├── hooks │ ├── __tests__ │ │ ├── useCapabilities.test.jsx │ │ ├── useFilterSortBy.test.jsx │ │ ├── useGmp.test.jsx │ │ ├── useIconSize.test.jsx │ │ ├── useInstanceVariable.test.tsx │ │ ├── useLanguage.test.tsx │ │ ├── useLoadCapabilities.test.jsx │ │ ├── useManualURL.test.jsx │ │ ├── usePageFilter.test.jsx │ │ ├── usePagination.test.jsx │ │ ├── usePreviousValue.test.jsx │ │ ├── useReload.test.jsx │ │ ├── useSelection.test.jsx │ │ ├── useShallowEqualSelector.test.jsx │ │ ├── useTiming.test.jsx │ │ ├── useTranslation.test.jsx │ │ ├── useUserName.test.jsx │ │ ├── useUserSessionTimeout.test.jsx │ │ └── useUserTimezone.test.jsx │ ├── useCapabilities.ts │ ├── useFilterSortBy.js │ ├── useGmp.ts │ ├── useIconSize.ts │ ├── useInstanceVariable.ts │ ├── useLanguage.ts │ ├── useLicense.js │ ├── useLoadCapabilities.jsx │ ├── useManualURL.js │ ├── usePageFilter.js │ ├── usePagination.js │ ├── usePreviousValue.js │ ├── useReload.js │ ├── useSelection.js │ ├── useShallowEqualSelector.ts │ ├── useTiming.js │ ├── useTranslation.ts │ ├── useUserIsLoggedIn.js │ ├── useUserName.js │ ├── useUserSessionTimeout.js │ ├── useUserTimezone.ts │ └── withLanguage.tsx │ ├── pages │ ├── NotFoundPage.jsx │ ├── Omp.jsx │ ├── Page.jsx │ ├── __mocks__ │ │ └── CurrentSettings.js │ ├── alerts │ │ ├── AlembavFireMethodPart.jsx │ │ ├── AlertComponent.jsx │ │ ├── Condition.jsx │ │ ├── ContentComposerDialog.jsx │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── EmailMethodPart.jsx │ │ ├── Event.jsx │ │ ├── FilterCountChangedConditionPart.jsx │ │ ├── FilterCountLeastConditionPart.jsx │ │ ├── FilterDialog.jsx │ │ ├── HttpMethodPart.jsx │ │ ├── ListPage.jsx │ │ ├── Method.jsx │ │ ├── Row.jsx │ │ ├── ScpMethodPart.jsx │ │ ├── SecInfoEventPart.jsx │ │ ├── SendMethodPart.jsx │ │ ├── SeverityChangedConditionPart.jsx │ │ ├── SeverityLeastConditionPart.jsx │ │ ├── SmbMethodPart.jsx │ │ ├── SnmpMethodPart.jsx │ │ ├── SourceFireMethodPart.jsx │ │ ├── StartTaskMethodPart.jsx │ │ ├── Table.jsx │ │ ├── TaskEventPart.jsx │ │ ├── TicketEventPart.jsx │ │ ├── TippingPointMethodPart.jsx │ │ ├── VeriniceMethodPart.jsx │ │ └── __tests__ │ │ │ ├── DetailsPage.test.jsx │ │ │ └── ListPage.test.jsx │ ├── audits │ │ ├── Actions.jsx │ │ ├── AuditComponent.jsx │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ └── __tests__ │ │ │ ├── Actions.test.jsx │ │ │ ├── Details.test.jsx │ │ │ ├── DetailsPage.test.jsx │ │ │ ├── ListPage.test.jsx │ │ │ ├── Row.test.jsx │ │ │ └── Table.test.jsx │ ├── certbund │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ └── dashboard │ │ │ ├── CreatedDisplay.jsx │ │ │ ├── CvssDisplay.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── SeverityClassDisplay.jsx │ │ │ └── index.jsx │ ├── cpes │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ ├── __tests__ │ │ │ ├── DetailsPage.test.jsx │ │ │ └── ListPage.test.jsx │ │ └── dashboard │ │ │ ├── CreatedDisplay.jsx │ │ │ ├── CvssDisplay.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── SeverityClassDisplay.jsx │ │ │ └── index.jsx │ ├── credentials │ │ ├── CredentialsComponent.jsx │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── DownloadIcon.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ └── __tests__ │ │ │ ├── DetailsPage.test.jsx │ │ │ ├── Dialog.test.jsx │ │ │ └── ListPage.test.jsx │ ├── cves │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ ├── __tests__ │ │ │ ├── DetailsPage.test.jsx │ │ │ ├── ListPage.test.jsx │ │ │ ├── Row.test.jsx │ │ │ └── Table.test.jsx │ │ └── dashboard │ │ │ ├── CreatedDisplay.jsx │ │ │ ├── CvssDisplay.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── SeverityClassDisplay.jsx │ │ │ └── index.jsx │ ├── dfncert │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ └── dashboard │ │ │ ├── CreatedDisplay.jsx │ │ │ ├── CvssDisplay.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── SeverityClassDisplay.jsx │ │ │ └── index.jsx │ ├── extras │ │ ├── CvssCalculatorPage.jsx │ │ ├── FeedStatusPage.jsx │ │ ├── TrashActions.jsx │ │ ├── TrashCanPage.jsx │ │ ├── __tests__ │ │ │ ├── CvssCalculatorPage.test.jsx │ │ │ ├── FeedStatusPage.test.jsx │ │ │ └── TrashCanPage.test.jsx │ │ └── cvssV4 │ │ │ ├── CvssV4Calculator.jsx │ │ │ ├── Metrics.jsx │ │ │ ├── MetricsGroups.jsx │ │ │ ├── __tests__ │ │ │ ├── Metrics.test.jsx │ │ │ └── cvssV4Calculator.test.jsx │ │ │ └── cvssConfig.js │ ├── filters │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterComponent.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ └── Table.jsx │ ├── groups │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── GroupComponent.jsx │ │ ├── Header.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ └── Table.jsx │ ├── help │ │ ├── About.jsx │ │ └── __tests__ │ │ │ └── About.test.jsx │ ├── hosts │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── HostComponent.jsx │ │ ├── Identifiers.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ ├── __tests__ │ │ │ ├── DetailsPage.test.jsx │ │ │ └── ListPage.test.jsx │ │ └── dashboard │ │ │ ├── CvssDisplay.jsx │ │ │ ├── HostsTopologyDisplay.jsx │ │ │ ├── HostsVulnScoreDisplay.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── ModifiedDisplay.jsx │ │ │ ├── ModifiedHighDisplay.jsx │ │ │ ├── SeverityClassDisplay.jsx │ │ │ └── index.jsx │ ├── ldap │ │ ├── LdapDialog.tsx │ │ ├── LdapPage.tsx │ │ └── __tests__ │ │ │ └── LdapDialog.test.tsx │ ├── login │ │ ├── LoginForm.jsx │ │ ├── LoginPage.tsx │ │ ├── __tests__ │ │ │ ├── LoginForm.test.jsx │ │ │ └── LoginPage.test.jsx │ │ └── notifications │ │ │ ├── CommunityFeedUsageNotification.tsx │ │ │ └── __tests__ │ │ │ └── CommunityFeedUsageNotification.test.tsx │ ├── notes │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── NoteComponent.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ ├── __tests__ │ │ │ ├── DetailsPage.test.jsx │ │ │ └── ListPage.test.jsx │ │ └── dashboard │ │ │ ├── ActiveDaysDisplay.jsx │ │ │ ├── CreatedDisplay.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── WordCloudDisplay.jsx │ │ │ └── index.jsx │ ├── nvts │ │ ├── Component.jsx │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── NvtPreference.jsx │ │ ├── Preferences.jsx │ │ ├── Preformatted.jsx │ │ ├── References.jsx │ │ ├── Row.jsx │ │ ├── Solution.jsx │ │ ├── Table.jsx │ │ ├── __tests__ │ │ │ ├── DetailsPage.test.jsx │ │ │ ├── ListPage.test.jsx │ │ │ ├── NvtPreference.test.jsx │ │ │ └── Row.test.jsx │ │ └── dashboard │ │ │ ├── CreatedDisplay.jsx │ │ │ ├── CvssDisplay.jsx │ │ │ ├── FamilyDisplay.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── QodDisplay.jsx │ │ │ ├── QodTypeDisplay.jsx │ │ │ ├── SeverityClassDisplay.jsx │ │ │ └── index.jsx │ ├── operatingsystems │ │ ├── Component.jsx │ │ ├── DetailsPage.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ └── dashboard │ │ │ ├── CvssDisplay.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── SeverityClassDisplay.jsx │ │ │ ├── VulnScoreDisplay.jsx │ │ │ └── index.jsx │ ├── overrides │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── OverrideComponent.jsx │ │ ├── Row.tsx │ │ ├── Table.jsx │ │ ├── __tests__ │ │ │ ├── DetailsPage.test.jsx │ │ │ └── ListPage.test.jsx │ │ └── dashboard │ │ │ ├── ActiveDaysDisplay.jsx │ │ │ ├── CreatedDisplay.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── WordCloudDisplay.jsx │ │ │ └── index.jsx │ ├── performance │ │ ├── PerformancePage.tsx │ │ ├── PerformanceReport.tsx │ │ ├── StartEndTimeSelection.tsx │ │ ├── __tests__ │ │ │ ├── PerformanceReport.test.tsx │ │ │ ├── StartEndTimeSelection.test.jsx │ │ │ └── durations.test.ts │ │ └── durations.ts │ ├── permissions │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── MultipleDialog.jsx │ │ ├── PermissionsComponent.jsx │ │ ├── Row.jsx │ │ └── Table.jsx │ ├── policies │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── Header.jsx │ │ ├── ListPage.jsx │ │ ├── PoliciesComponent.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ └── __tests__ │ │ │ ├── Details.test.jsx │ │ │ ├── DetailsPage.test.jsx │ │ │ ├── Dialog.test.jsx │ │ │ ├── ListPage.test.jsx │ │ │ ├── Row.test.jsx │ │ │ └── Table.test.jsx │ ├── portlists │ │ ├── Details.tsx │ │ ├── DetailsPage.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── PortListComponent.tsx │ │ ├── PortListDialog.tsx │ │ ├── PortListImportDialog.tsx │ │ ├── PortRangeDialog.tsx │ │ ├── PortRangesTable.tsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ └── __tests__ │ │ │ ├── PortListComponent.test.jsx │ │ │ └── PortRangeDialog.test.jsx │ ├── radius │ │ ├── RadiusDialog.tsx │ │ ├── RadiusPage.tsx │ │ └── __tests__ │ │ │ ├── RadiusDialog.test.tsx │ │ │ └── RadiusPage.test.tsx │ ├── reportconfigs │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── ReportConfigsComponent.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ ├── __mocks__ │ │ │ ├── MockReportConfig.jsx │ │ │ └── MockReportFormats.jsx │ │ └── __tests__ │ │ │ ├── Component.test.jsx │ │ │ ├── Details.test.jsx │ │ │ ├── DetailsPage.test.jsx │ │ │ ├── Dialog.test.jsx │ │ │ ├── ListPage.test.jsx │ │ │ ├── Row.test.jsx │ │ │ └── Table.test.jsx │ ├── reportformats │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── ReportFormatComponent.jsx │ │ ├── Row.jsx │ │ └── Table.jsx │ ├── reports │ │ ├── AuditDeltaDetailsPage.jsx │ │ ├── AuditDetailsContent.jsx │ │ ├── AuditDetailsPage.jsx │ │ ├── AuditFilterDialog.jsx │ │ ├── AuditReportRow.jsx │ │ ├── AuditReportsListPage.jsx │ │ ├── AuditReportsTable.jsx │ │ ├── DeltaDetailsContent.jsx │ │ ├── DeltaDetailsPage.jsx │ │ ├── DeltaResultsFilterGroup.jsx │ │ ├── DetailsContent.jsx │ │ ├── DetailsFilterDialog.jsx │ │ ├── DetailsPage.jsx │ │ ├── DownloadReportDialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ImportDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ ├── ThresholdMessage.jsx │ │ ├── TriggerAlertDialog.jsx │ │ ├── __mocks__ │ │ │ ├── MockAuditDeltaReport.jsx │ │ │ ├── MockAuditReport.jsx │ │ │ ├── MockDeltaReport.jsx │ │ │ └── MockReport.jsx │ │ ├── __tests__ │ │ │ ├── AuditDeltaDetailsPage.test.jsx │ │ │ ├── AuditDetailsContent.test.jsx │ │ │ ├── AuditFilterDialog.test.jsx │ │ │ ├── AuditReportRow.test.jsx │ │ │ ├── AuditReportsListPage.test.jsx │ │ │ ├── DeltaDetailsContent.test.jsx │ │ │ ├── DetailsContent.test.jsx │ │ │ └── DetailsFilterDialog.test.jsx │ │ ├── auditdashboard │ │ │ ├── Loaders.jsx │ │ │ ├── StatusDisplay.jsx │ │ │ └── index.jsx │ │ ├── dashboard │ │ │ ├── CvssDisplay.jsx │ │ │ ├── HighResultsDisplay.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── SeverityClassDisplay.jsx │ │ │ └── index.jsx │ │ └── details │ │ │ ├── AlertActions.jsx │ │ │ ├── ApplicationsTab.jsx │ │ │ ├── ApplicationsTable.jsx │ │ │ ├── AuditThresholdPanel.jsx │ │ │ ├── ClosedCvesTab.jsx │ │ │ ├── ClosedCvesTable.jsx │ │ │ ├── CvesTab.jsx │ │ │ ├── CvesTable.jsx │ │ │ ├── DeltaResultsTab.jsx │ │ │ ├── EmptyReport.jsx │ │ │ ├── EmptyResultsReport.jsx │ │ │ ├── ErrorsTab.jsx │ │ │ ├── ErrorsTable.jsx │ │ │ ├── HostsTab.jsx │ │ │ ├── HostsTable.jsx │ │ │ ├── OperatingSystemsTab.jsx │ │ │ ├── OperatingSystemsTable.jsx │ │ │ ├── PortsTab.jsx │ │ │ ├── PortsTable.jsx │ │ │ ├── ReportEntitiesContainer.jsx │ │ │ ├── ReportPanel.jsx │ │ │ ├── ResultsTab.jsx │ │ │ ├── Summary.jsx │ │ │ ├── TabTitle.jsx │ │ │ ├── ThresholdPanel.jsx │ │ │ ├── TlsCertificatesTab.jsx │ │ │ ├── TlsCertificatesTable.jsx │ │ │ ├── ToolbarIcons.jsx │ │ │ └── __tests__ │ │ │ ├── ApplicationsTab.test.jsx │ │ │ ├── ClosedCvesTab.test.jsx │ │ │ ├── CvesTab.test.jsx │ │ │ ├── DeltaResultsTab.test.jsx │ │ │ ├── EmptyReport.test.jsx │ │ │ ├── EmptyResultsReport.test.jsx │ │ │ ├── ErrorsTab.test.jsx │ │ │ ├── HostsTab.test.jsx │ │ │ ├── OperatingSystemsTab.test.jsx │ │ │ ├── PortsTab.test.jsx │ │ │ ├── ResultsTab.test.jsx │ │ │ ├── Summary.test.jsx │ │ │ ├── ThresholdPanel.test.jsx │ │ │ ├── TlsCertificatesTab.test.jsx │ │ │ └── ToolbarIcons.test.jsx │ ├── results │ │ ├── Delta.jsx │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Diff.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ ├── __tests__ │ │ │ ├── DetailsPage.test.jsx │ │ │ ├── Diff.test.jsx │ │ │ ├── ListPage.test.jsx │ │ │ └── Row.test.jsx │ │ └── dashboard │ │ │ ├── CvssDisplay.jsx │ │ │ ├── DescriptionWordCloudDisplay.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── SeverityClassDisplay.jsx │ │ │ ├── WordCloudDisplay.jsx │ │ │ └── index.jsx │ ├── roles │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── RoleComponent.jsx │ │ ├── Row.jsx │ │ └── Table.jsx │ ├── scanconfigs │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── EditConfigFamilyDialog.jsx │ │ ├── EditDialog.jsx │ │ ├── EditNvtDetailsDialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── Header.jsx │ │ ├── ImportDialog.jsx │ │ ├── ListPage.jsx │ │ ├── NvtFamilies.jsx │ │ ├── NvtPreferences.jsx │ │ ├── Row.jsx │ │ ├── ScanConfigComponent.jsx │ │ ├── ScannerPreferences.jsx │ │ ├── Settings.jsx │ │ ├── Table.jsx │ │ ├── Trend.jsx │ │ └── __tests__ │ │ │ ├── Details.test.jsx │ │ │ ├── DetailsPage.test.jsx │ │ │ ├── Dialog.test.jsx │ │ │ ├── EditConfigFamilyDialog.test.jsx │ │ │ ├── EditDialog.test.jsx │ │ │ ├── EditNvtDetailsDialog.test.jsx │ │ │ ├── ListPage.test.jsx │ │ │ ├── Row.test.jsx │ │ │ ├── Table.test.jsx │ │ │ └── Trend.test.jsx │ ├── scanners │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── ScannerComponent.jsx │ │ ├── Table.jsx │ │ └── __tests__ │ │ │ └── Dialog.test.jsx │ ├── schedules │ │ ├── DaySelect.jsx │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── MonthDaysSelect.jsx │ │ ├── Render.jsx │ │ ├── Row.jsx │ │ ├── ScheduleComponent.jsx │ │ ├── Table.jsx │ │ ├── TimeUnitSelect.jsx │ │ ├── WeekdaySelect.jsx │ │ └── __tests__ │ │ │ ├── DetailsPage.test.jsx │ │ │ ├── Dialog.test.jsx │ │ │ └── ListPage.test.jsx │ ├── start │ │ ├── ConfirmRemoveDialog.jsx │ │ ├── Dashboard.jsx │ │ ├── EditDashboardDialog.jsx │ │ ├── NewDashboardDialog.jsx │ │ ├── Page.jsx │ │ └── __tests__ │ │ │ └── Page.test.jsx │ ├── tags │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── ResourceList.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ └── TagsComponent.jsx │ ├── targets │ │ ├── Component.jsx │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ └── __tests__ │ │ │ ├── Details.test.jsx │ │ │ ├── DetailsPage.test.jsx │ │ │ ├── Dialog.test.jsx │ │ │ ├── ListPage.test.jsx │ │ │ └── Row.test.jsx │ ├── tasks │ │ ├── Actions.jsx │ │ ├── AddResultsToAssetsGroup.jsx │ │ ├── AutoDeleteReportsGroup.jsx │ │ ├── Component.jsx │ │ ├── ContainerDialog.jsx │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Status.jsx │ │ ├── Table.jsx │ │ ├── Task.jsx │ │ ├── Trend.jsx │ │ ├── __tests__ │ │ │ ├── Actions.test.jsx │ │ │ ├── AutoDeleteReportsGroup.test.jsx │ │ │ ├── ContainerDialog.test.jsx │ │ │ ├── Details.test.jsx │ │ │ ├── DetailsPage.test.jsx │ │ │ ├── Dialog.test.jsx │ │ │ ├── ListPage.test.jsx │ │ │ ├── Row.test.jsx │ │ │ ├── Status.test.jsx │ │ │ ├── Table.test.jsx │ │ │ └── Trend.test.jsx │ │ ├── dashboard │ │ │ ├── CvssDisplay.jsx │ │ │ ├── HighResults.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── MostHighResults.jsx │ │ │ ├── SchedulesDisplay.jsx │ │ │ ├── SeverityClassDisplay.jsx │ │ │ ├── StatusDisplay.jsx │ │ │ └── index.jsx │ │ └── icons │ │ │ ├── ImportReportIcon.jsx │ │ │ ├── NewIconMenu.jsx │ │ │ ├── ResumeIcon.jsx │ │ │ ├── ScheduleIcon.jsx │ │ │ ├── StartIcon.jsx │ │ │ ├── StopIcon.jsx │ │ │ ├── TaskIconsWithSync.jsx │ │ │ └── __tests__ │ │ │ ├── NewIconMenu.test.jsx │ │ │ ├── ResumeIcon.test.jsx │ │ │ ├── StartIcon.test.jsx │ │ │ ├── StopIcon.test.jsx │ │ │ └── TaskIconsWithSync.test.jsx │ ├── tickets │ │ ├── CreateDialog.jsx │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── EditDialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Table.jsx │ │ ├── TicketComponent.jsx │ │ ├── __tests__ │ │ │ ├── CreateDialog.test.jsx │ │ │ └── EditDialog.test.jsx │ │ ├── dashboard │ │ │ ├── CreatedDisplay.jsx │ │ │ ├── Loaders.jsx │ │ │ ├── StatusDisplay.jsx │ │ │ ├── UsersAssignedDisplay.jsx │ │ │ └── index.jsx │ │ └── validationrules.jsx │ ├── tlscertificates │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ ├── TlsCertificateComponent.jsx │ │ ├── __tests__ │ │ │ ├── DetailsPage.test.jsx │ │ │ ├── ListPage.test.jsx │ │ │ ├── Row.test.jsx │ │ │ └── Table.test.jsx │ │ └── dashboard │ │ │ ├── Loaders.jsx │ │ │ ├── ModifiedDisplay.jsx │ │ │ ├── TimeStatusDisplay.jsx │ │ │ └── index.jsx │ ├── users │ │ ├── ConfirmDeleteDialog.jsx │ │ ├── Details.jsx │ │ ├── DetailsPage.jsx │ │ ├── Dialog.jsx │ │ ├── FilterDialog.jsx │ │ ├── Header.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ └── UserComponent.jsx │ ├── usersettings │ │ ├── DefaultsPart.jsx │ │ ├── Dialog.jsx │ │ ├── FilterPart.jsx │ │ ├── GeneralPart.jsx │ │ ├── SeverityPart.jsx │ │ ├── UserSettingsPage.jsx │ │ └── validationrules.jsx │ └── vulns │ │ ├── FilterDialog.jsx │ │ ├── ListPage.jsx │ │ ├── Row.jsx │ │ ├── Table.jsx │ │ └── dashboard │ │ ├── CvssDisplay.jsx │ │ ├── HostsDisplay.jsx │ │ ├── Loaders.jsx │ │ ├── SeverityClassDisplay.jsx │ │ └── index.jsx │ ├── setupTests.ts │ ├── store │ ├── __tests__ │ │ └── utils.test.js │ ├── actions.js │ ├── dashboard │ │ ├── data │ │ │ ├── __tests__ │ │ │ │ ├── actions.test.js │ │ │ │ ├── loader.test.js │ │ │ │ ├── reducers.test.js │ │ │ │ └── selectors.test.js │ │ │ ├── actions.js │ │ │ ├── loader.js │ │ │ ├── reducers.js │ │ │ └── selectors.js │ │ └── settings │ │ │ ├── __tests__ │ │ │ ├── actions.test.js │ │ │ ├── reducers.test.js │ │ │ └── selectors.test.js │ │ │ ├── actions.js │ │ │ ├── reducers.js │ │ │ └── selectors.js │ ├── entities │ │ ├── __tests__ │ │ │ ├── alerts.test.js │ │ │ ├── audits.test.js │ │ │ ├── certbund.test.js │ │ │ ├── cpes.test.js │ │ │ ├── credentials.test.js │ │ │ ├── cves.test.js │ │ │ ├── dfncerts.test.js │ │ │ ├── filters.test.js │ │ │ ├── groups.test.js │ │ │ ├── hosts.test.js │ │ │ ├── notes.test.js │ │ │ ├── nvts.test.js │ │ │ ├── operatingsystems.test.js │ │ │ ├── overrides.test.js │ │ │ ├── permissions.test.js │ │ │ ├── policies.test.js │ │ │ ├── portlists.test.js │ │ │ ├── reducers.test.js │ │ │ ├── reportformats.test.js │ │ │ ├── reports.test.js │ │ │ ├── results.test.js │ │ │ ├── roles.test.js │ │ │ ├── scanconfigs.test.js │ │ │ ├── scanners.test.js │ │ │ ├── schedules.test.js │ │ │ ├── tags.test.js │ │ │ ├── targets.test.js │ │ │ ├── tasks.test.js │ │ │ ├── tickets.test.js │ │ │ ├── users.test.js │ │ │ └── vulns.test.js │ │ ├── alerts.js │ │ ├── auditreports.js │ │ ├── audits.js │ │ ├── certbund.js │ │ ├── cpes.js │ │ ├── credentials.js │ │ ├── cves.js │ │ ├── dfncerts.js │ │ ├── filters.js │ │ ├── groups.js │ │ ├── hosts.js │ │ ├── notes.js │ │ ├── nvts.js │ │ ├── operatingsystems.js │ │ ├── overrides.js │ │ ├── permissions.js │ │ ├── policies.js │ │ ├── portlists.js │ │ ├── reducers.js │ │ ├── report │ │ │ ├── __tests__ │ │ │ │ ├── actions.test.js │ │ │ │ ├── reducers.test.js │ │ │ │ └── selectors.test.js │ │ │ ├── actions.js │ │ │ ├── reducers.js │ │ │ └── selectors.js │ │ ├── reportconfigs.js │ │ ├── reportformats.js │ │ ├── reports.js │ │ ├── reports │ │ │ ├── __tests__ │ │ │ │ └── reducers.test.js │ │ │ └── reducers.js │ │ ├── results.js │ │ ├── roles.js │ │ ├── scanconfigs.js │ │ ├── scanners.js │ │ ├── schedules.js │ │ ├── tags.js │ │ ├── targets.js │ │ ├── tasks.js │ │ ├── tickets.js │ │ ├── tlscertificates.js │ │ ├── users.js │ │ ├── utils │ │ │ ├── __tests__ │ │ │ │ ├── actions.test.js │ │ │ │ ├── main.test.js │ │ │ │ ├── reducers.test.js │ │ │ │ └── selectors.test.js │ │ │ ├── actions.js │ │ │ ├── main.js │ │ │ ├── reducers.js │ │ │ ├── selectors.js │ │ │ └── testing.js │ │ └── vulns.js │ ├── feedStatus │ │ ├── __tests__ │ │ │ ├── actions.test.js │ │ │ └── reducers.test.js │ │ ├── actions.js │ │ └── reducers.js │ ├── index.js │ ├── pages │ │ ├── __tests__ │ │ │ ├── actions.test.js │ │ │ ├── reducers.test.js │ │ │ └── selectors.test.js │ │ ├── actions.js │ │ ├── reducers.js │ │ └── selectors.js │ ├── reducers.js │ ├── usersettings │ │ ├── __tests__ │ │ │ ├── actions.test.js │ │ │ ├── reducers.test.js │ │ │ └── selectors.test.js │ │ ├── actions.js │ │ ├── defaultfilters │ │ │ ├── __tests__ │ │ │ │ ├── actions.test.js │ │ │ │ ├── reducers.test.js │ │ │ │ └── selectors.test.js │ │ │ ├── actions.js │ │ │ ├── reducers.js │ │ │ └── selectors.js │ │ ├── defaults │ │ │ ├── __tests__ │ │ │ │ ├── actions.test.js │ │ │ │ ├── reducers.test.js │ │ │ │ └── selectors.test.js │ │ │ ├── actions.js │ │ │ ├── reducers.js │ │ │ └── selectors.js │ │ ├── reducers.js │ │ └── selectors.js │ └── utils.js │ ├── testing │ ├── __tests__ │ │ └── screen.test.ts │ ├── actions.ts │ ├── allQueries.ts │ ├── customQueries.ts │ ├── helpers.ts │ ├── index.ts │ ├── screen.ts │ └── within.ts │ ├── utils │ ├── Cert.jsx │ ├── Compose.jsx │ ├── Cpe.jsx │ ├── Languages.jsx │ ├── Os.jsx │ ├── PropTypes.jsx │ ├── Render.jsx │ ├── SelectionType.jsx │ ├── Sort.jsx │ ├── State.jsx │ ├── Testing.tsx │ ├── Theme.tsx │ ├── Urls.jsx │ ├── Warning.jsx │ ├── __tests__ │ │ ├── Render.test.jsx │ │ ├── Sort.test.jsx │ │ ├── severity.tests.ts │ │ └── timePickerHelpers.test.js │ ├── applianceData.js │ ├── severity.ts │ ├── timePickerHelpers.js │ ├── userSettingTimeDateFormatters.js │ ├── withCapabilities.jsx │ ├── withComponentDefaults.jsx │ ├── withGmp.jsx │ ├── withPrefix.jsx │ ├── withRouter.jsx │ ├── withSubscription.jsx │ └── withTranslation.tsx │ └── wizard │ ├── AdvancedTaskWizard.jsx │ ├── ModifyTaskWizard.jsx │ ├── TaskWizard.jsx │ └── __tests__ │ ├── AdvancedTaskWizard.test.jsx │ └── ModifyTaskWizard.test.jsx ├── tsconfig.json ├── vite.config.ts └── vitest.projects.ts /.dockerignore: -------------------------------------------------------------------------------- 1 | build/ 2 | node_modules/ 3 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # default reviewers 2 | * @greenbone/gea 3 | 4 | # dev ops 5 | .github/ @greenbone/devops @greenbone/gea 6 | .docker/ @greenbone/devops @greenbone/gea 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Greenbone Community Forum 4 | url: https://community.greenbone.net/c/gse 5 | about: Please ask and answer questions here. 6 | -------------------------------------------------------------------------------- /.github/workflows/container.yml: -------------------------------------------------------------------------------- 1 | name: Build and Push to Container Image 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | tags: 8 | - 'v24*' 9 | pull_request: 10 | branches: 11 | - main 12 | workflow_dispatch: 13 | inputs: 14 | ref-name: 15 | type: string 16 | description: 'The ref to build a container image from. For example a tag v23.0.0.' 17 | required: true 18 | 19 | concurrency: 20 | group: ${{ github.workflow }}-${{ github.ref }} 21 | cancel-in-progress: true 22 | 23 | jobs: 24 | build: 25 | name: Build and Push to Greenbone Registry 26 | uses: greenbone/workflows/.github/workflows/container-build-push-2nd-gen.yml@main 27 | with: 28 | image-url: community/gsa 29 | image-labels: | 30 | org.opencontainers.image.vendor=Greenbone 31 | org.opencontainers.image.base.name=greenbone/gsad 32 | ref-name: ${{ inputs.ref-name }} 33 | secrets: inherit 34 | -------------------------------------------------------------------------------- /.github/workflows/conventional-commits.yml: -------------------------------------------------------------------------------- 1 | name: Conventional Commits 2 | 3 | on: 4 | pull_request_target: 5 | 6 | permissions: 7 | pull-requests: write 8 | contents: read 9 | 10 | concurrency: 11 | group: ${{ github.workflow }}-${{ github.ref }} 12 | cancel-in-progress: true 13 | 14 | jobs: 15 | conventional-commits: 16 | name: Conventional Commits 17 | runs-on: ubuntu-latest 18 | steps: 19 | - name: Report Conventional Commits 20 | uses: greenbone/actions/conventional-commits@v3 21 | -------------------------------------------------------------------------------- /.github/workflows/dependency-review.yml: -------------------------------------------------------------------------------- 1 | name: 'Dependency Review' 2 | on: [pull_request] 3 | 4 | concurrency: 5 | group: ${{ github.workflow }}-${{ github.ref }} 6 | cancel-in-progress: true 7 | 8 | permissions: 9 | contents: read 10 | pull-requests: write 11 | 12 | jobs: 13 | dependency-review: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: 'Dependency Review' 17 | uses: greenbone/actions/dependency-review@v3 18 | -------------------------------------------------------------------------------- /.github/workflows/sbom-upload.yml: -------------------------------------------------------------------------------- 1 | name: SBOM upload 2 | on: 3 | workflow_dispatch: 4 | push: 5 | branches: ["main"] 6 | 7 | concurrency: 8 | group: ${{ github.workflow }}-${{ github.ref }} 9 | cancel-in-progress: true 10 | 11 | jobs: 12 | SBOM-upload: 13 | runs-on: ubuntu-latest 14 | permissions: 15 | id-token: write 16 | contents: write 17 | steps: 18 | - name: 'SBOM upload' 19 | uses: greenbone/actions/sbom-upload@v3 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | *.local 11 | 12 | dist/ 13 | build/ 14 | coverage/ 15 | node_modules/ 16 | 17 | public/config.js 18 | 19 | .vscode/ 20 | .tern-project 21 | 22 | # directory files for image previews 23 | .directory 24 | 25 | .venv 26 | .eslintcache 27 | -------------------------------------------------------------------------------- /.prettierrc.cjs: -------------------------------------------------------------------------------- 1 | /* eslint-disable header/header */ 2 | const config = { 3 | arrowParens: 'avoid', 4 | bracketSpacing: false, 5 | jsxSingleQuote: false, 6 | bracketSameLine: false, 7 | semi: true, 8 | singleQuote: true, 9 | tabWidth: 2, 10 | trailingComma: 'all', 11 | }; 12 | 13 | module.exports = config; 14 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |(Component: React.ComponentType
) =>
16 | (props: P) => {
17 | const [ref, download] = useDownload();
18 | return (
19 | <>
20 | ;
18 | };
19 |
20 | CpeIcon.propTypes = {
21 | name: PropTypes.string,
22 | };
23 |
24 | export default CpeIcon;
25 |
--------------------------------------------------------------------------------
/src/web/components/icon/ListIcon.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-FileCopyrightText: 2024 Greenbone AG
2 | *
3 | * SPDX-License-Identifier: AGPL-3.0-or-later
4 | */
5 |
6 | import React from 'react';
7 | import {ListSvgIcon} from 'web/components/icon';
8 | import Link from 'web/components/link/Link';
9 | import PropTypes from 'web/utils/PropTypes';
10 | const ListIcon = ({page, filter, ...props}) => {
11 | return (
12 |
13 |
16 | );
17 |
18 | export default GreenboneLogo;
19 |
--------------------------------------------------------------------------------
/src/web/components/img/GreenboneLoginLogo.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-FileCopyrightText: 2024 Greenbone AG
2 | *
3 | * SPDX-License-Identifier: AGPL-3.0-or-later
4 | */
5 |
6 | import React from 'react';
7 | import styled from 'styled-components';
8 | import Img from 'web/components/img/Img';
9 | import useTranslation from 'web/hooks/useTranslation';
10 |
11 | const Image = styled(Img)`
12 | display: flex;
13 | width: 300px;
14 | `;
15 |
16 | const LoginLogo = () => {
17 | const [_] = useTranslation();
18 | return (
19 |
;
13 | };
14 |
15 | Img.propTypes = {
16 | alt: PropTypes.string,
17 | src: PropTypes.string.isRequired,
18 | };
19 |
20 | export default Img;
21 |
--------------------------------------------------------------------------------
/src/web/components/img/Product.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-FileCopyrightText: 2024 Greenbone AG
2 | *
3 | * SPDX-License-Identifier: AGPL-3.0-or-later
4 | */
5 |
6 | import {isDefined} from 'gmp/utils/identity';
7 | import React from 'react';
8 | import styled from 'styled-components';
9 | import Img from 'web/components/img/Img';
10 | import useGmp from 'web/hooks/useGmp';
11 | import useTranslation from 'web/hooks/useTranslation';
12 |
13 | const Image = styled(Img)`
14 | display: flex;
15 | height: 180px;
16 | `;
17 |
18 | const ProductImage = props => {
19 | const [_] = useTranslation();
20 | const {settings} = useGmp();
21 | return (
22 |
,
14 | );
15 |
16 | expect(element).toMatchSnapshot();
17 | });
18 |
19 | test('should render img with attributes', () => {
20 | const {element} = render(
21 |
,
22 | );
23 |
24 | expect(element).toHaveAttribute('alt', 'Greenbone Security Assistant');
25 | expect(element).toHaveAttribute('src', '/img/greenbone.svg');
26 | });
27 | });
28 |
--------------------------------------------------------------------------------
/src/web/components/img/__tests__/Product.test.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-FileCopyrightText: 2024 Greenbone AG
2 | *
3 | * SPDX-License-Identifier: AGPL-3.0-or-later
4 | */
5 |
6 | import {describe, test, expect} from '@gsa/testing';
7 | import ProductImage from 'web/components/img/Product';
8 | import {rendererWith} from 'web/utils/Testing';
9 |
10 | describe('ProductImage tests', () => {
11 | test('should render', () => {
12 | const gmp = {settings: {}};
13 | const {render} = rendererWith({gmp});
14 | const {element} = render(
9 | `;
10 |
--------------------------------------------------------------------------------
/src/web/components/img/__tests__/__snapshots__/GreenboneLoginLogo.test.jsx.snap:
--------------------------------------------------------------------------------
1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2 |
3 | exports[`GreenboneLogo tests > should render 1`] = `
4 | .c0 {
5 | display: -webkit-box;
6 | display: -webkit-flex;
7 | display: -ms-flexbox;
8 | display: flex;
9 | width: 300px;
10 | }
11 |
12 |
18 | `;
19 |
--------------------------------------------------------------------------------
/src/web/components/img/__tests__/__snapshots__/Img.test.jsx.snap:
--------------------------------------------------------------------------------
1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2 |
3 | exports[`Img tests > should render 1`] = `
4 |
8 | `;
9 |
--------------------------------------------------------------------------------
/src/web/components/img/__tests__/__snapshots__/Product.test.jsx.snap:
--------------------------------------------------------------------------------
1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2 |
3 | exports[`ProductImage tests > should render 1`] = `
4 | .c0 {
5 | display: -webkit-box;
6 | display: -webkit-flex;
7 | display: -ms-flexbox;
8 | display: flex;
9 | height: 180px;
10 | }
11 |
12 |
17 | `;
18 |
--------------------------------------------------------------------------------
/src/web/components/img/__tests__/__snapshots__/greenbone.test.jsx.snap:
--------------------------------------------------------------------------------
1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2 |
3 | exports[`GreenboneLogo tests > should render 1`] = `
4 |
9 | `;
10 |
--------------------------------------------------------------------------------
/src/web/components/img/__tests__/__snapshots__/greenboneloginlogo.test.jsx.snap:
--------------------------------------------------------------------------------
1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2 |
3 | exports[`GreenboneLogo tests > should render 1`] = `
4 | .c0 {
5 | display: -webkit-box;
6 | display: -webkit-flex;
7 | display: -ms-flexbox;
8 | display: flex;
9 | width: 300px;
10 | }
11 |
12 |
18 | `;
19 |
--------------------------------------------------------------------------------
/src/web/components/img/__tests__/__snapshots__/img.test.jsx.snap:
--------------------------------------------------------------------------------
1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2 |
3 | exports[`Img tests > should render 1`] = `
4 |
8 | `;
9 |
--------------------------------------------------------------------------------
/src/web/components/img/__tests__/__snapshots__/product.test.jsx.snap:
--------------------------------------------------------------------------------
1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2 |
3 | exports[`ProductImage tests > should render 1`] = `
4 | .c0 {
5 | display: -webkit-box;
6 | display: -webkit-flex;
7 | display: -ms-flexbox;
8 | display: flex;
9 | height: 180px;
10 | }
11 |
12 |
17 | `;
18 |
--------------------------------------------------------------------------------
/src/web/components/layout/Column.tsx:
--------------------------------------------------------------------------------
1 | /* SPDX-FileCopyrightText: 2024 Greenbone AG
2 | *
3 | * SPDX-License-Identifier: AGPL-3.0-or-later
4 | */
5 |
6 | import {Flex, FlexProps} from '@mantine/core';
7 |
8 | /**
9 | * React component that renders a stack (column) layout
10 | *
11 | */
12 | const Column: React.FC
24 |
28 | );
29 |
30 | const StyledLayout = styled(Layout)`
31 | padding-top: 8px;
32 | padding-bottom: 8px;
33 | `;
34 |
35 | export const TableDataAlignTop = styled(TableData)`
36 | vertical-align: top;
37 | `;
38 |
39 | export default TableData;
40 |
--------------------------------------------------------------------------------
/src/web/components/table/DetailsTable.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-FileCopyrightText: 2024 Greenbone AG
2 | *
3 | * SPDX-License-Identifier: AGPL-3.0-or-later
4 | */
5 |
6 | import React from 'react';
7 | import Col from 'web/components/table/Col';
8 | import InfoTable from 'web/components/table/InfoTable';
9 | import PropTypes from 'web/utils/PropTypes';
10 |
11 | const DetailsTable = ({children, size = 'full', ...props}) => (
12 | {item}
12 | );
13 | });
14 | return (
15 |
16 | {data}
17 | {children}
18 |
19 | );
20 | };
21 |
22 | TableRow.propTypes = {
23 | children: PropTypes.node,
24 | items: PropTypes.array,
25 | };
26 |
27 | export default TableRow;
28 |
--------------------------------------------------------------------------------
/src/web/components/table/SimpleTable.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-FileCopyrightText: 2024 Greenbone AG
2 | *
3 | * SPDX-License-Identifier: AGPL-3.0-or-later
4 | */
5 |
6 | import React from 'react';
7 | import Table from 'web/components/table/Table';
8 | import PropTypes from 'web/utils/PropTypes';
9 |
10 | const SimpleTable = ({size = 'auto', ...props}) => (
11 |
12 | );
13 |
14 | SimpleTable.propTypes = {
15 | size: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
16 | };
17 |
18 | export default SimpleTable;
19 |
--------------------------------------------------------------------------------
/src/web/components/table/__tests__/DetailsTable.test.jsx:
--------------------------------------------------------------------------------
1 | /* SPDX-FileCopyrightText: 2024 Greenbone AG
2 | *
3 | * SPDX-License-Identifier: AGPL-3.0-or-later
4 | */
5 |
6 | import {describe, test, expect} from '@gsa/testing';
7 | import TableBody from 'web/components/table/Body';
8 | import TableData from 'web/components/table/Data';
9 | import DetailsTable from 'web/components/table/DetailsTable';
10 | import TableRow from 'web/components/table/Row';
11 | import {render} from 'web/utils/Testing';
12 |
13 | describe('DetailsTable tests', () => {
14 | test('should render', () => {
15 | const {element} = render(
16 |
{title}
13 | Task: {this.state.task.name}
26 |