Commit Graph

238 Commits

Author SHA1 Message Date
65b9f0f395 Merge pull request 'fix: documentation update' (#15) from develop into main
All checks were successful
Build and Push Docker Image / build (push) Successful in 35s
CI / Security audit (push) Successful in 47s
CI / Tests & coverage (push) Successful in 54s
Reviewed-on: #15
2026-05-18 08:02:30 +01:00
b41f943407 fix: Remove reference to PlantUML diagrams
Some checks failed
Build and Push Docker Image / build (push) Successful in 1m3s
CI / Security audit (pull_request) Successful in 1m31s
CI / Tests & coverage (pull_request) Successful in 1m39s
Docs Check / Markdown lint (push) Failing after 18s
CI / Tests & coverage (push) Has been cancelled
CI / Security audit (push) Has been cancelled
Docs Check / Mermaid diagram parse check (push) Successful in 1m48s
2026-05-18 07:47:56 +01:00
9debd77392 docs: update ARCHITECTURE.md - fix CI/CD table, remove stale diagram refs, update data models
All checks were successful
Build and Push Docker Image / build (push) Successful in 45s
Docs Check / Markdown lint (push) Successful in 1m2s
CI / Security audit (push) Successful in 1m25s
CI / Tests & coverage (push) Successful in 1m41s
Docs Check / Mermaid diagram parse check (push) Successful in 1m48s
- CI/CD table: add docs-check.yml and licence-check.yml, correct build-image.yml trigger (release/** + develop, not main)
- Section 13 intro: clarify no PNG exports or external tooling required
- Download class diagram: add canBlocklist, addedOn, arrQueueId, arrType, arrInstanceUrl, arrContentId, arrContentType fields
- qBittorrentTorrent class diagram: add added_on field
- Remove docs/diagrams/ directory (PNG exports superseded by embedded Mermaid)
2026-05-18 07:44:41 +01:00
20dfe06866 Merge branch 'develop'
All checks were successful
CI / Security audit (push) Successful in 1m33s
CI / Tests & coverage (push) Successful in 1m40s
Create Release / release (push) Successful in 9s
Build and Push Docker Image / build (push) Successful in 18s
v1.3.1
2026-05-18 06:35:46 +01:00
a0f630fb81 chore: bump version to 1.3.1 (point release)
All checks were successful
Build and Push Docker Image / build (push) Successful in 40s
Licence Check / Dependency licence compatibility (push) Successful in 48s
CI / Security audit (push) Successful in 58s
CI / Tests & coverage (push) Successful in 1m10s
2026-05-18 06:35:16 +01:00
e640215502 chore: bump version to 1.4.0
All checks were successful
Licence Check / Dependency licence compatibility (push) Successful in 1m5s
Build and Push Docker Image / build (push) Successful in 1m17s
CI / Security audit (push) Successful in 1m24s
CI / Tests & coverage (push) Successful in 1m31s
2026-05-18 06:31:31 +01:00
972b407956 chore: sync package-lock.json version to 1.3.0 2026-05-18 06:30:57 +01:00
cf7008fd54 docs: update documentation for blocklist & search non-admin eligibility
All checks were successful
Build and Push Docker Image / build (push) Successful in 29s
Docs Check / Markdown lint (push) Successful in 50s
CI / Security audit (push) Successful in 1m30s
CI / Tests & coverage (push) Successful in 1m50s
Docs Check / Mermaid diagram parse check (push) Successful in 2m18s
- CHANGELOG: document button availability changes (all admin downloads, non-admin eligibility)
- README: update blocklist-search endpoint description with non-admin conditions
- ARCHITECTURE.md: update Authorisation Matrix, Download object table (add canBlocklist, addedOn fields), and blocklist-search API reference
2026-05-18 00:05:31 +01:00
2747ca7754 feat: allow non-admin users to blocklist & search under specific conditions
All checks were successful
Build and Push Docker Image / build (push) Successful in 37s
CI / Security audit (push) Successful in 1m30s
CI / Tests & coverage (push) Successful in 1m47s
- Added addedOn timestamp to qBittorrent torrent mapping
- Added canBlocklist helper function: true for admins, true for non-admins when (importIssues OR (torrent >1h old AND availability<100%))
- Added canBlocklist field to all download objects in /user-downloads and SSE /stream routes (8 blocks total)
- Frontend button now shows when (isAdmin OR download.canBlocklist) && download.arrQueueId
2026-05-17 23:57:06 +01:00
0341540751 feat: show blocklist & search button on all admin downloads (not just import-pending)
All checks were successful
Build and Push Docker Image / build (push) Successful in 35s
CI / Security audit (push) Successful in 1m23s
CI / Tests & coverage (push) Successful in 1m43s
- Remove importIssues condition from arr action fields threading in /user-downloads route (all 4 blocks: SAB+Sonarr, SAB+Radarr, qBit+Sonarr, qBit+Radarr)
- Remove importIssues condition from arr action fields threading in SSE /stream route (all 4 blocks)
- Move blocklist button rendering outside importIssues condition in frontend — now shows for all admin downloads with arrQueueId
2026-05-17 23:43:37 +01:00
3bb9e936c3 release: v1.3.0
All checks were successful
Build and Push Docker Image / build (push) Successful in 50s
CI / Security audit (push) Successful in 2m34s
CI / Tests & coverage (push) Successful in 2m3s
2026-05-17 23:29:12 +01:00
aef21d1b50 chore: bump to v1.3.0; update CHANGELOG, README, ARCHITECTURE docs
Some checks failed
Docs Check / Mermaid diagram parse check (push) Failing after 44s
Docs Check / Markdown lint (push) Successful in 1m7s
Build and Push Docker Image / build (push) Successful in 1m15s
Licence Check / Dependency licence compatibility (push) Successful in 1m37s
CI / Security audit (push) Successful in 2m2s
CI / Tests & coverage (push) Successful in 2m27s
2026-05-17 23:29:02 +01:00
a6fcde58cf fix: thread arr action fields through SSE handler; align import-issue tooltip with themed CSS pattern
All checks were successful
Build and Push Docker Image / build (push) Successful in 31s
CI / Security audit (push) Successful in 1m19s
CI / Tests & coverage (push) Successful in 1m36s
2026-05-17 23:20:04 +01:00
d839fa98a0 feat: blocklist & search button for import-pending downloads with caution
All checks were successful
Build and Push Docker Image / build (push) Successful in 29s
CI / Security audit (push) Successful in 1m24s
CI / Tests & coverage (push) Successful in 1m42s
- Poller now stores _instanceKey alongside _instanceUrl on Sonarr/Radarr queue records
- dashboard route threads arrQueueId/arrType/arrInstanceUrl/arrInstanceKey/arrContentId/arrContentType as admin-only fields on downloads with importIssues
- POST /api/dashboard/blocklist-search: admin-only, removes queue item with blocklist=true then triggers EpisodeSearch/MoviesSearch
- Button renders in download card header (admin + importIssues + arrQueueId only)
- Confirm dialog, loading/success/error states on the button
- Kicks a background poll on success so SSE reflects removed item promptly
2026-05-17 23:15:33 +01:00
a92ab85bc0 fix: title link wired via JS goHome() — switches to downloads, closes status, resets showAll
All checks were successful
Build and Push Docker Image / build (push) Successful in 40s
CI / Security audit (push) Successful in 1m33s
CI / Tests & coverage (push) Successful in 1m56s
2026-05-17 23:08:27 +01:00
57b127ea95 fix: title click switches to downloads tab and closes status panel (no page reload)
All checks were successful
Build and Push Docker Image / build (push) Successful in 33s
CI / Security audit (push) Successful in 1m20s
CI / Tests & coverage (push) Successful in 1m37s
2026-05-17 23:01:15 +01:00
56f42755cc fix: title logo links to /, version footer links to repo
All checks were successful
Build and Push Docker Image / build (push) Successful in 26s
CI / Security audit (push) Successful in 1m15s
CI / Tests & coverage (push) Successful in 1m36s
2026-05-17 22:58:53 +01:00
15152714fd fix: use data-tooltip CSS popup for hide-upgrade-failures checkbox, matching episode tooltip style
All checks were successful
Build and Push Docker Image / build (push) Successful in 26s
CI / Security audit (push) Successful in 1m35s
CI / Tests & coverage (push) Successful in 1m44s
2026-05-17 22:55:52 +01:00
19b9c97e64 feat: add 'Hide upgrade failures' checkbox to history controls
All checks were successful
Build and Push Docker Image / build (push) Successful in 36s
CI / Security audit (push) Successful in 1m27s
CI / Tests & coverage (push) Successful in 1m43s
2026-05-17 22:52:55 +01:00
55a5577f2a feat: render availableForUpgrade badge on failed history items where episode/movie is already on disk
All checks were successful
Build and Push Docker Image / build (push) Successful in 38s
CI / Security audit (push) Successful in 1m41s
CI / Tests & coverage (push) Successful in 1m49s
2026-05-17 21:53:58 +01:00
6139095444 feat: deduplicate history — suppress failed records superseded by successful import, flag failed+hasFile as availableForUpgrade
Some checks failed
Build and Push Docker Image / build (push) Successful in 58s
CI / Security audit (push) Has been cancelled
CI / Tests & coverage (push) Has been cancelled
Docs Check / Markdown lint (push) Successful in 1m14s
Licence Check / Dependency licence compatibility (push) Successful in 1m36s
Docs Check / Mermaid diagram parse check (push) Successful in 2m16s
2026-05-17 21:52:55 +01:00
4c9985e01a chore: bump version to 1.2.2, update CHANGELOG
All checks were successful
Create Release / release (push) Successful in 15s
Build and Push Docker Image / build (push) Successful in 1m12s
CI / Security audit (push) Successful in 2m19s
CI / Tests & coverage (push) Successful in 2m40s
v1.2.2
2026-05-17 21:22:02 +01:00
fecb96b04e fix: correct width typo 56x -> 56px
All checks were successful
Build and Push Docker Image / build (push) Successful in 29s
CI / Security audit (push) Successful in 1m34s
CI / Tests & coverage (push) Successful in 2m0s
2026-05-17 21:21:30 +01:00
c98b81c8bd fix: Reduced size of logo to 56px for better balance 2026-05-17 21:21:30 +01:00
90bf411e0c Increased size of logo to 64px for better balance 2026-05-17 21:21:30 +01:00
867e86615e fix: increase header logo to 40px, use 192px source for crispness 2026-05-17 21:21:30 +01:00
2cbe3c6b76 feat: use favicon-192 for header logo, scale to 28px for visual parity with title text 2026-05-17 21:21:30 +01:00
59adcbc36e feat: add logo to header title link 2026-05-17 21:21:30 +01:00
6865b860bc merge: develop -> main (title repo link)
All checks were successful
CI / Security audit (push) Successful in 4m30s
CI / Tests & coverage (push) Successful in 5m24s
2026-05-17 20:55:10 +01:00
9aaff5c368 feat: link sofarr title to repo
Some checks failed
Build and Push Docker Image / build (push) Successful in 30s
CI / Security audit (push) Failing after 2m56s
CI / Tests & coverage (push) Successful in 5m35s
2026-05-17 20:55:06 +01:00
ce6f9b0459 merge: develop -> main for v1.2.1 (version footer)
Some checks failed
Build and Push Docker Image / build (push) Successful in 41s
Create Release / release (push) Successful in 21s
CI / Security audit (push) Successful in 1m19s
CI / Tests & coverage (push) Has been cancelled
2026-05-17 20:35:36 +01:00
976d6527b6 Merge branch 'develop' of https://git.i3omb.com/Gandalf/sofarr into develop
Some checks failed
Build and Push Docker Image / build (push) Successful in 54s
Docs Check / Markdown lint (push) Successful in 47s
Docs Check / Mermaid diagram parse check (push) Successful in 1m18s
Licence Check / Dependency licence compatibility (push) Successful in 40s
CI / Tests & coverage (push) Has been cancelled
CI / Security audit (push) Has been cancelled
2026-05-17 20:35:08 +01:00
6a8ca90fd3 feat: add version footer to dashboard UI (v1.2.1)
- /health endpoint now includes version field
- Footer displays 'sofarr vX.Y.Z' fetched on page load
- Subtle .app-version styling (smaller, dimmed)
- Bump version to 1.2.1, update CHANGELOG
2026-05-17 20:34:59 +01:00
2d5958006c Merge pull request 'release/v1.2.0' (#14) from release/v1.2.0 into develop
Some checks failed
Build and Push Docker Image / build (push) Has been cancelled
CI / Security audit (push) Has been cancelled
CI / Tests & coverage (push) Has been cancelled
Reviewed-on: #14
2026-05-17 20:28:15 +01:00
9faf8c0ea3 Merge pull request 'release/v1.2.0' (#13) from release/v1.2.0 into main
Some checks failed
CI / Security audit (push) Has been cancelled
CI / Tests & coverage (push) Has been cancelled
Reviewed-on: #13
2026-05-17 20:26:35 +01:00
cb0e61ea36 Merge branch 'release/v1.2.0' of https://git.i3omb.com/Gandalf/sofarr into release/v1.2.0
All checks were successful
Build and Push Docker Image / build (push) Successful in 31s
CI / Security audit (push) Successful in 1m10s
CI / Tests & coverage (push) Successful in 1m4s
Create Release / release (push) Successful in 24s
CI / Security audit (pull_request) Successful in 53s
CI / Tests & coverage (pull_request) Successful in 1m12s
v1.2.0
2026-05-17 20:24:40 +01:00
bd3b28921d release: sync release/v1.2.0 with main 2026-05-17 20:24:31 +01:00
1d9e86760b merge: sync main with remote
Some checks failed
CI / Security audit (push) Has been cancelled
CI / Tests & coverage (push) Has been cancelled
2026-05-17 20:24:28 +01:00
ae3bf70008 merge: sync main with develop (licence-check workflow, branch exclusions) 2026-05-17 20:24:09 +01:00
fb719141fa ci: exclude main and release/* branches from docs-check and licence-check workflows
Some checks failed
Build and Push Docker Image / build (push) Has been cancelled
CI / Security audit (push) Has been cancelled
CI / Tests & coverage (push) Has been cancelled
2026-05-17 20:23:47 +01:00
e45c566fd7 ci: add licence-check workflow — validates production dep licences against MIT-compatible allowlist 2026-05-17 20:23:47 +01:00
81d3e0045f ci: exclude main and release/* branches from docs-check and licence-check workflows
Some checks failed
CI / Security audit (push) Has been cancelled
CI / Tests & coverage (push) Has been cancelled
CI / Security audit (pull_request) Successful in 1m6s
CI / Tests & coverage (pull_request) Successful in 1m19s
2026-05-17 20:22:59 +01:00
1f3b2adbfe ci: add licence-check workflow — validates production dep licences against MIT-compatible allowlist 2026-05-17 20:22:59 +01:00
5b84e091b0 release: sync release/v1.2.0 with main (CI workflow updates)
Some checks failed
Build and Push Docker Image / build (push) Has been cancelled
CI / Security audit (push) Has been cancelled
CI / Tests & coverage (push) Has been cancelled
Create Release / release (push) Has been cancelled
2026-05-17 20:21:29 +01:00
ad024ab87b ci: exclude main and release/* branches from docs-check and licence-check workflows
All checks were successful
Build and Push Docker Image / build (push) Successful in 37s
CI / Security audit (push) Successful in 1m5s
CI / Tests & coverage (push) Successful in 1m12s
Docs Check / Markdown lint (push) Successful in 30s
Docs Check / Mermaid diagram parse check (push) Successful in 1m32s
Licence Check / Dependency licence compatibility (push) Successful in 59s
CI / Security audit (pull_request) Successful in 1m5s
CI / Tests & coverage (pull_request) Successful in 1m10s
2026-05-17 20:20:17 +01:00
cc4f420482 ci: add licence-check workflow — validates production dep licences against MIT-compatible allowlist
Some checks failed
Build and Push Docker Image / build (push) Has been cancelled
CI / Security audit (push) Has been cancelled
CI / Tests & coverage (push) Has been cancelled
Licence Check / Dependency licence compatibility (push) Has been cancelled
2026-05-17 20:19:19 +01:00
a435c506f7 ci: disable MD024 (duplicate headings) — expected in CHANGELOG
All checks were successful
CI / Security audit (push) Successful in 1m4s
CI / Tests & coverage (push) Successful in 1m13s
2026-05-17 20:12:39 +01:00
c8c46cb9fb ci: disable MD024 (duplicate headings) — expected in CHANGELOG
All checks were successful
Build and Push Docker Image / build (push) Successful in 42s
CI / Security audit (push) Successful in 1m3s
CI / Tests & coverage (push) Successful in 1m27s
CI / Security audit (pull_request) Successful in 1m18s
CI / Tests & coverage (pull_request) Successful in 1m3s
2026-05-17 20:10:57 +01:00
0354531e95 Merge pull request 'feat: production hardening — LICENSE, Docker secrets (_FILE), graceful shutdown, URL validation, CHANGELOG (v1.2.0)' (#9) from develop into main
Some checks failed
Build and Push Docker Image / build (push) Successful in 43s
CI / Security audit (push) Successful in 56s
CI / Tests & coverage (push) Successful in 1m28s
Create Release / release (push) Successful in 23s
Docs Check / Markdown lint (push) Failing after 38s
Docs Check / Mermaid diagram parse check (push) Successful in 1m21s
Reviewed-on: #9
2026-05-17 19:44:07 +01:00
c0dd93a1ab feat: production hardening v1.2.0
Some checks failed
Build and Push Docker Image / build (push) Successful in 59s
CI / Security audit (push) Successful in 1m5s
CI / Tests & coverage (push) Successful in 1m24s
Docs Check / Markdown lint (push) Failing after 45s
Docs Check / Mermaid diagram parse check (push) Successful in 1m27s
CI / Security audit (pull_request) Successful in 51s
CI / Tests & coverage (pull_request) Successful in 1m1s
Docs Check / Markdown lint (pull_request) Failing after 39s
Docs Check / Mermaid diagram parse check (pull_request) Successful in 1m12s
Phase 1 - Licensing & Compliance:
- Add MIT LICENSE file
- Add copyright headers to server/index.js, poller.js, config.js,
  sanitizeError.js, and new loadSecrets.js

Phase 2 - Security Hardening:
- Add server/utils/loadSecrets.js: Docker secrets support via _FILE
  env var pattern (COOKIE_SECRET_FILE, EMBY_API_KEY_FILE, etc.)
- Add SSRF/URL validation in config.js: validates all configured
  service instance URLs for scheme and well-formedness at startup
- Add SIGTERM/SIGINT graceful shutdown: stops poller, drains HTTP
  connections, 10s force-exit fallback
- Warn at startup if COOKIE_SECRET is shorter than 32 characters
- Validate EMBY_URL scheme at startup
- Improve sanitizeError: redact host:port from axios error URLs
  while preserving path/query for other redaction patterns

Phase 3 - Config Robustness:
- Weak COOKIE_SECRET warning (< 32 chars)
- EMBY_URL validated via validateInstanceUrl on startup

Phase 4 - Docker & Deployment:
- .dockerignore: add tests/, coverage/, vitest.config.js,
  CHANGELOG.md, SECURITY.md, LICENSE, .markdownlint.json
- docker-compose.yaml: add commented Option B (Docker secrets
  _FILE pattern) alongside existing plain-env Option A

Phase 5 - Docs & Release Readiness:
- Add CHANGELOG.md with entries from v1.0.0 to v1.2.0
- Update SECURITY.md: supported versions table, fix Docker secrets
  note to reflect _FILE support now implemented
- Add public/.well-known/security.txt for responsible disclosure
- Bump version to 1.2.0
2026-05-17 19:40:07 +01:00