kitos
164ef25393
fix(campaigns): complete ACTION_LABELS map and timeline cache invalidation
...
Adds the 4 backend-logged campaign actions missing from ACTION_LABELS
(delete_campaign, generate_campaign, schedule_campaign,
recurring_campaign_run), and wires campaign-timeline invalidation into
the remaining audit-logging mutations on the page (complete, schedule,
approve/reject modification request) so the timeline panel updates
live instead of only on next reload, consistent with submit/approve/
reject campaign.
2026-07-04 12:02:11 +02:00
kitos
83b4d2578a
feat(campaigns): audit timeline UI and manager role in role pickers
2026-07-04 12:02:10 +02:00
kitos
aeaf1cf243
fix(campaigns): reset modification-request modal state on close, not just on success
...
Previously action/testId/justification only reset inside the success
handler, so cancelling and reopening the modal left stale form values.
Mirrors the reset-on-close pattern already used by AddTestToCampaignModal.
2026-07-04 12:02:10 +02:00
kitos
952b6f27d7
feat(campaigns): modification request UI on campaign detail page
2026-07-04 12:02:10 +02:00
kitos
b106780102
fix(campaigns): drop dead force param from activateCampaign API client
...
The backend endpoint no longer accepts a force query param (a draft
campaign can never have a future start_date to force past). No frontend
code currently calls this function, but keep it matching the real
backend contract in case a future admin UI wires it up.
2026-07-04 12:02:10 +02:00
kitos
6b6375ddad
feat(campaigns): submit/approve/reject UI on campaign detail page
2026-07-04 12:02:10 +02:00
kitos
f19d10e19c
feat(campaigns): remove lead-set start dates, add pending-approval filter
2026-07-04 12:02:10 +02:00
kitos
858dd3e9e7
docs(campaigns): explain why CampaignModificationRequest.test_id can be null
2026-07-04 12:02:10 +02:00
kitos
15ef555131
feat(campaigns): API client for approval workflow
2026-07-04 12:02:10 +02:00
kitos
108743daa5
docs(campaigns): remove stale docstring reference to deleted scheduling filter
2026-07-04 12:02:10 +02:00
kitos
5bc71f677f
refactor(campaigns): remove dead future-start_date scheduling code
...
Now that only the manager sets start_date, and only at the moment of
approval (which immediately activates the campaign), a draft campaign
can never have a start_date. This made three things permanently
unreachable: the hourly _run_scheduled_campaign_activation cron job,
the activate_campaign 409/force future-date guard, and a query filter
hiding tests from scheduled-but-inactive draft campaigns. Removes all
three rather than leaving dead code behind. Also adds the missing
manager-cannot-directly-activate router test.
2026-07-04 12:02:10 +02:00
kitos
959def2f49
feat(campaigns): timeline endpoint, admin-only manual activation, remove lead-set dates
2026-07-04 12:02:09 +02:00
kitos
6186c246a4
feat(campaigns): modification-request router endpoints
2026-07-04 12:02:09 +02:00
kitos
95b5ac50c6
test(campaigns): promote cookie-safe request helper to shared conftest fixture
...
Moves the local _post cookie-clearing helper into a shared 'api' fixture
in conftest.py so later router tests in this plan (Tasks 10/11) don't
have to reinvent or forget the TestClient cookie-vs-Authorization-header
gotcha. Also adds a one-line comment at both require_any_role("manager")
call sites clarifying admin passthrough is automatic.
2026-07-04 12:02:09 +02:00
kitos
4f5ffcf3f9
feat(campaigns): submit/approve/reject router endpoints
2026-07-04 12:02:09 +02:00
kitos
6749daa7cb
feat(campaigns): add get_campaign_timeline service function
2026-07-04 12:02:09 +02:00
kitos
fd47db7bea
fix(campaigns): null-safe test_id serialization, correct stale comments
...
serialize_modification_request crashed toward a string 'None' instead of
JSON null for requests whose test_id was nulled by the SET NULL cascade.
Also corrects two comments that still described the debunked ordering
theory instead of the actual SET NULL fix, and fixes a test that
asserted post-cascade state without committing first (the ORM only
picks up out-of-band DB-side SET NULL on already-loaded objects after
expire_on_commit forces a re-read, matching real router behavior).
2026-07-04 12:02:09 +02:00
kitos
12a5484003
fix(campaigns): preserve modification-request audit row after test deletion
...
Approving a remove_test modification request deletes the underlying Test
row, which was cascading through test_id's ON DELETE CASCADE and wiping
out the request row itself before it could be read back. Changed to
ON DELETE SET NULL so the audit record (justification, reviewer,
decision) survives. Adds regression coverage plus double-approve/reject
idempotency tests.
2026-07-04 12:02:09 +02:00
kitos
dc5f206bf5
feat(campaigns): gate test edits to draft, add modification request workflow
2026-07-04 12:02:09 +02:00
kitos
6eadc7405b
test(campaigns): add EntityNotFoundError and reject-clears-approval coverage
2026-07-04 12:02:09 +02:00
kitos
385d402a57
feat(campaigns): submit/approve/reject service functions
2026-07-04 12:02:09 +02:00
kitos
79b573fb60
test(campaigns): add manager role fixtures
2026-07-04 12:02:08 +02:00
kitos
1c91bd543d
feat(campaigns): migration for campaign_modification_requests table
2026-07-04 12:02:08 +02:00
kitos
f6eac1641c
feat(campaigns): migration for campaign approval fields
2026-07-04 12:02:08 +02:00
kitos
a6b46f5f76
feat(campaigns): add approval fields and CampaignModificationRequest model
2026-07-04 12:02:08 +02:00
kitos
8e7f98301e
refactor(campaigns): fix approve() error message, add terminal-state test
2026-07-04 12:02:08 +02:00
kitos
a113f3687c
feat(campaigns): add pending_approval state to campaign domain entity
2026-07-04 12:02:08 +02:00
kitos
62e3bfebe8
docs(campaigns): implementation plan for manager approval workflow
2026-07-04 12:02:08 +02:00
kitos
74cb946317
docs(campaigns): design spec for manager approval workflow
2026-07-04 12:02:08 +02:00
kitos
f1e0e0acf0
fix(tempo): delegate user-token worklog path to log_worklog so tests can mock it
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
2026-06-25 16:28:16 +02:00
kitos
7613f5ec8b
fix(deps): upgrade form-data 4.0.5 to 4.0.6 (CRLF injection fix)
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
2026-06-25 14:54:56 +02:00
kitos
070b402358
fix(deps): pin urllib3>=2.7.0 and idna>=3.15; apk upgrade in nginx stage; form-data override
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
2026-06-25 13:26:06 +02:00
kitos
6e29c7081f
fix(lint): remove unused get_current_user import; lowercase HOLDABLE_STATES
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
2026-06-25 12:23:04 +02:00
kitos
006bdc60e1
feat(tests): containment fields hidden until detected, required datetime validation
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
2026-06-25 09:42:02 +02:00
kitos
d7ad981b89
chore(snyk): exclude test fixtures and scripts from Snyk Code SAST scanning
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
2026-06-24 14:37:46 +02:00
kitos
7f990987de
fix(sso): block protocol-relative URL redirect bypass by requiring non-empty netloc
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
2026-06-24 14:34:50 +02:00
kitos
cef082d0c4
feat(tests): execution start/end times on red team, detection/containment times on blue team
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
2026-06-24 13:09:13 +02:00
kitos
2e45cf1be0
feat(tests): containment_result field on blue team evaluation
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
2026-06-24 12:35:19 +02:00
kitos
18695197e8
feat(jira): admin account replaces per-user tokens for all Jira/Tempo ops
...
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
- Single admin Jira account stored in system_configs (jira.admin_email, jira.admin_api_token)
- Admin Tempo token in system_configs (tempo.admin_token)
- get_admin_jira_client() + has_admin_jira_configured() replace per-user auth in all lifecycle hooks
- lookup_user_jira_account_id() auto-discovers each user's Atlassian accountId by email on login
- auto_log_test_worklog() now uses admin Tempo token and logs both red+blue team time
- Settings > Jira: admin credentials fields + test buttons moved to admin Jira tab
- Profile section simplified: jira_account_id shown read-only (auto-detected)
2026-06-24 09:15:35 +02:00
kitos
bb8b9a6a72
feat(dashboard): time range filter for operational metrics (30d/90d/6m/1y/all)
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
2026-06-19 10:41:22 +02:00
kitos
4e71217dd7
fix(tests): restrict on-hold to techs and admin, remove leads
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
2026-06-19 10:01:42 +02:00
kitos
4e1f35c250
feat(tests): on-hold button with reason modal, Jira comment + On Hold transition
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
2026-06-19 09:53:05 +02:00
kitos
6147f15238
feat(tests): operator assignment — two queues for techs, assign endpoint for leads
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
2026-06-19 09:07:39 +02:00
kitos
30ca709c11
fix(coverage): partial coverage when mix of detected+not_detected; add bulk recalculate endpoint
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
2026-06-18 17:05:15 +02:00
kitos
a58f9fd357
feat(techniques): add external_references storage and display MITRE sources with links
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
2026-06-18 16:26:11 +02:00
kitos
263823f290
refactor(settings): move Jira connection test from admin Jira tab to Profile tab
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
2026-06-18 15:38:49 +02:00
kitos
986682aad1
fix(security): replace extractall with per-member extract to satisfy Snyk Tar Slip taint analysis; rename PASS to OK_MARK in verify_gaps.py
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
2026-06-12 14:42:29 +02:00
kitos
f8824291a2
fix(tests): patch REPORT_OUTPUT_DIR in report router tests to satisfy path traversal check
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
2026-06-12 14:27:59 +02:00
kitos
443a04befb
fix(report_engine): lazy-init output dir to fix CI PermissionError on /app
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
2026-06-12 14:13:41 +02:00
kitos
88c2af472e
fix(main): move logger definition after all imports to fix ruff E402
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
2026-06-12 14:00:21 +02:00