fix: pass jellyfin/jellyseerr secrets via get_machine_config and add placeholder for set fields
This commit is contained in:
@@ -130,7 +130,13 @@ def _resolve_machine(service: str, request: Request | None = None) -> dict[str,
|
||||
|
||||
def get_jellyfin_client(request: Request = None) -> JellyfinClient:
|
||||
"""Return a Jellyfin client for the selected machine."""
|
||||
machine = get_settings_store().get_machine_config(_request_machine_id(request)) or _resolve_machine("jellyfin", request)
|
||||
store = get_settings_store()
|
||||
machine_id = _request_machine_id(request)
|
||||
machine = store.get_machine_config(machine_id) if machine_id else None
|
||||
if machine is None:
|
||||
resolved = _resolve_machine("jellyfin", request)
|
||||
if resolved:
|
||||
machine = store.get_machine_config(resolved["id"])
|
||||
if machine and machine.get("jellyfin_url") and machine.get("jellyfin_api_key"):
|
||||
cache_key = (machine["id"], machine["jellyfin_url"], machine.get("jellyfin_api_key") or "")
|
||||
return _jellyfin_client_for(cache_key)
|
||||
@@ -140,7 +146,13 @@ def get_jellyfin_client(request: Request = None) -> JellyfinClient:
|
||||
|
||||
def get_jellyseerr_client(request: Request = None) -> JellyseerrClient | None:
|
||||
"""Return a cached Jellyseerr client when configured, otherwise None."""
|
||||
machine = get_settings_store().get_machine_config(_request_machine_id(request)) or _resolve_machine("jellyseerr", request)
|
||||
store = get_settings_store()
|
||||
machine_id = _request_machine_id(request)
|
||||
machine = store.get_machine_config(machine_id) if machine_id else None
|
||||
if machine is None:
|
||||
resolved = _resolve_machine("jellyseerr", request)
|
||||
if resolved:
|
||||
machine = store.get_machine_config(resolved["id"])
|
||||
if machine and machine.get("jellyseerr_url") and machine.get("jellyseerr_api_key"):
|
||||
return JellyseerrClient(machine["jellyseerr_url"], machine.get("jellyseerr_api_key") or "")
|
||||
|
||||
@@ -217,7 +229,13 @@ def get_settings_store() -> SettingsStore:
|
||||
|
||||
def get_user_id(request: Request = None) -> str:
|
||||
"""Return the configured Jellyfin user ID or discover the first available one."""
|
||||
machine = get_settings_store().get_machine_config(_request_machine_id(request)) or _resolve_machine("jellyfin", request)
|
||||
store = get_settings_store()
|
||||
machine_id = _request_machine_id(request)
|
||||
machine = store.get_machine_config(machine_id) if machine_id else None
|
||||
if machine is None:
|
||||
resolved = _resolve_machine("jellyfin", request)
|
||||
if resolved:
|
||||
machine = store.get_machine_config(resolved["id"])
|
||||
if machine and machine.get("jellyfin_user_id"):
|
||||
return str(machine["jellyfin_user_id"])
|
||||
client = get_jellyfin_client(request)
|
||||
|
||||
@@ -78,6 +78,7 @@ function MachineEditor({
|
||||
hint,
|
||||
machine,
|
||||
sshKeys,
|
||||
editingMachine,
|
||||
onChange,
|
||||
onValidateSSH,
|
||||
isValidatingSSH,
|
||||
@@ -89,6 +90,7 @@ function MachineEditor({
|
||||
hint?: string;
|
||||
machine: MonitoringMachineInput;
|
||||
sshKeys: SSHKey[];
|
||||
editingMachine?: MonitoringMachine | null;
|
||||
onChange: (
|
||||
draft:
|
||||
| MonitoringMachineInput
|
||||
@@ -107,6 +109,8 @@ function MachineEditor({
|
||||
const enabledServices = draft.services.length;
|
||||
const hasJellyfin = draft.services.includes("jellyfin");
|
||||
const hasJellyseerr = draft.services.includes("jellyseerr");
|
||||
const placeholderIfSet = (isSet: boolean | undefined) =>
|
||||
isSet ? "Set, not shown" : undefined;
|
||||
return (
|
||||
<Card variant="outlined">
|
||||
<CardContent sx={{ p: 1.5 }}>
|
||||
@@ -322,6 +326,7 @@ function MachineEditor({
|
||||
size="small"
|
||||
label="Password"
|
||||
type="password"
|
||||
placeholder={placeholderIfSet(editingMachine?.password_set)}
|
||||
value={draft.password}
|
||||
onChange={(e) =>
|
||||
setDraft((current) => ({
|
||||
@@ -419,6 +424,7 @@ function MachineEditor({
|
||||
size="small"
|
||||
label="Jellyfin API key"
|
||||
type="password"
|
||||
placeholder={placeholderIfSet(editingMachine?.jellyfin_api_key_set)}
|
||||
value={draft.jellyfin_api_key}
|
||||
onChange={(e) =>
|
||||
setDraft((current) => ({
|
||||
@@ -470,6 +476,7 @@ function MachineEditor({
|
||||
size="small"
|
||||
label="Jellyseerr API key"
|
||||
type="password"
|
||||
placeholder={placeholderIfSet(editingMachine?.jellyseerr_api_key_set)}
|
||||
value={draft.jellyseerr_api_key}
|
||||
onChange={(e) =>
|
||||
setDraft((current) => ({
|
||||
@@ -832,18 +839,34 @@ function SSHKeyManager({ sshKeys }: { sshKeys: SSHKey[] }) {
|
||||
</Typography>
|
||||
</Box>
|
||||
<Stack direction="row" spacing={1}>
|
||||
<Button
|
||||
size="small"
|
||||
onClick={() =>
|
||||
setDraft({
|
||||
id: key.id,
|
||||
name: key.name,
|
||||
private_key: "",
|
||||
passphrase: "",
|
||||
public_key: key.public_key,
|
||||
fingerprint: key.fingerprint,
|
||||
notes: key.notes,
|
||||
})
|
||||
<Button
|
||||
variant="outlined"
|
||||
onClick={() =>
|
||||
openEditMachine({
|
||||
id: selectedMachine.id,
|
||||
name: selectedMachine.name,
|
||||
mode: selectedMachine.mode,
|
||||
enabled: selectedMachine.enabled,
|
||||
services: selectedMachine.services,
|
||||
host: selectedMachine.host,
|
||||
port: selectedMachine.port,
|
||||
username: selectedMachine.username,
|
||||
key_directory: "",
|
||||
key_name: "",
|
||||
path_prefix: "",
|
||||
ssh_key_id: selectedMachine.ssh_key_id,
|
||||
ssh_private_key: "",
|
||||
ssh_private_key_passphrase: "",
|
||||
password: "",
|
||||
media_root: selectedMachine.media_root,
|
||||
jellyfin_url: selectedMachine.jellyfin_url,
|
||||
jellyfin_user_id:
|
||||
selectedMachine.jellyfin_user_id,
|
||||
jellyfin_api_key: "",
|
||||
jellyseerr_url: selectedMachine.jellyseerr_url,
|
||||
jellyseerr_api_key: "",
|
||||
notes: selectedMachine.notes,
|
||||
}, selectedMachine)
|
||||
}
|
||||
>
|
||||
Edit
|
||||
@@ -1005,6 +1028,7 @@ export function Settings() {
|
||||
const [machineDraft, setMachineDraft] = useState<MonitoringMachineInput>(
|
||||
emptyMachine(),
|
||||
);
|
||||
const [editingMachine, setEditingMachine] = useState<MonitoringMachine | null>(null);
|
||||
const [selectedMachineId, setSelectedMachineId] = useState("");
|
||||
const orderedMachines = useMemo(() => machines ?? [], [machines]);
|
||||
const selectedMachine = useMemo(
|
||||
@@ -1028,21 +1052,25 @@ export function Settings() {
|
||||
const beginLocal = () => {
|
||||
clearSSHValidation();
|
||||
setMachineDraft(emptyMachine("local"));
|
||||
setEditingMachine(null);
|
||||
setMachineDialogOpen(true);
|
||||
};
|
||||
const beginRemote = () => {
|
||||
clearSSHValidation();
|
||||
setMachineDraft(emptyMachine("ssh"));
|
||||
setEditingMachine(null);
|
||||
setMachineDialogOpen(true);
|
||||
};
|
||||
const openEditMachine = (machine: MonitoringMachineInput) => {
|
||||
const openEditMachine = (input: MonitoringMachineInput, original?: MonitoringMachine | null) => {
|
||||
clearSSHValidation();
|
||||
setMachineDraft(machine);
|
||||
setMachineDraft(input);
|
||||
setEditingMachine(original ?? null);
|
||||
setMachineDialogOpen(true);
|
||||
};
|
||||
const closeMachineDialog = () => {
|
||||
clearSSHValidation();
|
||||
setMachineDialogOpen(false);
|
||||
setEditingMachine(null);
|
||||
};
|
||||
const updateMachineDraft = (
|
||||
draft:
|
||||
@@ -1056,6 +1084,7 @@ export function Settings() {
|
||||
clearSSHValidation();
|
||||
await saveMachine.mutateAsync(draft);
|
||||
setMachineDialogOpen(false);
|
||||
setEditingMachine(null);
|
||||
setMachineDraft(emptyMachine(draft.mode));
|
||||
};
|
||||
const validateMachineSSH = async () => {
|
||||
@@ -1250,7 +1279,7 @@ export function Settings() {
|
||||
jellyseerr_url: machine.jellyseerr_url,
|
||||
jellyseerr_api_key: "",
|
||||
notes: machine.notes,
|
||||
});
|
||||
}, machine);
|
||||
}}
|
||||
/>
|
||||
</Box>
|
||||
@@ -1376,7 +1405,7 @@ export function Settings() {
|
||||
jellyseerr_url: selectedMachine.jellyseerr_url,
|
||||
jellyseerr_api_key: "",
|
||||
notes: selectedMachine.notes,
|
||||
})
|
||||
}, selectedMachine)
|
||||
}
|
||||
>
|
||||
Edit
|
||||
@@ -1425,6 +1454,7 @@ export function Settings() {
|
||||
}
|
||||
machine={machineDraft}
|
||||
sshKeys={sshKeys}
|
||||
editingMachine={editingMachine}
|
||||
onChange={updateMachineDraft}
|
||||
onValidateSSH={validateMachineSSH}
|
||||
isValidatingSSH={testMachineSSH.isPending}
|
||||
|
||||
Reference in New Issue
Block a user