diff --git a/admin/src/main/scala/com/neu/model/Vulnerability.scala b/admin/src/main/scala/com/neu/model/Vulnerability.scala
index 0547d06c..eaf0ad98 100644
--- a/admin/src/main/scala/com/neu/model/Vulnerability.scala
+++ b/admin/src/main/scala/com/neu/model/Vulnerability.scala
@@ -16,6 +16,8 @@ case class VulnerabilityQuery(
matchTypeImage: Option[String],
imageName: Option[String],
matchTypeNode: Option[String],
+ imageBaseOS: Option[String],
+ matchTypeImageBaseOS: Option[String],
nodeName: Option[String],
matchTypeContainer: Option[String],
containerName: Option[String],
diff --git a/admin/src/main/scala/com/neu/model/VulnerabilityJsonProtocol.scala b/admin/src/main/scala/com/neu/model/VulnerabilityJsonProtocol.scala
index c741881a..774ca043 100644
--- a/admin/src/main/scala/com/neu/model/VulnerabilityJsonProtocol.scala
+++ b/admin/src/main/scala/com/neu/model/VulnerabilityJsonProtocol.scala
@@ -3,7 +3,7 @@ package com.neu.model
import spray.json.*
object VulnerabilityJsonProtocol extends DefaultJsonProtocol {
- given vulnerabilityQueryFormat: RootJsonFormat[VulnerabilityQuery] = jsonFormat19(
+ given vulnerabilityQueryFormat: RootJsonFormat[VulnerabilityQuery] = jsonFormat21(
VulnerabilityQuery.apply
)
given vulnerabilityProfileEntryFormat: RootJsonFormat[VulnerabilityProfileEntry] =
diff --git a/admin/webapp/websrc/app/common/types/vulnerabilities/vulnerabilities.ts b/admin/webapp/websrc/app/common/types/vulnerabilities/vulnerabilities.ts
index 374c814e..35ff1b03 100644
--- a/admin/webapp/websrc/app/common/types/vulnerabilities/vulnerabilities.ts
+++ b/admin/webapp/websrc/app/common/types/vulnerabilities/vulnerabilities.ts
@@ -77,6 +77,8 @@ export interface VulnerabilityQuery {
containerName?: string;
viewType: VulnerabilityView;
showAccepted?: boolean;
+ matchTypeImageBaseOS?: MatchTypeOption;
+ imageBaseOS?: string;
}
export interface VulnerabilitiesQuerySessionData {
diff --git a/admin/webapp/websrc/app/routes/vulnerabilities/vulnerability-items/vulnerability-items-table/vulnerability-items-table-filter/vulnerability-items-table-filter.component.html b/admin/webapp/websrc/app/routes/vulnerabilities/vulnerability-items/vulnerability-items-table/vulnerability-items-table-filter/vulnerability-items-table-filter.component.html
index af210971..8e441032 100644
--- a/admin/webapp/websrc/app/routes/vulnerabilities/vulnerability-items/vulnerability-items-table/vulnerability-items-table-filter/vulnerability-items-table-filter.component.html
+++ b/admin/webapp/websrc/app/routes/vulnerabilities/vulnerability-items/vulnerability-items-table/vulnerability-items-table-filter/vulnerability-items-table-filter.component.html
@@ -218,144 +218,102 @@
{{ 'general.FILTER_MATCH_ALL' | translate }}
{{ 'admissionControl.names.CONTAINER' | translate }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
- Service
+
+ Service
{{ form.get('matchTypeService')?.value === 'equals' ? '=' : '~' }}
{{ form.controls.serviceName.value }}
+
+
- Image
+
+ Image
{{ form.get('matchTypeImage')?.value === 'equals' ? '=' : '~' }}
{{ form.controls.imageName.value }}
+
+
- Node
+
+ Node
{{ form.get('matchTypeNode')?.value === 'equals' ? '=' : '~' }}
{{ form.controls.nodeName.value }}
+
+
- Container
+
+ Container
{{ form.get('matchTypeContainer')?.value === 'equals' ? '=' : '~' }}
{{ form.controls.containerName.value }}
+
+
+
+
+
+ {{ 'vulnerability.advanced_filter.image_base_os.label' | translate }}
+ {{ form.get('matchTypeImageBaseOS')?.value === 'equals' ? '=' : '~' }}
+ {{ form.controls.imageBaseOS.value }}
+
+
{{ 'general.FILTER_MATCH_ALL' | translate }}
(click)="clear(type === 'V2' ? FilterView.V2 : FilterView.V3)"
class="remove-button">
close
-
+
+
diff --git a/admin/webapp/websrc/app/routes/vulnerabilities/vulnerability-items/vulnerability-items-table/vulnerability-items-table-filter/vulnerability-items-table-filter.component.ts b/admin/webapp/websrc/app/routes/vulnerabilities/vulnerability-items/vulnerability-items-table/vulnerability-items-table-filter/vulnerability-items-table-filter.component.ts
index 96459635..30af229d 100644
--- a/admin/webapp/websrc/app/routes/vulnerabilities/vulnerability-items/vulnerability-items-table/vulnerability-items-table-filter/vulnerability-items-table-filter.component.ts
+++ b/admin/webapp/websrc/app/routes/vulnerabilities/vulnerability-items/vulnerability-items-table/vulnerability-items-table-filter/vulnerability-items-table-filter.component.ts
@@ -28,6 +28,7 @@ enum FilterView {
CONTAINER = 3,
V2 = 5,
V3 = 4,
+ IMAGE_BASE_OS = 6,
}
const today = new Date();
@@ -102,6 +103,11 @@ export class VulnerabilityItemsTableFilterComponent implements OnInit {
this.form.get('matchTypeImage')?.setValue(this.matchTypes[0].id);
break;
}
+ case FilterView.IMAGE_BASE_OS: {
+ this.form.controls.imageBaseOS.reset();
+ this.form.get('matchTypeImageBaseOS')?.setValue(this.matchTypes[0].id);
+ break;
+ }
case FilterView.NODE: {
this.form.controls.nodeName.reset();
this.form.get('matchTypeNode')?.setValue(this.matchTypes[0].id);
@@ -180,6 +186,8 @@ export class VulnerabilityItemsTableFilterComponent implements OnInit {
serviceName: new FormControl(filter.serviceName),
matchTypeImage: new FormControl(filter.matchTypeImage),
imageName: new FormControl(filter.imageName),
+ matchTypeImageBaseOS: new FormControl(filter.matchTypeImageBaseOS || this.matchTypes[0].id),
+ imageBaseOS: new FormControl(filter.imageBaseOS || ''),
matchTypeNode: new FormControl(filter.matchTypeNode),
nodeName: new FormControl(filter.nodeName),
matchTypeContainer: new FormControl(filter.matchTypeContainer),
diff --git a/admin/webapp/websrc/assets/i18n/en-common.json b/admin/webapp/websrc/assets/i18n/en-common.json
index 35e79711..0ad9886b 100644
--- a/admin/webapp/websrc/assets/i18n/en-common.json
+++ b/admin/webapp/websrc/assets/i18n/en-common.json
@@ -3537,6 +3537,14 @@
"REMOVE_VERIFIER_NG": "Error happens when removing verifier!"
}
},
+ "vulnerability": {
+ "advanced_filter": {
+ "image_base_os": {
+ "label": "Image Base OS",
+ "placeholder": "e.g alpine, ubuntu, redhat"
+ }
+ }
+ },
"just_now": "just now",
"seconds_ago": "{{time}} seconds ago",
"a_minute_ago": "a minute ago",
diff --git a/admin/webapp/websrc/assets/i18n/zh_cn-common.json b/admin/webapp/websrc/assets/i18n/zh_cn-common.json
index dd482e71..a520c40a 100644
--- a/admin/webapp/websrc/assets/i18n/zh_cn-common.json
+++ b/admin/webapp/websrc/assets/i18n/zh_cn-common.json
@@ -3531,6 +3531,14 @@
"REMOVE_VERIFIER_NG": "检测器删除时发生错误!"
}
},
+ "vulnerability": {
+ "advanced_filter": {
+ "image_base_os": {
+ "label": "镜像基础操作系统",
+ "placeholder": "例如 alpine, ubuntu, redhat"
+ }
+ }
+ },
"just_now": "刚才",
"seconds_ago": "{{time}}秒前",
"a_minute_ago": "1分钟前",