From 8130880f2db00882d2a873a4aae02d0575cba2d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20Poyatos?= Date: Fri, 4 Oct 2024 14:33:18 +0200 Subject: [PATCH] chore(Tenant, Provider, Scan, Task, Resource): PRWLR-4966 Update default ordering in viewsets (#51) * chore(Tenant, Provider, Scan, Task, Resource): PRWLR-4966 set default ordering to -inserted_at * chore: PRWLR-4966 update API schema --- src/backend/api/specs/v1.yaml | 294 +++++++++++++++++++++++++--- src/backend/api/tests/test_views.py | 3 - src/backend/api/v1/views.py | 16 +- 3 files changed, 280 insertions(+), 33 deletions(-) diff --git a/src/backend/api/specs/v1.yaml b/src/backend/api/specs/v1.yaml index 967a7c7aea..7d98fca484 100644 --- a/src/backend/api/specs/v1.yaml +++ b/src/backend/api/specs/v1.yaml @@ -58,18 +58,47 @@ paths: name: filter[delta] schema: type: string + nullable: true + enum: + - changed + - new + description: |- + * `new` - New + * `changed` - Changed - in: query name: filter[delta__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[impact] schema: type: string + enum: + - critical + - high + - informational + - low + - medium + description: |- + * `critical` - Critical + * `high` - High + * `medium` - Medium + * `low` - Low + * `informational` - Informational - in: query name: filter[impact__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[inserted_at] schema: @@ -98,8 +127,13 @@ paths: - in: query name: filter[provider__in] schema: - type: string - format: uuid + type: array + items: + type: string + format: uuid + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[provider_alias] schema: @@ -111,15 +145,46 @@ paths: - in: query name: filter[provider_alias__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[provider_type] schema: type: string + enum: + - aws + - azure + - gcp + - kubernetes + description: |- + * `aws` - AWS + * `azure` - Azure + * `gcp` - GCP + * `kubernetes` - Kubernetes - in: query name: filter[provider_type__in] schema: - type: string + type: array + items: + type: string + enum: + - aws + - azure + - gcp + - kubernetes + description: |- + Multiple values may be separated by commas. + + * `aws` - AWS + * `azure` - Azure + * `gcp` - GCP + * `kubernetes` - Kubernetes + explode: false + style: form - in: query name: filter[provider_uid] schema: @@ -131,7 +196,12 @@ paths: - in: query name: filter[provider_uid__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[region] schema: @@ -143,7 +213,12 @@ paths: - in: query name: filter[region__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[resource_name] schema: @@ -155,7 +230,12 @@ paths: - in: query name: filter[resource_name__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[resource_type] schema: @@ -167,7 +247,12 @@ paths: - in: query name: filter[resource_type__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[resource_uid] schema: @@ -179,12 +264,22 @@ paths: - in: query name: filter[resource_uid__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[resources] schema: - type: string - format: uuid + type: array + items: + type: string + format: uuid + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[scan] schema: @@ -210,23 +305,60 @@ paths: - in: query name: filter[service__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[severity] schema: type: string + enum: + - critical + - high + - informational + - low + - medium + description: |- + * `critical` - Critical + * `high` - High + * `medium` - Medium + * `low` - Low + * `informational` - Informational - in: query name: filter[severity__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[status] schema: type: string + enum: + - FAIL + - MANUAL + - MUTED + - PASS + description: |- + * `FAIL` - Fail + * `PASS` - Pass + * `MANUAL` - Manual + * `MUTED` - Muted - in: query name: filter[status__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[updated_at] schema: @@ -437,10 +569,25 @@ paths: name: filter[provider] schema: type: string + enum: + - aws + - azure + - gcp + - kubernetes + description: |- + * `aws` - AWS + * `azure` - Azure + * `gcp` - GCP + * `kubernetes` - Kubernetes - in: query name: filter[provider__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - name: filter[search] required: false in: query @@ -756,15 +903,46 @@ paths: - in: query name: filter[provider_alias__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[provider_type] schema: type: string + enum: + - aws + - azure + - gcp + - kubernetes + description: |- + * `aws` - AWS + * `azure` - Azure + * `gcp` - GCP + * `kubernetes` - Kubernetes - in: query name: filter[provider_type__in] schema: - type: string + type: array + items: + type: string + enum: + - aws + - azure + - gcp + - kubernetes + description: |- + Multiple values may be separated by commas. + + * `aws` - AWS + * `azure` - Azure + * `gcp` - GCP + * `kubernetes` - Kubernetes + explode: false + style: form - in: query name: filter[provider_uid] schema: @@ -776,7 +954,12 @@ paths: - in: query name: filter[provider_uid__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[region] schema: @@ -1065,15 +1248,46 @@ paths: - in: query name: filter[provider_alias__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - in: query name: filter[provider_type] schema: type: string + enum: + - aws + - azure + - gcp + - kubernetes + description: |- + * `aws` - AWS + * `azure` - Azure + * `gcp` - GCP + * `kubernetes` - Kubernetes - in: query name: filter[provider_type__in] schema: - type: string + type: array + items: + type: string + enum: + - aws + - azure + - gcp + - kubernetes + description: |- + Multiple values may be separated by commas. + + * `aws` - AWS + * `azure` - Azure + * `gcp` - GCP + * `kubernetes` - Kubernetes + explode: false + style: form - in: query name: filter[provider_uid] schema: @@ -1085,7 +1299,12 @@ paths: - in: query name: filter[provider_uid__in] schema: - type: string + type: array + items: + type: string + description: Multiple values may be separated by commas. + explode: false + style: form - name: filter[search] required: false in: query @@ -1111,6 +1330,12 @@ paths: name: filter[trigger] schema: type: string + enum: + - manual + - scheduled + description: |- + * `scheduled` - Scheduled + * `manual` - Manual - name: page[number] required: false in: query @@ -1313,6 +1538,23 @@ paths: name: filter[state] schema: type: string + title: Task State + enum: + - available + - cancelled + - completed + - executing + - failed + - scheduled + description: |- + Current state of the task being run + + * `available` - Available + * `scheduled` - Scheduled + * `executing` - Executing + * `completed` - Completed + * `failed` - Failed + * `cancelled` - Cancelled - name: page[number] required: false in: query @@ -1979,6 +2221,12 @@ paths: name: filter[role] schema: type: string + enum: + - member + - owner + description: |- + * `owner` - Owner + * `member` - Member - name: filter[search] required: false in: query diff --git a/src/backend/api/tests/test_views.py b/src/backend/api/tests/test_views.py index 15e3e38870..639702d81c 100644 --- a/src/backend/api/tests/test_views.py +++ b/src/backend/api/tests/test_views.py @@ -1416,9 +1416,6 @@ class TestResourceViewSet: response = authenticated_client.get(reverse("resource-list")) assert response.status_code == status.HTTP_200_OK assert len(response.json()["data"]) == len(resources_fixture) - assert ( - response.json()["data"][0]["attributes"]["uid"] == resources_fixture[0].uid - ) @pytest.mark.parametrize( "filter_name, filter_value, expected_count", diff --git a/src/backend/api/v1/views.py b/src/backend/api/v1/views.py index cddb606e7d..28a87c0432 100644 --- a/src/backend/api/v1/views.py +++ b/src/backend/api/v1/views.py @@ -248,7 +248,7 @@ class TenantViewSet(BaseTenantViewset): http_method_names = ["get", "post", "patch", "delete"] filterset_class = TenantFilter search_fields = ["name"] - ordering = ["inserted_at"] + ordering = ["-inserted_at"] ordering_fields = ["name", "inserted_at", "updated_at"] def get_queryset(self): @@ -410,7 +410,7 @@ class ProviderViewSet(BaseRLSViewSet): http_method_names = ["get", "post", "patch", "delete"] filterset_class = ProviderFilter search_fields = ["provider", "uid", "alias"] - ordering = ["inserted_at"] + ordering = ["-inserted_at"] ordering_fields = [ "provider", "uid", @@ -525,7 +525,7 @@ class ScanViewSet(BaseRLSViewSet): serializer_class = ScanSerializer http_method_names = ["get", "post", "patch"] filterset_class = ScanFilter - ordering = ["inserted_at"] + ordering = ["-inserted_at"] ordering_fields = [ "name", "trigger", @@ -615,7 +615,7 @@ class TaskViewSet(BaseRLSViewSet): http_method_names = ["get", "delete"] filterset_class = TaskFilter search_fields = ["name"] - ordering = ["inserted_at"] + ordering = ["-inserted_at"] ordering_fields = ["inserted_at", "completed_at", "name", "state"] def get_queryset(self): @@ -653,11 +653,13 @@ class TaskViewSet(BaseRLSViewSet): @extend_schema_view( list=extend_schema( summary="List all resources", - description="Retrieve a list of all resources with options for filtering by various criteria. Resources are objects that are discovered by Prowler. They can be anything from a single host to a whole VPC.", + description="Retrieve a list of all resources with options for filtering by various criteria. Resources are " + "objects that are discovered by Prowler. They can be anything from a single host to a whole VPC.", ), retrieve=extend_schema( summary="Retrieve data for a resource", - description="Fetch detailed information about a specific resource by their ID. A Resource is an object that is discovered by Prowler. It can be anything from a single host to a whole VPC.", + description="Fetch detailed information about a specific resource by their ID. A Resource is an object that " + "is discovered by Prowler. It can be anything from a single host to a whole VPC.", ), ) @method_decorator(CACHE_DECORATOR, name="list") @@ -667,7 +669,7 @@ class ResourceViewSet(BaseRLSViewSet): serializer_class = ResourceSerializer http_method_names = ["get"] filterset_class = ResourceFilter - ordering = ["inserted_at"] + ordering = ["-inserted_at"] ordering_fields = [ "provider_uid", "uid",