Commit Graph

240 Commits

Author SHA1 Message Date
4ed22af9e5 Preserve the guide until a complete EPG refresh can activate
Adapted from MikaelKW/nodecast-tv-plus commits c267d98d734753a09b08d267c8ec2c3fa11c33f5, b761690bac7626a3cc5ddf754d96b14a02f506fe, and 5524fdaffed5c6a44ae69474e7eaa2f18d428c75. Preserve every parser batch, decode gzip once, and retain live channel metadata.

Co-authored-by: Mikael <mikaelkwessel@gmail.com>
2026-10-12 16:16:48 -07:00
788d43a4cb Apply AAC remux filters only to matching audio tracks
Adapted from MikaelKW/nodecast-tv-plus commit 25f7cb636a07a3efb2c409ff182920ae0fbe01bd.

Co-authored-by: Mikael <mikaelkwessel@gmail.com>
2026-10-12 16:11:34 -07:00
e646e36869 fix(proxy): stream binary media with cancellation and bounded HLS buffers
Adapted from MikaelKW/nodecast-tv-plus commit 011b634417b2ecd2a2844df9808b42de831ba194. Use awaited pipeline, abort upstream on disconnect, avoid retries after headers, preserve real range support, and rewrite bounded manifests using relative proxy paths. Cover interrupted streams, first-byte delivery, ranges, redirects, split signatures, and invalid inputs.

Co-authored-by: Mikael <mikaelkwessel@gmail.com>
2026-10-12 16:06:52 -07:00
12080ba0a6 fix(db): serialize complete JSON mutations and preserve concurrent edits
Adapted from MikaelKW/nodecast-tv-plus commit 55cb8de23a37eb5683459bffed9b64c6c5dd73ae. Queue reads, validations, and writes together; return write errors to callers; preserve existing IDs and metadata; route source/user edits through the atomic operations. Cover concurrent writes, stale edits, queue recovery, and administrator races.

