fix(campaigns,tests): admin cannot create campaigns, manager can delete unstarted tests, intensify red/blue team colors
Aegis CI / lint-and-test (push) Has been cancelled
Snyk Security Scan / Python vulnerabilities (backend) (push) Has been cancelled
Snyk Security Scan / npm vulnerabilities (frontend) (push) Has been cancelled
Snyk Security Scan / Docker image vulnerabilities (backend) (push) Has been cancelled
Aegis CI / lint-and-test (push) Has been cancelled
Snyk Security Scan / Python vulnerabilities (backend) (push) Has been cancelled
Snyk Security Scan / npm vulnerabilities (frontend) (push) Has been cancelled
Snyk Security Scan / Docker image vulnerabilities (backend) (push) Has been cancelled
- Campaign creation and generate-from-threat-actor now use the strict
role check — admin no longer gets a free pass into campaign content,
same principle already applied to test-template creation.
- New manager-only DELETE /tests/{id}: removes a standalone test still
in draft (not started, not linked to any campaign).
- Replaced the orange/indigo stand-ins used across team badges, tabs,
action buttons, and timers with true red/blue so Red Team and Blue
Team read unambiguously at a glance.
This commit is contained in:
@@ -438,6 +438,28 @@ def get_test_or_raise(db: Session, test_id: uuid.UUID) -> Test:
|
||||
return test
|
||||
|
||||
|
||||
def delete_test(db: Session, test_id: uuid.UUID) -> None:
|
||||
"""Delete a standalone, not-yet-started test from the queue.
|
||||
|
||||
Only a test still in ``draft`` (execution hasn't started) and not
|
||||
linked to any campaign may be deleted this way — a test already being
|
||||
worked on, or one that's part of a campaign's plan, must be handled
|
||||
through the normal workflow/campaign-modification paths instead.
|
||||
Raises EntityNotFoundError, BusinessRuleViolation. Does not commit;
|
||||
caller commits.
|
||||
"""
|
||||
test = get_test_or_raise(db, test_id)
|
||||
|
||||
if test.state != TestState.draft:
|
||||
raise BusinessRuleViolation("Only tests that haven't started yet can be deleted")
|
||||
|
||||
in_campaign = db.query(CampaignTest).filter(CampaignTest.test_id == test.id).first()
|
||||
if in_campaign:
|
||||
raise BusinessRuleViolation("Cannot delete a test that belongs to a campaign")
|
||||
|
||||
db.delete(test)
|
||||
|
||||
|
||||
# Define function get_test_with_technique
|
||||
def get_test_with_technique(db: Session, test_id: uuid.UUID) -> Test:
|
||||
"""Fetch a test with technique joined. Raises EntityNotFoundError if not found.
|
||||
|
||||
Reference in New Issue
Block a user