๐ XC_VM v2.5.2
โจ Major Features
๐ฌ Player v2
- Added the new Player v2 web application with dedicated frontend assets, SPA scripts, styles and vendored libraries.
- Added Player v2 access-code authentication and scope wiring.
- Added stream and subtitle token generation through the centralized token system.
- Added Active Code login support for Player v2.
- Hardened Player v2 against IDOR and XSS vulnerabilities.
- Added output restrictions and protection against empty output configurations.
- Improved legacy player integration and controller compatibility.
- Restored player resize authorization checks.
- Made channel listings fail-closed when ACL validation fails.
- Added escaping for catalog poster URLs and category emoji.
๐๏ธ Active Codes & Category Templates
- Expanded the Smart Activation Codes system with the complete code lifecycle.
- Integrated Active Codes into reseller and admin line/MAG workflows.
- Added category-template
custom_datasupport to activation codes. - Added admin and reseller interfaces for Category Templates.
- Added automatic application of template
custom_datato supported entities. - Restricted
applyToAlloperations according to template visibility. - Improved Active Code tables using the standard DataTable implementation.
- Localized Active Code management pages and restored missing
ac_*translations. - Added server-side voucher details rendering.
- Fixed package and bouquet selection, null handling and reseller portal URLs.
- Fixed device-locked activation codes so they can only be used by their assigned device.
- Prevented concurrent requests from activating the same code more than once.
- Fixed an information disclosure issue where locked codes could expose their bound MAC address.
๐ Security
- Added a unique per-install
OPENSSL_EXTRAsecret for stronger installation-specific cryptographic isolation. - Added tamper-proof stream tokens using AES-256-GCM, configurable per panel.
- Hardened stream authentication by performing constant-time comparisons for shared secrets and HMAC stream links.
- Hardened admin and reseller authentication with fresh session IDs and improved session-cookie handling.
- Restored login flood protection for blocked addresses.
- Hardened image-resize requests against SSRF and DNS rebinding.
- Added TLS verification for outbound image requests, with TLS verification disabled only for trusted servers.
- Removed credentialed reflected-Origin CORS behavior from the Player API.
- Hardened reseller API authentication against operator-precedence issues.
- Prevented empty output configurations from bypassing authorization logic.
- Improved device and activation-code authorization boundaries.
๐๏ธ Bootstrap & Core Architecture
BootKernel
- Replaced the monolithic procedural
XC_Bootstrapflow with an injectableBootKernelpipeline. - Added dedicated PSR-4
ConstantsInitializerandErrorRespondercomponents. - Consolidated legacy bootstrap prelude shims into
ConstantsInitializer::init(). - Routed Web API database initialization through the shared bootstrap stages.
- Removed redundant
require_onceoperations from the streaming bootstrap path. - Centralized
STATUS_*initialization. - Added explicit handling for bootstrap stage skip paths and side-effect stages.
- Converted remaining procedural prelude code into backward-compatible shims.
- Added documentation describing the purpose and lifecycle of the bootstrap system.
- Removed stale documentation references to the old prelude files.
โ๏ธ Configuration
- Moved frequently edited release constants to clearly visible top-of-file
define()declarations. - Improved boolean configuration handling with the corrected
getBool()behavior. - Hardened Web API profile guards and handling of falsy HTTP status codes.
- Fixed fanout idle-buffer ratio handling so decimal values such as
0.25are accepted.
๐งน Code Quality & Refactoring
Rector Migration
- Added a dedicated Rector refactoring infrastructure with configuration, documentation and Make targets.
- Applied reviewed Rector transformations across core, streaming, public controllers and Ministra components.
- Performed multiple convergence passes to simplify control flow and remove dead code.
- Decomposed
RadioService::process()and itsmassEdit()logic into smaller tested helpers. - Improved type declarations throughout the codebase.
- Corrected overly restrictive automatically inferred parameter types.
- Added nullable PID support across process-management paths.
- Restored access-control conditions affected by automated transformations.
- Reverted unsafe
__DIR__include transformations that could break table loading. - Converted inline
\XcVm\...fully-qualified references to normal PSR-4 imports. - Reworked database access to use
DatabaseAware::db()instead of passing the global$dbthrough call chains. - Added additional Router, Translator and parsing cleanups.
๐จ Coding Standards
- Adopted the project's K&R + tab formatting convention across the codebase.
- Required parameter type hints as part of the coding-standard migration.
- Updated PHPCS rules and documented the remaining exceptions.
- Kept
extract()prohibited while explicitly allowing selected safeis_null()usage. - Resolved PHPStan and PHPCS failures introduced during the refactoring work.
- Updated the PHPStan dependency.
๐งช Testing
-
Added broader bootstrap tests covering stage execution, skipped stages and side effects.
-
Added a dual-backend test database supporting SQLite and MariaDB.
-
Added panel-aware test skipping for environments where integration tests cannot run.
-
Expanded core test coverage for:
- Database and migrations
- Settings and repositories
- FileCache
- Authorization
- Brute-force protection
- DomainResolver
- RequestManager
- XML streaming
- HTTP request abstractions and sanitizers
- Update channels
- Module extension registries
-
Added tests for
ChannelServicemass-edit and ordering branches. -
Improved the SQLite test harness after strict-typing changes.
-
Moved
phpunit.pharinto thetests/directory and updated references. -
Reduced test-run noise from stdout and
error_log.
๐ Admin UI
- Restored the Users navigation tabs from the bottom "More" catch-all menu.
- Fixed saving edits from the new UI returning an empty page.
- Fixed adding streams without an icon.
- Fixed deletion of unpaired MAG and Enigma2 devices.
- Restored the Streams page Resources column data.
- Fixed CPU information so it is populated correctly from the first resource pass and remains available.
- Added responsive-table configuration at the panel level.
- Added profile appearance/customizer options to the user profile editor.
- Added bouquet sorting controls for moving entries up, down, to the top or to the bottom.
- Applied the live-channel filter correctly on the live connections page.
๐บ VOD & Streaming
- Added
MediaAnalyzedEventdispatch after successful VOD media analysis. - Improved VOD stream Range worker lifetime during concurrent requests.
- Exposed bouquet ID, name and order through bouquet listing output.
- Added safeguards around cached FileCache instances and static cache deletion helpers.
- Fixed database connections to explicitly use
utf8mb4. - Improved handling of nullable database hosts for CLI bootstrap compatibility.
- Fixed CLI monitor crashes caused by nullable process IDs.
- Fixed server permission handling when permissions are null.
- Improved live/on-demand and fanout-related authentication and process handling.
๐ ๏ธ Stability & Bug Fixes
- Fixed stream resource reporting and restored missing resource information.
- Fixed new UI edit submissions returning empty responses.
- Fixed stream creation when no icon is supplied.
- Fixed deletion of devices that have not yet been paired.
- Fixed several nullability issues exposed by stricter typing.
- Fixed transactional database operations so an
Erroralso triggers a rollback. - Fixed concurrent on-demand viewer startup so multiple viewers do not start the same stopped stream more than once.
- Fixed various authentication, access-control and process-management edge cases.
- Fixed stale configuration and documentation references left behind by the bootstrap migration.
๐ Documentation & Maintenance
- Reworked bootstrap documentation to describe the new BootKernel architecture.
- Updated contributor and development infrastructure to support the ongoing Rector/PSR-4 modernization.
- Removed obsolete bootstrap references and unused legacy code paths.
- Integrated dependency updates and community pull requests.
- Continued migration toward stricter typing, test coverage and maintainable PSR-4 architecture.