Co-authored-by: Mikael <mikaelkwessel@gmail.com>
2026-10-12 16:01:58 -07:00
8127d26f29 Merge pull request #154 from technomancer702/codex/remux-input-hardening
Restrict remux input protocols while preserving encrypted HLS
2026-10-12 15:45:38 -07:00
bdf00831f8 test: match application FFmpeg selection and report process signals 2026-10-12 15:44:11 -07:00
9fff0474e1 fix(remux): preserve encrypted HLS and test protocol restrictions
Allow nested crypto for encrypted HTTP HLS while rejecting top-level protocol wrappers and local-file access. Replace the HLS-only http_persistent option with HTTP multiple_requests across probe/remux/transcode paths, fixing the raw HTTP regression introduced by #124. Add real FFmpeg regression tests and PR CI.
2026-10-12 15:41:13 -07:00
138efd6007 fix(remux): validate stream URL scheme and restrict ffmpeg protocols (CWE-78)
The /api/remux endpoint passed the user-supplied 'url' query parameter
straight to 'ffmpeg -i <url>'. spawn() with an argv array prevented shell
injection, but ffmpeg itself accepts a wide set of protocol handlers
(file://, concat:, subfile:, data:, pipe:, crypto:, async:, cache:, ...)
that read from the local filesystem or compose existing protocols.
Because the resulting ffmpeg stdout is piped directly back to the
response, an attacker who could call /api/remux could read arbitrary
local files (e.g. ?url=file:///etc/passwd, concat:file://...).

Apply two layers of defence at the entry point only:

1. validateStreamUrl(): reject anything that is not a syntactically valid
   http:// or https:// URL, and reject any string containing control
   characters before parsing (so CR/LF/NUL cannot be silently stripped).

2. Pass -protocol_whitelist http,https,tls,tcp,hls to ffmpeg so that even
   if a future code path forwarded a different URL, ffmpeg would refuse
   to open file/concat/subfile/pipe/data/crypto/async/cache inputs.

Legitimate http/https stream URLs (including ports, userinfo, queries,
and HLS playlists) continue to work; only non-network schemes and
malformed inputs are rejected with HTTP 400.
2026-10-12 15:37:03 -07:00
98d2651e7b Merge pull request #124 from asandhu3/ffmpeg-fixes
Fix ffmpeg redirects. Fix max resolution setting.
2026-10-12 15:16:31 -07:00
c310e59ca1 Merge pull request #144 from andesyteoss/fix/cwe78-subtitle-url-abb1
fix(subtitle): prevent ffmpeg protocol/argument injection in /api/subtitle
2026-10-12 15:16:24 -07:00
01349d48e7 fix(subtitle): validate url scheme and index to prevent local file reads 2026-07-22 22:15:09 +01:00
f5e2c77d25 Fix ffmpeg redirects. Fix max resolution setting. 2026-04-24 15:19:19 -06:00
0e26a90dae Merge pull request #95 from okynorch/doc-update
Updated readme
2026-03-02 15:10:21 -08:00
fry
f3f9d79e8a init 2026-02-16 09:39:42 -08:00
50d337f87d chore: update plugin readme 2026-02-05 01:46:10 -08:00
de41aa04fd feat: enhance plugin system with async support and lifecycle hooks & reverted PR #79 due to Node.js v24 stream compatibility issues 2026-02-05 01:42:58 -08:00
72e14dca57 feat: enhance plugin system with async support and lifecycle hooks & reverted PR #79 due to Node.js v24 stream compatibility issues 2026-02-05 01:42:40 -08:00
6eafa871b5 Merge pull request #82 from leo3438/main
feat: add modular plugin system and developer documentation
2026-02-04 15:46:10 -08:00
31aafe4d37 Merge pull request #79 from avandeweghe/patch-1
Refactor parseStreaming to use pendingBatches array
2026-02-04 15:45:56 -08:00
146f7dd1b1 feat: add modular plugin system and documentation 2026-02-04 10:48:36 +00:00
bfc80738f4 Refactor parseStreaming to use pendingBatches array
Was running into an issue where epg wouldn't process passed the first batch. Refactored the batching to use an array and added backpressure to keep memory usage low.
2026-01-31 19:31:03 -05:00
80d2c4bfb3 fix: copy stream url bug (#69) 2026-01-31 11:09:39 -08:00
4e116d864b chore: update version number in package files 2026-01-31 11:00:43 -08:00
7006513aaf fix: remove deduplication logic from channel list 2026-01-31 10:59:28 -08:00
c8ca09011f fix: adjust timing for up next panel 2026-01-22 20:15:46 -08:00
c042ff37b1 fix: next episode modal not displaying after resume from homepage. 2026-01-22 18:55:06 -08:00
ac6c82e3fc fix: resume from homepage not correctly handling source_id 2026-01-22 18:23:48 -08:00
e83b173755 fix: safari specific fixes for video player and watch page 2026-01-22 13:35:19 -08:00
89dbb96c92 fix: race condition in playNextEpisode() 2026-01-22 00:14:42 -08:00
ea4a0a4577 fix: implemented safari webkit support for fullscreen and PiP 2026-01-21 20:36:34 -08:00
6f966f1095 fix: implement dynamic viewport height 2026-01-21 20:12:54 -08:00
47d582cb8c chore: update version number in package files 2026-01-21 17:03:44 -08:00
13badd249e chore: update version number in package files 2026-01-21 17:03:12 -08:00
cddf02b114 fix: add safari webkit support and mobile safe area adjustments 2026-01-21 15:22:34 -08:00
3be14ef2fa chore: update version number in package files 2026-01-19 15:14:16 -08:00
3272b19177 fix: updated hardware scale filters to explicitly output 8-bit format (nv12), removed conflicting -pix_fmt flag 2026-01-19 15:13:39 -08:00
8d5e94ccca chore: update version number in package files 2026-01-19 14:59:59 -08:00
7d5dbd94d6 Merge pull request #64 from technomancer702/feature/upscaling
Feature/upscaling
bug fixes
2026-01-19 14:39:39 -08:00
056555c7b4 fix: hardware transcoding 10-bit error and EPG navigation bug (Issues #61, #63) 2026-01-19 14:36:53 -08:00
059cfecdcc feat: implement 4k upscaling 2026-01-19 01:45:44 -08:00
237d11cf00 feat: implement hardware and software upscaling 2026-01-19 01:34:45 -08:00
877c6f8df9 chore: update dockerfile 2026-01-18 20:53:57 -08:00
358854ad7a chore: update dockerfile 2026-01-18 20:45:58 -08:00
4b5d6c1b78 chore: update dockerfile 2026-01-18 20:42:32 -08:00
dd7d6bbf1c chore: update dockerfile 2026-01-18 20:36:42 -08:00
4061bfa2a0 chore: update dockerfile 2026-01-18 20:33:36 -08:00
995fe12396 chore: update dockerfile 2026-01-18 20:31:14 -08:00
e08bcfcea7 chore: update dockerfile 2026-01-18 20:24:59 -08:00
c7fb245d6b Merge feature/hw-transcoding into main 2026-01-18 20:07:37 -08:00
100a26fe4e chore: update screenshots in readme and sso icon 2026-01-18 19:49:22 -08:00