diff --git a/changelog/unreleased/add-virus-filter.md b/changelog/unreleased/add-virus-filter.md new file mode 100644 index 0000000000..5d6f6806db --- /dev/null +++ b/changelog/unreleased/add-virus-filter.md @@ -0,0 +1,5 @@ +Enhancement: Add virus filter to sessions command + +Allow filtering upload session by virus status (has-virus=true/false) + +https://github.com/owncloud/ocis/pull/9041 diff --git a/services/storage-users/pkg/command/uploads.go b/services/storage-users/pkg/command/uploads.go index de8e59aae3..ca7555eed9 100644 --- a/services/storage-users/pkg/command/uploads.go +++ b/services/storage-users/pkg/command/uploads.go @@ -119,6 +119,11 @@ func ListUploadSessions(cfg *config.Config) *cli.Command { DefaultText: "unset", Usage: "filter sessions by expired status", }, + &cli.BoolFlag{ + Name: "has-virus", + DefaultText: "unset", + Usage: "filter sessions by virus scan result", + }, &cli.BoolFlag{ Name: "json", Usage: "output as json", @@ -320,6 +325,10 @@ func buildFilter(c *cli.Context) storage.UploadSessionFilter { expiredValue := c.Bool("expired") filter.Expired = &expiredValue } + if c.IsSet("has-virus") { + infectedValue := c.Bool("has-virus") + filter.HasVirus = &infectedValue + } if c.IsSet("id") { idValue := c.String("id") filter.ID = &idValue @@ -358,6 +367,24 @@ func buildInfo(filter storage.UploadSessionFilter) string { } } + if filter.HasVirus != nil { + if b.Len() != 0 { + b.WriteString(", ") + } + if !*filter.HasVirus { + if b.Len() == 0 { + b.WriteString("Not ") + } else { + b.WriteString("not ") + } + } + if b.Len() == 0 { + b.WriteString("Virusinfected") + } else { + b.WriteString("virusinfected") + } + } + if b.Len() == 0 { b.WriteString("Session") } else { diff --git a/services/storage-users/pkg/command/uploads_test.go b/services/storage-users/pkg/command/uploads_test.go index bb2cb9727d..4d638eaeca 100644 --- a/services/storage-users/pkg/command/uploads_test.go +++ b/services/storage-users/pkg/command/uploads_test.go @@ -38,6 +38,31 @@ func TestBuildInfo(t *testing.T) { filter: storage.UploadSessionFilter{ID: strPtr("123")}, expectedInfo: "Session with id '123':", }, + { + alias: "processing, not expired and not virus infected", + filter: storage.UploadSessionFilter{Processing: boolPtr(true), Expired: boolPtr(false), HasVirus: boolPtr(false)}, + expectedInfo: "Processing, not expired, not virusinfected sessions:", + }, + { + alias: "not virusinfected", + filter: storage.UploadSessionFilter{HasVirus: boolPtr(false)}, + expectedInfo: "Not virusinfected sessions:", + }, + { + alias: "expired and virusinfected", + filter: storage.UploadSessionFilter{Expired: boolPtr(true), HasVirus: boolPtr(true)}, + expectedInfo: "Expired, virusinfected sessions:", + }, + { + alias: "expired and not virus infected", + filter: storage.UploadSessionFilter{Expired: boolPtr(true), HasVirus: boolPtr(false)}, + expectedInfo: "Expired, not virusinfected sessions:", + }, + { + alias: "processing, not expired, virus infected and with id (note: this makes no sense)", + filter: storage.UploadSessionFilter{Processing: boolPtr(true), Expired: boolPtr(false), HasVirus: boolPtr(true), ID: strPtr("123")}, + expectedInfo: "Processing, not expired, virusinfected session with id '123':", + }, } for _, tc := range testCases {