Security (v1.14.1)
- Validate
video_idagainst regex on/api/status/endpoint (prevents DB probing with arbitrary strings) - Bind watch heartbeat to session — only the video loaded on
/watchcan send heartbeats (prevents cross-video time inflation) - Validate callback data:
chan_filter/chan_pagestatus checked against allowlist,logs_page/search_pagedays clamped to 1-365 - Validate
video_idin thumbnail URL fallback construction (defense-in-depth for yt-dlp output) - Separate empty-PIN logic from HMAC check for clarity and correctness
- Fix misleading status labels when
allowchan/blockchanpressed on already-resolved videos
Changed (v1.14.0)
/channelnow shows Allowed/Blocked menu with summary stats and side-by-side buttons- Filtered channel views with pagination and 📋 Channels home button
- All pagination uses consistent ◀ Back / Next ▶ buttons with disabled placeholders
- Internal: extracted
_nav_row,_edit_msg,_channel_resolve_and_add,_channel_removehelpers (-68 lines)
Added (v1.13.0)
- Starter channels: ~15 curated kid-friendly YouTube channels available on first boot and via
/channel starter(closes #9) - Per-channel Import buttons with check mark feedback for already-imported channels
- Welcome message on
/startand first-run explaining the bot's purpose /channel startercommand always available for browsing and importing starter channels