8d023147cc
fix: chmod 777 log dir on compose generation so container decnet user can write logs
2026-04-09 19:36:53 -04:00
14f7a535db
fix: use model_dump(mode='json') to serialize datetime fields; fixes SSE stream silently dying post-ORM migration
2026-04-09 19:29:27 -04:00
cea6279a08
fix: add Last-Event-ID to CORS allow_headers to unblock SSE reconnects
2026-04-09 19:26:24 -04:00
6b8392102e
fix: emit stats/histogram snapshot on SSE connect; remove polling api.get('/stats') from Dashboard
2026-04-09 19:23:24 -04:00
d2a569496d
fix: add get_stream_user dependency for SSE endpoint; allow query-string token for EventSource
2026-04-09 19:20:38 -04:00
f20e86826d
fix: derive default CORS origin from DECNET_WEB_HOST/PORT instead of hardcoded ports
2026-04-09 19:15:45 -04:00
29da2a75b3
fix: add localhost:9090 to CORS defaults; revert broken relative-URL and proxy changes
2026-04-09 19:14:40 -04:00
3362325479
fix: resolve CORS blocking Vite dev server (add 5173 to defaults, add proxy)
2026-04-09 19:10:10 -04:00
016115a523
fix: clear all addressable technical debt (DEBT-005 through DEBT-025)
...
Security:
- DEBT-008: remove query-string token auth; header-only Bearer now enforced
- DEBT-013: add regex constraint ^[a-z0-9\-]{1,64}$ on decky_name path param
- DEBT-015: stop leaking raw exception detail to API clients; log server-side
- DEBT-016: validate search (max_length=512) and datetime params with regex
Reliability:
- DEBT-014: wrap SSE event_generator in try/except; yield error frame on failure
- DEBT-017: emit log.warning/error on DB init retry; silent failures now visible
Observability / Docs:
- DEBT-020: add 401/422 response declarations to all route decorators
Infrastructure:
- DEBT-018: add HEALTHCHECK to all 24 template Dockerfiles
- DEBT-019: add USER decnet + setcap cap_net_bind_service to all 24 Dockerfiles
- DEBT-024: bump Redis template version 7.0.12 → 7.2.7
Config:
- DEBT-012: validate DECNET_API_PORT and DECNET_WEB_PORT range (1-65535)
Code quality:
- DEBT-010: delete 22 duplicate decnet_logging.py copies; deployer injects canonical
- DEBT-022: closed as false positive (print only in module docstring)
- DEBT-009: closed as false positive (templates already use structured syslog_line)
Build:
- DEBT-025: generate requirements.lock via pip freeze
Testing:
- DEBT-005/006/007: comprehensive test suite added across tests/api/
- conftest: in-memory SQLite + StaticPool + monkeypatched session_factory
- fuzz mark added; default run excludes fuzz; -n logical parallelism
DEBT.md updated: 23/25 items closed; DEBT-011 (Alembic) and DEBT-023 (digest pinning) remain
2026-04-09 19:02:51 -04:00
0166d0d559
fix: clean up db layer — model_dump, timezone-aware timestamps, unified histogram, async load_state
2026-04-09 18:46:35 -04:00
de84cc664f
refactor: migrate database to SQLModel and implement modular DB structure
2026-04-09 16:43:30 -04:00
2b7d872ab7
fix: revert DECNET_ADMIN_PASSWORD to default 'admin'; first-login change enforces security
2026-04-09 13:25:29 -04:00
b6b046c90b
fix: harden startup security — require strong secrets, restrict CORS
...
- decnet/env.py: DECNET_JWT_SECRET and DECNET_ADMIN_PASSWORD are now
required env vars; startup raises ValueError if unset or set to a
known-bad default ("admin", "password", etc.)
- decnet/env.py: add DECNET_CORS_ORIGINS (comma-separated, defaults to
http://localhost:8080 ) replacing the previous allow_origins=["*"]
- decnet/web/api.py: use DECNET_CORS_ORIGINS and tighten allow_methods
and allow_headers to explicit lists
- tests/conftest.py: set required env vars at module level so test
collection works without real credentials
- tests/test_web_api.py, test_web_api_fuzz.py: use DECNET_ADMIN_PASSWORD
from env instead of hardcoded "admin"
Closes DEBT-001, DEBT-002, DEBT-004
2026-04-09 12:13:22 -04:00
29a2cf2738
refactor: modularize API routes into separate files and clean up dependencies
2026-04-09 11:58:57 -04:00
551664bc43
fix: stabilize test suite by ensuring proper test DB isolation and initialization
2026-04-09 02:31:14 -04:00
a3b92d4dd6
docs: tag API endpoints for better organization
2026-04-09 01:58:54 -04:00
30edf9a55d
feat: add DECNET_DEVELOPER toggle for API documentation
2026-04-09 01:55:31 -04:00
69626d705d
feat: implement Bounty Vault for captured credentials and artifacts
2026-04-09 01:52:50 -04:00
0f86f883fe
fix: resolve remaining bandit warnings and stabilize lifespan
2026-04-09 01:35:08 -04:00
13f3d15a36
fix: stabilize tests with synchronous DB init and handle Bandit security findings
2026-04-09 01:33:15 -04:00
8c7ec2953e
fix: handle bcrypt 72-byte limit and increase JWT secret length
2026-04-09 01:11:32 -04:00
6c2478ede3
fix: restore missing API endpoints, fix chart rendering, and update date filter formatting
2026-04-08 21:25:59 -04:00
532a4e2dc5
fix: resolve SSE CORS issues and fix date filter format mismatch
2026-04-08 21:15:26 -04:00
ec503b9ec6
feat: implement advanced live logs with KQL search, histogram, and live/historical modes
2026-04-08 21:01:05 -04:00
6bdb5922fa
fix: ensure shared log volume mount by default and disable container-side rotation
2026-04-08 01:42:05 -04:00
32b06afef6
feat: add .env based configuration for API, Web, and Auth options
2026-04-08 01:27:11 -04:00
31e0c5151b
fix: ensure API-deployed deckies inherit the correct log ingestion path
2026-04-08 01:09:48 -04:00
cc3d434c02
feat: add server-side validation for web-based INI deployments
2026-04-08 01:04:59 -04:00
168ecf14ab
feat: add API-only mode and web-based INI deployment
2026-04-08 00:56:25 -04:00
c544964f57
feat: migrate dashboard live logs to Server-Sent Events (SSE)
2026-04-08 00:30:31 -04:00
47f0e6da8f
fix: correctly iterate over all deckies in _build_deckies_from_ini
2026-04-08 00:19:42 -04:00
18de381a43
feat: implement dynamic decky mutation and fix dot-separated INI sections
2026-04-08 00:16:57 -04:00
1f5c6604d6
feat: integrate API lifecycle with teardown and update dependencies
2026-04-07 23:30:08 -04:00
a9c7ddec2b
fix: enforce absolute paths for state and database files
2026-04-07 23:21:16 -04:00
eb4be44c9a
feat: add dedicated Decoy Fleet inventory page and API
2026-04-07 23:15:20 -04:00
ba2faba5d5
chore: enforce strict typing and internal naming conventions across web components
2026-04-07 19:56:15 -04:00
7bc8d75242
feat: parse RFC 5424 fields and msg directly in backend
2026-04-07 15:56:01 -04:00
5f637b5272
feat: switch to JSON-based log ingestion for higher reliability
2026-04-07 15:47:29 -04:00
6ed92d080f
fix: invoke uvicorn via sys.executable to handle sudo PATH restrictions
2026-04-07 15:39:32 -04:00
1b593920cd
feat: add --api flag to deploy and new web command for dashboard
2026-04-07 15:32:04 -04:00
bad90dfb75
feat: implement background log ingestion from local file
2026-04-07 15:30:44 -04:00
52c26a2891
feat: backend support for mandatory password change on first login
2026-04-07 15:15:03 -04:00
81135cb861
fix: switch to direct bcrypt usage for Python 3.14 compatibility
2026-04-07 15:07:46 -04:00
697929a127
feat: implement Stats endpoints for web dashboard
2026-04-07 14:58:09 -04:00
b46934db46
feat: implement Logs endpoints for web dashboard
2026-04-07 14:56:25 -04:00
5b990743db
feat: implement Auth endpoints for web dashboard
2026-04-07 14:54:36 -04:00
988732f4f9
Fix all ruff lint errors across decnet/, templates/, and tests/
CI / Test (pytest) (3.11) (push) Has been cancelled
CI / Test (pytest) (3.12) (push) Has been cancelled
Security / SAST (bandit) (push) Has been cancelled
Security / Dependency audit (pip-audit) (push) Has been cancelled
CI / Lint (ruff) (push) Has been cancelled
2026-04-04 17:36:16 -03:00
35c67ec34d
Fix registry auto-discovery skipping non-service subclasses (CustomService)
CI / Lint (ruff) (push) Failing after 11s
CI / Test (pytest) (3.11) (push) Successful in 19s
CI / Test (pytest) (3.12) (push) Successful in 18s
Security / SAST (bandit) (push) Successful in 11s
Security / Dependency audit (pip-audit) (push) Successful in 18s
2026-04-04 17:29:30 -03:00
bff03d1198
Add cross-decky correlation engine and decnet correlate command
...
When the same attacker IP touches multiple deckies, the engine builds a
chronological traversal graph and reports the lateral movement path.
decnet/correlation/
parser.py — RFC 5424 line → LogEvent; handles src_ip + src field variants
graph.py — AttackerTraversal / TraversalHop data types with path/duration
engine.py — CorrelationEngine: ingest(), traversals(), report_table/json,
traversal_syslog_lines() (emits WARNING-severity RFC 5424)
__init__.py — public API re-exports
decnet/cli.py — `decnet correlate` command (--log-file, --min-deckies,
--output table|json|syslog, --emit-syslog)
tests/test_correlation.py — 49 tests: parser, graph, engine, reporting
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-04 13:53:30 -03:00
7aff040579
Add deaddeck: real interactive SSH entry-point machine
...
Introduces the 'real_ssh' service plugin backed by a genuine OpenSSH
server (not cowrie), and the 'deaddeck' archetype that uses it. The
container ships with a lived-in Linux environment and a deliberately
weak root:admin credential to invite exploitation.
- templates/real_ssh/: Dockerfile + entrypoint (configurable via env)
- decnet/services/real_ssh.py: BaseService plugin, service_cfg supports
password and hostname overrides
- decnet/archetypes.py: deaddeck archetype added
- tests/test_real_ssh.py: 17 tests covering registration, compose
fragment structure, overrides, and archetype
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-04 13:42:19 -03:00