Commit graph

5 commits

Author SHA1 Message Date
Snider
d3f31fd6f7 fix(content): add missing strict_types and fix route path casing
Some checks failed
CI / PHP 8.3 (pull_request) Failing after 4s
CI / PHP 8.4 (pull_request) Failing after 5s
Add declare(strict_types=1) to 5 PHP files missing it (routes/console.php,
4 feature tests). Fix Boot.php route includes from Routes/ to routes/ to
match actual directory casing — prevents breakage on case-sensitive filesystems.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-17 09:08:03 +00:00
Claude
12bb5509d5
chore: fix pint code style and add test config
Some checks failed
CI / tests (push) Failing after 1m24s
Add phpunit.xml and tests/Pest.php for standalone test execution.
Apply Laravel Pint formatting fixes across all source files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 03:50:06 +00:00
Snider
fa4893d064 fix(security): require HTMLPurifier for XSS sanitisation
The previous getSanitisedContent() method fell back to strip_tags() when
HTMLPurifier was unavailable. This fallback was insecure as strip_tags()
does not sanitise attributes, allowing XSS via onclick, onerror, and
javascript: URLs.

Changes:
- Created Services/HtmlSanitiser.php using HTMLPurifier as the sole sanitiser
- Added ezyang/htmlpurifier as a required dependency in composer.json
- Added boot-time validation that throws RuntimeException if missing
- Removed insecure strip_tags() fallback from ContentItem model
- Added 30+ unit tests covering XSS attack vectors

Closes SEC-002 from TODO.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 12:34:35 +00:00
Snider
6ede1b1a20 refactor: rename namespace Core\Content to Core\Mod\Content
Aligns content module namespace with the standard module structure
convention (Core\Mod\{Name}) for consistency across the monorepo.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 16:24:53 +00:00
Snider
f990dc1bd3 monorepo sepration 2026-01-26 23:59:46 +00:00