- Auth stack: fold cert monitor into Auth Stack page as fourth tab (Certs); remove standalone cert page and top-level tab - cert_monitor.sh: write JSON status cache to State_Files/cert_status.json after each run; expose per-domain days/expiry via _CERT_DAYS/_CERT_EXPIRY globals - api/cert.php: new — serves cached cert status; falls back to configured domains as UNKN when no cache exists; POST action=run triggers live check - arrs db fallbacks: vv_arr_cleanup_stats/discovery_stats/recovery_stats now read from data/*.db files when log JSON files don't yet exist - config.php vv_conf_vars(): unescape bash \$ → $ so passwords with dollar signs read correctly from conf files - host1.conf: fill in HOST1_NPM_USER/PASS and HOST1_LLDAP_USER/PASS - Partnership adapter pattern: Unraid-specific container logic extracted to Plugin/unraid/Partnership/; platform-agnostic structure stays in Partnership/ - First-run wizard: uniform multi-step flow for all hosts; HOST2 pull moved to checklist; auto SSH keygen and API key creation on save - api/checklist.php: live setup checklist with pull_master action - Fullscreen toggle: hide Unraid header/menu; state persists via localStorage
43 lines
1.8 KiB
PHP
43 lines
1.8 KiB
PHP
<?php
|
|
header('Content-Type: application/json');
|
|
require_once dirname(__DIR__) . '/include/config.php';
|
|
|
|
// ── Manual remote refresh — runs remote_arr_cache_writer for one host ─────────
|
|
$_action = trim($_GET['action'] ?? '');
|
|
if ($_action === 'refresh_remote') {
|
|
$host = strtolower(trim($_GET['host'] ?? ''));
|
|
if (!preg_match('/^host\d+$/', $host)) {
|
|
echo json_encode(['ok' => false, 'error' => 'Invalid host']); exit;
|
|
}
|
|
$script = dirname(__DIR__) . '/Tools/remote_arr_cache_writer.sh';
|
|
if (!file_exists($script)) {
|
|
echo json_encode(['ok' => false, 'error' => 'remote_arr_cache_writer.sh not found']); exit;
|
|
}
|
|
set_time_limit(30);
|
|
$out = []; $exit = 0;
|
|
exec('bash ' . escapeshellarg($script) . ' --host=' . escapeshellarg(strtoupper($host)) . ' 2>&1', $out, $exit);
|
|
|
|
$cacheFile = VV_CACHE_DIR . '/arrs_remote_' . $host . '.json';
|
|
$node = null;
|
|
if (file_exists($cacheFile)) {
|
|
$node = json_decode(file_get_contents($cacheFile), true) ?: null;
|
|
if ($node) {
|
|
$node['cached'] = true;
|
|
$node['cache_age'] = time() - (int)filemtime($cacheFile);
|
|
}
|
|
}
|
|
// Bust the main arrs cache so next poll gets fresh data
|
|
@unlink(VV_CACHE_DIR . '/arrs.json');
|
|
echo json_encode(['ok' => $exit === 0, 'node' => $node, 'output' => implode("\n", $out)]);
|
|
exit;
|
|
}
|
|
unset($_action);
|
|
|
|
// ── Normal data load ──────────────────────────────────────────────────────────
|
|
$_vv_cached = vv_cache_read('arrs', 300);
|
|
if ($_vv_cached !== null) { echo json_encode($_vv_cached); exit; }
|
|
unset($_vv_cached);
|
|
|
|
require_once dirname(__DIR__) . '/include/arrs.php';
|
|
echo json_encode(vv_arrs_all());
|