Files
Adyrem bc838dfcb6
Ansible Lint / lint (push) Successful in 7s
Add jellyfin media stack with full service automation
- New jellyfin Ansible role: Docker stack (Jellyfin, qBittorrent, Radarr,
  Sonarr, Prowlarr, FlareSolverr, Jellyseerr) with NVIDIA GPU passthrough
- configure_services.yml automates download clients, root folders, Prowlarr
  indexers/apps, qBittorrent credential pre-seeding, and Jellyseerr setup
- Fix TPB Cardigann season search: apibay.org returns 0 for season-level
  queries (e.g. the.boys.s05); patch strips season/ep from tv-search params
  and locks the definition file read-only to survive Prowlarr refreshes
- Fix Pi-hole update_hosts.py regex: use re.DOTALL + count=1 to handle
  multi-line arrays without overwriting the DHCP section
- Add phone WireGuard peer, devbox Traefik/DNS entries, TLS cert plumbing,
  firewall rule for Traefik IP to Proxmox web UI

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 18:31:30 +02:00

18 lines
730 B
Django/Jinja

#!/usr/bin/env python3
import hashlib, os, base64
password = "{{ qbittorrent_webui_password }}"
salt = os.urandom(16)
dk = hashlib.pbkdf2_hmac("sha512", password.encode(), salt, 100000)
pw_hash = "@ByteArray(" + base64.b64encode(salt).decode() + ":" + base64.b64encode(dk).decode() + ")"
os.makedirs("/containers/qbittorrent/config/qBittorrent", exist_ok=True)
with open("/containers/qbittorrent/config/qBittorrent/qBittorrent.conf", "w") as f:
f.write("[Preferences]\n")
f.write('WebUI\\Password_PBKDF2="{}"\n'.format(pw_hash))
f.write("WebUI\\Port=5080\n")
f.write("WebUI\\Username=admin\n")
f.write("WebUI\\LocalHostAuth=false\n")
f.write("WebUI\\ServerDomains=*\n")
f.write("WebUI\\Address=*\n")