mirror of
https://github.com/euzu/tuliprox.git
synced 2026-10-02 14:02:22 +02:00
1f94d51c765fa0ff005cd59063c62ddfcb8a19dd
4
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
67d75d7ab4 |
docs(dvr): correct the operator reference and repoint the doctor
The documentation described a system that no longer exists, and in two places described the opposite of what the code now does. - The layout section documented `<recording-root>/users/<owner-id>/<rel>` for private recordings and `shared/<rel>` for shared ones. That resolver was deleted: recordings are stored owner-independently at `<recording-root>/<rel>`, because one physical file is shared by every user who asked for it. The organised layouts and the component sanitisation rules are now documented as they are implemented. - The config reference claimed persisted queue recovery "is tolerant of corruption" and "starts with an empty transfer queue instead of aborting server boot". The queue now fails closed: a damaged database is rebuilt from the recovery history, and a database ahead of every surviving history refuses to start. An operator following the old text would have expected silent recovery from a condition that is deliberately fatal. - `download.read` / `download.write` were still listed as grantable permissions after their removal, and `recording.write` after its split. bin/dvr_doctor.sh looked for `downloads_state.json` and summarised it with jq. That file never existed under this name, and the queue it stood for is now a B+Tree, so the section printed "(absent)" and skipped its summary exactly when an operator needed it. It now reports the repository and its recovery generations: the CURRENT pointer, the retained generation pair, journal sizes, the fail-closed case where a database has no history, and a warning when the recovery directory shares a filesystem with the database — which survives a corrupt file but not the loss of the volume it exists to protect against. CHANGELOG records the three breaking changes: the non-migrating queue, the permission split, and the moved recording files. |
||
|
|
5561ff7690 |
feat(auth)!: split recording.write into create, manage and delete
A single write permission could not express the policy the DVR needs: a user who may request a recording is not necessarily one who may cancel someone else's, and neither implies the right to delete a file. Replace it with recording.create, recording.manage and recording.delete, and map each action onto the one it actually needs: - create private/shared -> recording.create - edit, cancel, manage rules -> recording.manage - delete, system retention sweep -> recording.delete The split renumbers every permission bit above recording.read, so CURRENT_PERMISSION_SCHEMA_VERSION is bumped to 4 and tokens issued earlier fail closed at the validator instead of having their bits reinterpreted. The removed recording.write name now decodes to nothing, so a groups file that still lists it loses the permission rather than silently gaining one of the three replacements. Permission bit values are frozen in a test: they are the wire format, and reordering the enum would reinterpret every issued token. |
||
|
|
3d42c7ab9e | DVR Feature | ||
|
|
16d32d1298 |
DVR Feature (#819)
feat: complete DVR and improve streaming, security, configuration, and UI Complete the Digital Video Recorder subsystem and add a broad set of reliability, security, streaming, configuration, processing, and Web UI improvements across Tuliprox. DVR: * complete live recording and provider-aware VOD download support * add recording queue, workers, scheduling, and recurring recording rules * add conflict detection and capacity-aware scheduling * add pause, resume, retry, edit, cancel, and delete workflows * add recording quotas and configurable retention policies * add crash recovery and startup reconciliation * add durable lifecycle notifications with per-channel retries * add DVR health monitoring and diagnostic tooling * add secure access to recordings, thumbnails, and subtitles * add WebSocket notifications for recording and rule changes * add Web UI management for recordings, rules, progress, and task state * add RBAC, configuration, documentation, and i18n support Streaming and HLS: * fix shared-stream idle handling and release dead provider streams correctly * stop tee streams when both client and cache consumers are gone * cancel provisioning probes when client streams terminate * fix transient HLS origin work accounting and intermittent 503 responses * make stream buffer byte limits configurable * make shared subscriber idle timeout configurable * make initial HLS manifest wait timeout configurable * add configurable TS chunk packet count * add configurable HLS refresh failure backoff * centralize redirect limits and retry jitter handling * improve provider DNS refresh behavior and failover tuning * preserve UTF-8 characters in catchup templates * improve stream history validation and persistence error handling Security: * use constant-time credential comparisons * harden library and media path handling against traversal and symlink escapes * only trust forwarded client IP headers from configured trusted proxies * redact credentials and sensitive URL data from logs * reject invalid authentication status-code configuration * deny users with unresolved plans or invalid content filters * improve authentication error handling across proxy and HLS endpoints Configuration and reliability: * prevent invalid api-proxy.yml reloads from terminating the running server * fully validate API proxy configuration before persisting changes * log configuration and EPG cleanup failures instead of silently discarding them * keep the last valid configuration active after failed hot reloads * align backend and shared media-server validation * remove duplicated path and normalization logic * improve DNS-store recovery and Windows rename fallback handling * reject invalid duration, timestamp, and numeric conversions safely * fix playlist bouquet save error handling * fix provider record update detection * fix cache boundary handling * improve startup and persistence failure diagnostics Filtering, search, sorting, and processing: * add field-scoped playlist explorer search * centralize shared stream-history search field definitions * extend the filter DSL with string, set, and numeric operators * add EPG ID, channel number, and detected quality as filterable fields * add filter dry-run preview API with match statistics and samples * report filter syntax errors with line and column information * add natural numeric-aware sorting * add quality-aware channel deduplication * add accent-independent deduplication * move natural sorting and quality detection helpers into shared code * persist explorer search-field selection across reloads User plans and content access: * add reusable API user plans for capability tiers * support inherited cluster and connection limits with per-user overrides * add plan-level and user-level content filters * enforce content filters across Xtream, M3U, direct playback, resource access, stream info, short EPG, categories, and XMLTV * add trial plans with automatic expiry and Trial status * add plan selection and content filtering to the user editor * add full plan management to the API configuration Web UI * migrate the API user database to schema V7 with plan and filter persistence Web UI and accessibility: * add live logging console to the stats page * improve login error handling and prevent duplicate authentication requests * add keyboard navigation to tabs, menus, tables, and search * add ARIA roles, labels, validation state, and live-region feedback * add confirmation dialogs for destructive actions * add unsaved-change warnings and Ctrl/Cmd+S shortcuts * add loading, progress, empty, and in-flight states across views * improve dropdown and single-selection behavior * add clipboard and credential-copy helpers * persist table pagination and explorer search preferences * improve error recovery when UI context providers are unavailable * remove multiple panic-prone unwrap and browser API paths * replace remaining hardcoded UI strings with translation keys Maintenance: * resolve backend and frontend compiler and Clippy warnings * update packages and test fixtures * consolidate duplicated helpers and validation logic * improve documentation for configuration, filters, plans, DVR, and REST APIs * add and update tests for migrations, filters, deduplication, sorting, configuration, streaming, and accessibility behavior |