mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-11-09 04:38:49 +00:00
feat/PRWLR-4002 add /scans endpoints (without SDK integration) (#33)
* feat(Backend): PRWLR-4992 add Scan db model * feat(API): PRWLR-4002 add viewset and required tools for /scans endpoint * feat(API): PRWLR-4002 improve /scans filters * feat(API): PRWLR-4002 add relationships links * feat(API): PRWLR-4002 implement POST /scan custom logic * fix(API): PRWLR-4002 fix Scan.type keyword usage * feat(API): PRWLR-4002 implement PATCH /scans * feat(API): PRWLR-4002 refactor serializers for write operations * fix(API): PRWLR-4002 fix providers on ScanSerializer * test(API): PRWLR-4002 add unit tests for /scans * feat(Backend, Test): PRWLR-4002 refactor routing and unit tests db connections * build(CI): PRWLR-4002 update CI env vars for postgres * fix(Tests): PRWLR-4002 fix close_db_connections fixture * feat(Backend, API): PRWLR-4002 apply requested changes to Scan model and filters * chore(Tests): PRWLR-4002 rename pytest fixtures * feat(Backend): PRWLR-4002 remove unique constraint from Scan model * fix(Backend, Tests): PRWLR-4002 fix db routing and migration mechanism for tests * chore(deps): PRWLR-4002 add uuid6 to poetry deps * chore(Backend): PRWLR-4002 refactor filter methods * fix(Tests): PRWLR-4002 fix wrong postgres credentials for testing * feat(API): PRWLR-4002 implement merging mechanism for Scans.scanner_args * feat(API): PRWLR-4002 implement merging mechanism for Scans.scanner_args * feat(Backend): PRWLR-4002 add indexes to Scan model * feat(Backend): PRWLR-4002 remove id index from Scan model (redundant) * feat(API): PRWLR-4002 add datetime fields to Scan serializer
This commit is contained in:
1 parent
8183207802
commit
24857eaa7f
23 files changed
+1379
-409
No files matched your search
@@ -4,12 +4,23 @@ from uuid import uuid4, UUID
|
||||
from django.core.validators import MinLengthValidator
|
||||
from django.db import models
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from api.db_utils import ProviderEnumField
|
||||
from uuid6 import uuid7
|
||||
|
||||
from api.db_utils import ProviderEnumField, StateEnumField, ScanTypeEnumField
|
||||
from api.exceptions import ModelValidationError
|
||||
from api.rls import RowLevelSecurityConstraint
|
||||
from api.rls import RowLevelSecurityProtectedModel
|
||||
|
||||
|
||||
class StateChoices(models.TextChoices):
|
||||
AVAILABLE = "available", _("Available")
|
||||
SCHEDULED = "scheduled", _("Scheduled")
|
||||
EXECUTING = "executing", _("Executing")
|
||||
COMPLETED = "completed", _("Completed")
|
||||
FAILED = "failed", _("Failed")
|
||||
CANCELLED = "cancelled", _("Cancelled")
|
||||
|
||||
|
||||
class Provider(RowLevelSecurityProtectedModel):
|
||||
class ProviderChoices(models.TextChoices):
|
||||
AWS = "aws", _("AWS")
|
||||
@@ -96,3 +107,53 @@ class Provider(RowLevelSecurityProtectedModel):
|
||||
statements=["SELECT", "INSERT", "UPDATE", "DELETE"],
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
class Scan(RowLevelSecurityProtectedModel):
|
||||
class TypeChoices(models.TextChoices):
|
||||
SCHEDULED = "scheduled", _("Scheduled")
|
||||
MANUAL = "manual", _("Manual")
|
||||
|
||||
id = models.UUIDField(primary_key=True, default=uuid7, editable=False)
|
||||
name = models.CharField(
|
||||
blank=True, null=True, max_length=100, validators=[MinLengthValidator(3)]
|
||||
)
|
||||
provider = models.ForeignKey(
|
||||
Provider,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="scans",
|
||||
related_query_name="scan",
|
||||
)
|
||||
type = ScanTypeEnumField(
|
||||
choices=TypeChoices.choices,
|
||||
)
|
||||
state = StateEnumField(choices=StateChoices.choices, default=StateChoices.AVAILABLE)
|
||||
unique_resource_count = models.IntegerField(default=0)
|
||||
progress = models.IntegerField(default=0)
|
||||
scanner_args = models.JSONField(default=dict)
|
||||
duration = models.IntegerField(null=True, blank=True)
|
||||
scheduled_at = models.DateTimeField(null=True, blank=True)
|
||||
inserted_at = models.DateTimeField(auto_now_add=True, editable=False)
|
||||
updated_at = models.DateTimeField(auto_now=True, editable=False)
|
||||
started_at = models.DateTimeField(null=True, blank=True)
|
||||
completed_at = models.DateTimeField(null=True, blank=True)
|
||||
# TODO: task foreign key
|
||||
# TODO: mutelist foreign key
|
||||
|
||||
class Meta(RowLevelSecurityProtectedModel.Meta):
|
||||
db_table = "scans"
|
||||
|
||||
constraints = [
|
||||
RowLevelSecurityConstraint(
|
||||
field="tenant_id",
|
||||
name="rls_on_%(class)s",
|
||||
statements=["SELECT", "INSERT", "UPDATE", "DELETE"],
|
||||
),
|
||||
]
|
||||
|
||||
indexes = [
|
||||
models.Index(
|
||||
fields=["provider", "state", "type", "scheduled_at"],
|
||||
name="scans_prov_state_type_sche_idx",
|
||||
),
|
||||
]
|
||||
Reference in new issue
Block a user