Commit Graph

270 Commits

Author SHA1 Message Date
379971022d Cancel stale playback probes and verify Linux QSV support 2026-10-13 19:02:15 -07:00
cca55edc4e Merge pull request #167 from technomancer702/codex/priority-bug-fixes
Fix login credential URLs, mobile fullscreen, and OIDC provider discovery
2026-10-13 18:35:33 -07:00
ce122eb34b Fix safe login submission, mobile fullscreen, and OIDC discovery 2026-10-13 18:31:48 -07:00
b85b160013 Merge pull request #165 from vmfasimoes/feature/enigma2-openwebif
Add Enigma2/OpenWebif M3U support: program mapping and zap-before-streaming
2026-10-13 18:06:24 -07:00
1258a3d944 Keep Live TV playing while browsing other pages 2026-10-13 18:03:49 -07:00
3af7392323 Match production FFprobe selection in program regression fixture 2026-10-13 17:59:47 -07:00
53b65b6a0d Cancel superseded Enigma2 startup and select programs throughout playback 2026-10-13 17:56:26 -07:00
f2effe0832 Merge remote-tracking branch 'origin/main' into codex/enigma2-integration
# Conflicts:
#	public/index.html
2026-10-13 17:48:52 -07:00
2550fd404d Merge pull request #166 from technomancer702/codex/ad-break-audio
Recover Chromium HLS audio at commercial transitions
2026-10-13 17:41:09 -07:00
a2c4b4a5c5 Preserve HLS subtitle and closed-caption cues across recovery 2026-10-13 17:26:25 -07:00
b9dad30f06 Recover Chromium HLS audio at ad discontinuities 2026-10-13 17:23:00 -07:00
700f63da90 Add Enigma2/OpenWebif M3U support: program mapping and zap-before-streaming
- Parse #EXTVLCOPT:program=N from M3U playlists (both full and streaming
  parsers, per channel, strict mode) and store it on playlist items
- Transcode multi-program MPEG-TS streams by mapping only the selected
  program's first video and audio stream (DVB teletext/subtitles in the
  program otherwise make FFmpeg fail to produce HLS)
- Optional per-source "zap before streaming" with configurable delay:
  POST /api/openwebif/zap takes sourceId + streamId, requires an enabled,
  zap-enabled M3U source containing that channel, derives the receiver
  from the configured source URL (never from the client), validates the
  Enigma2 service reference, uses a timeout without redirects and does
  not echo the receiver response
- Live TV: Stop button, and stop playback when leaving the page
- Tests for ordinary and program-tagged playlists and the zap endpoint

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 23:01:38 +01:00
035667cfba Merge pull request #164 from technomancer702/codex/release-only-packages
Publish container images only for published GitHub releases
2026-10-12 23:39:17 -07:00
4dece33dcc Publish container packages only for published releases 2026-10-12 23:36:57 -07:00
19d7ffdc52 Merge pull request #163 from technomancer702/codex/subtitle-track-menu
Fix duplicate subtitle choices and bump app version to 2.2.1
2026-10-12 23:16:36 -07:00
57e4acb7da Set release version to 2.2.1 2026-10-12 23:14:26 -07:00
ab1f46fa10 Bump app version to 2.2.0 for the reliability and security updates 2026-10-12 23:10:12 -07:00
d72d9cb59f Fix duplicate and inactive subtitle menu entries in both players 2026-10-12 17:45:22 -07:00
d03adab5a1 Merge pull request #162 from technomancer702/codex/playback-session-lifecycle
Release superseded playback sessions and preserve VOD seek time
2026-10-12 17:13:46 -07:00
e30978d1e2 Retire cancelled playback sessions and preserve VOD content time
Adapted from MikaelKW/nodecast-tv-plus playback lease work beginning at 43a58c7685f541498663b827c4b9d6b3753e7202. Reject superseded requests, release on cancellation, bound live restart attempts and await FFmpeg close before deleting cache.

Co-authored-by: Mikael <mikaelkwessel@gmail.com>
2026-10-12 17:11:13 -07:00
5041b1338d Merge pull request #161 from technomancer702/codex/media-authentication
Authenticate media requests with durable HttpOnly cookies and account isolation
2026-10-12 16:56:35 -07:00
1f665dcb11 Authenticate browser media with durable HttpOnly login cookies
Adapted cookie, origin, URL validation and secret handling from MikaelKW/nodecast-tv-plus. Protect API roles, revoke logins across restart, preserve existing accounts, and isolate transcode sessions by account.

Co-authored-by: Mikael <mikaelkwessel@gmail.com>
2026-10-12 16:53:15 -07:00
5598b44e12 Merge pull request #160 from technomancer702/codex/vod-duration
Display total movie and episode duration reliably
2026-10-12 16:44:27 -07:00
2999d6542f Display total VOD duration from provider metadata and stream probes
Adapted from MikaelKW/nodecast-tv-plus commit 9c6416cdba40813d44d21c8d76e31e4d9ab3155f.

Co-authored-by: Mikael <mikaelkwessel@gmail.com>
2026-10-12 16:42:23 -07:00
fc400af313 Merge pull request #159 from technomancer702/codex/container-health
Add container readiness checks and exclude local state from images
2026-10-12 16:41:44 -07:00
bd8365efc8 Add container readiness checks and exclude local state from images
Adapted from MikaelKW/nodecast-tv-plus readiness and container context work.

Co-authored-by: MikaelKW <87399352+MikaelKW@users.noreply.github.com>
2026-10-12 16:39:31 -07:00
7ce5f4693d Merge pull request #158 from technomancer702/codex/epg-refresh
Preserve complete EPG data through failed refreshes and channel ID collisions
2026-10-12 16:19:02 -07:00
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
9c4b24d4cb Merge pull request #157 from technomancer702/codex/aac-remux
Remux AAC tracks correctly without filtering other audio codecs
2026-10-12 16:13:46 -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
859bf02dbf Merge pull request #156 from technomancer702/codex/proxy-streaming
Stream proxied media without buffering whole video files
2026-10-12 16:09: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
dff5c43548 Merge pull request #155 from technomancer702/codex/db-mutation-concurrency
Preserve concurrent source and account changes
2026-10-12 16:06:05 -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