- FallBack tab: per-node tier inventory + active fallback card with duration, tier, handback strikes, running container status - Watchdog tab: live system health (RAM bar + thresholds, load, uptime, daemon), docker watchdog strikes + skip list + restart history, stability strikes + reboot log, resource pressure alert card, config inventory (mem limits, required, pause/stop lists) - Swapped partnership/arrs tab order; FallBack between partnership and watchdog - Plugin source tree moved from Plugin/usr/local/emhttp/plugins/varaverk/ to Plugin/unraid/ - Deployment/ conf templates added
79 lines
2.7 KiB
PHP
79 lines
2.7 KiB
PHP
<?php
|
|
// Move a script between *_SCRIPTS arrays in master.conf.
|
|
// POST: script (rel path), to_array (var name, or '' to remove from all arrays).
|
|
header('Content-Type: application/json');
|
|
require_once dirname(__DIR__) . '/include/config.php';
|
|
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
|
echo json_encode(['ok' => false, 'error' => 'POST only']);
|
|
exit;
|
|
}
|
|
|
|
$script = trim($_POST['script'] ?? '');
|
|
$toArray = trim($_POST['to_array'] ?? '');
|
|
|
|
if (!$script || str_contains($script, '..') || !preg_match('/^[A-Za-z0-9_.\-\/]+\.sh$/', $script)) {
|
|
echo json_encode(['ok' => false, 'error' => 'Invalid script']);
|
|
exit;
|
|
}
|
|
if ($toArray && !preg_match('/^[A-Z_]+_SCRIPTS$/', $toArray)) {
|
|
echo json_encode(['ok' => false, 'error' => 'Invalid array name']);
|
|
exit;
|
|
}
|
|
|
|
$confPath = CONF_DIR . '/master.conf';
|
|
if (!file_exists($confPath)) {
|
|
echo json_encode(['ok' => false, 'error' => 'master.conf not found']);
|
|
exit;
|
|
}
|
|
|
|
$lines = file($confPath, FILE_KEEP_BLANK_LINES);
|
|
if (!$lines) {
|
|
echo json_encode(['ok' => false, 'error' => 'Could not read master.conf']);
|
|
exit;
|
|
}
|
|
|
|
$scriptEsc = preg_quote($script, '/');
|
|
$removedLine = null;
|
|
$inArray = false;
|
|
|
|
// Step 1: find and remove the script line from whatever array it is currently in.
|
|
$newLines = [];
|
|
foreach ($lines as $line) {
|
|
if (preg_match('/^\s*[A-Z_]+_SCRIPTS\s*=\s*\(/', $line)) $inArray = true;
|
|
if ($inArray && preg_match('/^\s*\)\s*(?:#.*)?$/', $line) && !str_contains($line, '(')) $inArray = false;
|
|
if ($inArray && preg_match('/^\s*(?:#\s*)?"' . $scriptEsc . '(?:\s[^"]*)?"/', $line)) {
|
|
$removedLine = ' "' . $script . '"' . "\n"; // normalise indentation when re-inserting
|
|
continue; // drop from current location
|
|
}
|
|
$newLines[] = $line;
|
|
}
|
|
|
|
// Step 2: insert into target array (if specified).
|
|
if ($toArray) {
|
|
$resultLines = [];
|
|
$inTarget = false;
|
|
$inserted = false;
|
|
foreach ($newLines as $line) {
|
|
if (preg_match('/^\s*' . preg_quote($toArray, '/') . '\s*=\s*\(/', $line)) $inTarget = true;
|
|
if ($inTarget && !$inserted && preg_match('/^\s*\)\s*(?:#.*)?$/', $line) && !str_contains($line, '(')) {
|
|
$resultLines[] = $removedLine ?? (' "' . $script . '"' . "\n");
|
|
$inTarget = false;
|
|
$inserted = true;
|
|
}
|
|
$resultLines[] = $line;
|
|
}
|
|
if (!$inserted) {
|
|
echo json_encode(['ok' => false, 'error' => 'Target array "' . $toArray . '" not found in master.conf']);
|
|
exit;
|
|
}
|
|
$newLines = $resultLines;
|
|
}
|
|
|
|
if (file_put_contents($confPath, implode('', $newLines)) === false) {
|
|
echo json_encode(['ok' => false, 'error' => 'Write failed']);
|
|
exit;
|
|
}
|
|
|
|
echo json_encode(['ok' => true]);
|