Phase 2: Docker and OIDC auth
This commit is contained in:
@@ -6,24 +6,53 @@ dependency system. Uses lru_cache so connections are reused across requests.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from functools import lru_cache
|
||||
|
||||
from media_library_viewer_api.clients.jellyfin import JellyfinClient
|
||||
from media_library_viewer_api.clients.jellyseerr import JellyseerrClient
|
||||
from media_library_viewer_api.clients.ssh import RemoteSSHClient
|
||||
from media_library_viewer_api.config import get_settings
|
||||
from media_library_viewer_api.services.mail_queue import MailQueue, get_mail_queue as _get_mail_queue
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@lru_cache
|
||||
def get_jellyfin_client() -> JellyfinClient:
|
||||
"""Return a cached Jellyfin client."""
|
||||
settings = get_settings()
|
||||
logger.info("Creating Jellyfin client for %s", settings.jellyfin_url.rstrip("/") or "<unset>")
|
||||
return JellyfinClient(settings.jellyfin_url, settings.jellyfin_api_key)
|
||||
|
||||
|
||||
@lru_cache
|
||||
def get_jellyseerr_client() -> JellyseerrClient | None:
|
||||
"""Return a cached Jellyseerr client when configured, otherwise None."""
|
||||
settings = get_settings()
|
||||
if not settings.jellyseerr_url or not settings.jellyseerr_api_key:
|
||||
logger.info(
|
||||
"Jellyseerr client not configured (url=%s, api_key=%s)",
|
||||
"set" if settings.jellyseerr_url else "missing",
|
||||
"set" if settings.jellyseerr_api_key else "missing",
|
||||
)
|
||||
return None
|
||||
logger.info("Creating Jellyseerr client for %s", settings.jellyseerr_url.rstrip("/") or "<unset>")
|
||||
return JellyseerrClient(settings.jellyseerr_url, settings.jellyseerr_api_key)
|
||||
|
||||
|
||||
@lru_cache
|
||||
def get_ssh_client() -> RemoteSSHClient:
|
||||
"""Return a cached SSH client (connects on first use)."""
|
||||
settings = get_settings()
|
||||
logger.info(
|
||||
"Creating SSH client host=%s user=%s port=%s key=%s password=%s",
|
||||
settings.ssh_host or "<unset>",
|
||||
settings.ssh_username or "<unset>",
|
||||
settings.ssh_port,
|
||||
settings.ssh_key_filename or "<unset>",
|
||||
"set" if settings.ssh_password else "missing",
|
||||
)
|
||||
client = RemoteSSHClient(
|
||||
host=settings.ssh_host,
|
||||
username=settings.ssh_username,
|
||||
@@ -31,10 +60,19 @@ def get_ssh_client() -> RemoteSSHClient:
|
||||
key_filename=settings.ssh_key_filename or None,
|
||||
password=settings.ssh_password or None,
|
||||
)
|
||||
client.connect()
|
||||
try:
|
||||
client.connect()
|
||||
except Exception:
|
||||
logger.exception("Failed to establish SSH connection to %s", settings.ssh_host or "<unset>")
|
||||
raise
|
||||
return client
|
||||
|
||||
|
||||
def get_mail_queue() -> MailQueue:
|
||||
"""Return the singleton background email queue."""
|
||||
return _get_mail_queue()
|
||||
|
||||
|
||||
def get_user_id() -> str:
|
||||
"""Return the configured Jellyfin user ID, or discover the first available user."""
|
||||
settings = get_settings()
|
||||
|
||||
Reference in New Issue
Block a user