BastionGuard/webui/bank.php
specialworld83 f0f913a209 Release 2.0
2026-07-15 10:52:22 +02:00

86 lines
7.5 KiB
PHP

<?php
include 'auth.php';
require_once __DIR__ . '/includes/config_manager.php';
$page_title = 'Safe banking - BastionGuard WebUI';
$active_page = 'bank.php';
$web = bg_web_options();
$targetUser = trim((string)($web['desktop_user'] ?? bg_detect_desktop_user()));
$bankPath = $targetUser ? bg_bastionguard_data_dir($targetUser) . '/banks.json' : '~/.local/share/BastionGuard/banks.json';
$cfg = bg_read_json('bank.json', [
'source_url' => 'https://raw.githubusercontent.com/MISP/misp-warninglists/main/lists/bank-website/list.json',
'auto_update' => false,
]);
$whitelistRead = bg_config_read(bg_config_catalog()['whitelist']);
$whitelist = [];
if (!empty($whitelistRead['parsed']) && is_array($whitelistRead['parsed'])) {
$p = $whitelistRead['parsed'];
if (isset($p['list']) && is_array($p['list'])) $whitelist = $p['list'];
elseif (isset($p['domains']) && is_array($p['domains'])) $whitelist = $p['domains'];
}
$status = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
csrf_validate();
$action = $_POST['action'] ?? '';
if ($action === 'save') {
$cfg['source_url'] = trim($_POST['source_url'] ?? $cfg['source_url']);
$cfg['auto_update'] = !empty($_POST['auto_update']);
bg_write_json('bank.json', $cfg);
bg_flash('success', bg_language()==='en' ? 'Bank settings saved.' : 'Impostazioni banche salvate.');
bg_redirect('bank.php');
} elseif ($action === 'add-white') {
$d = bg_normalize_domain($_POST['domain'] ?? '');
if ($d && !in_array($d, $whitelist, true)) $whitelist[] = $d;
sort($whitelist);
$payload = ['version'=>1, 'updated_at'=>date('Y-m-d'), 'enabled'=>true, 'list'=>array_values($whitelist)];
$r = bg_config_save_key('whitelist', json_encode($payload, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES)."\n");
bg_flash(($r['code']??1)===0 ? 'success' : 'warning', ($r['code']??1)===0 ? (bg_language()==='en'?'Whitelist updated.':'Whitelist aggiornata.') : ($r['output']??'Whitelist save error.'));
bg_redirect('bank.php');
} elseif ($action === 'del-white') {
$d = bg_normalize_domain($_POST['domain'] ?? '');
$whitelist = array_values(array_diff($whitelist, [$d]));
$payload = ['version'=>1, 'updated_at'=>date('Y-m-d'), 'enabled'=>true, 'list'=>array_values($whitelist)];
$r = bg_config_save_key('whitelist', json_encode($payload, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES)."\n");
bg_flash(($r['code']??1)===0 ? 'success' : 'warning', ($r['code']??1)===0 ? (bg_language()==='en'?'Whitelist updated.':'Whitelist aggiornata.') : ($r['output']??'Whitelist save error.'));
bg_redirect('bank.php');
} elseif ($action === 'refresh') {
$res = bg_update_banks_user($targetUser, $cfg['source_url']);
bg_flash(($res['code']??1)===0 ? 'success' : 'warning', trim((string)($res['output'] ?? '')) ?: ((bg_language()==='en')?'Bank list update completed.':'Aggiornamento lista banche completato.'));
bg_redirect('bank.php');
}
}
$banksRaw = '';
$banksVia = 'missing';
if ($targetUser) {
$res = bg_data_file_read_b64('banks', $targetUser);
if ((int)($res['code'] ?? 1) === 0) {
$decoded = base64_decode((string)$res['output'], true);
if (is_string($decoded)) { $banksRaw = $decoded; $banksVia = 'helper'; }
} elseif (is_readable($bankPath)) {
$banksRaw = (string)@file_get_contents($bankPath);
$banksVia = 'direct';
} else {
$status = trim((string)($res['output'] ?? ''));
}
}
$banks = [];
if ($banksRaw !== '') {
$j = json_decode($banksRaw, true);
$list = is_array($j) ? ($j['list'] ?? $j) : [];
if (is_array($list)) {
foreach ($list as $item) {
if (is_string($item)) $banks[] = ltrim($item, '.');
elseif (is_array($item)) $banks[] = ltrim((string)($item['value'] ?? $item['domain'] ?? ''), '.');
}
}
}
$banks = array_values(array_filter(array_unique($banks)));
include 'includes/header.php'; include 'includes/sidebar.php';
?>
<div class="page-title"><div><h1><?= bg_e(bg_language()==='en'?'Safe Zone – Banks':'Zona sicura – Banche') ?></h1><p><?= bg_e(bg_language()==='en'?'MISP bank list and local whitelist management. The list is read from the desktop-user data folder, exactly like the GTK UI.':'Gestione lista banche MISP e whitelist locale. La lista viene letta dalla cartella dati dell’utente desktop, come nella GUI GTK.') ?></p></div></div>
<?php if($status): ?><div class="alert alert-info"><?= bg_e($status) ?></div><?php endif; ?>
<div class="row g-4">
<div class="col-lg-7"><div class="card"><div class="card-body"><h5><?= bg_e(bg_language()==='en'?'Bank list':'Lista banche') ?></h5><form method="post"><?php csrf_field(); ?><input type="hidden" name="action" value="save"><label class="form-label"><?= bg_e(bg_language()==='en'?'MISP JSON list URL':'URL lista JSON MISP') ?></label><input class="form-control" name="source_url" value="<?= bg_e($cfg['source_url']) ?>"><div class="form-check form-switch mt-2"><input class="form-check-input" type="checkbox" name="auto_update" <?= $cfg['auto_update']?'checked':'' ?>><label class="form-check-label"><?= bg_e(bg_language()==='en'?'Automatic update every 6 hours':'Aggiornamento automatico ogni 6 ore') ?></label></div><button class="btn btn-outline-primary mt-3"><?= bg_e(bg_t('save')) ?></button> <button class="btn btn-primary mt-3" name="action" value="refresh"><?= bg_e(bg_language()==='en'?'Download to user data folder':'Scarica nella cartella dati utente') ?></button></form><hr><p class="small-muted mb-2"><?= bg_e(bg_language()==='en'?'Source path':'Percorso sorgente') ?>: <code><?= bg_e($bankPath) ?></code> · <?= bg_e($banksVia) ?></p><div class="list-scroll"><ul class="list-group list-group-flush"><?php foreach(array_slice($banks,0,250) as $b): ?><li class="list-group-item px-0"><code><?= bg_e($b) ?></code></li><?php endforeach; ?></ul></div><p class="small-muted mt-2"><?= count($banks) ?> <?= bg_e(bg_language()==='en'?'items loaded from ~/.local/share/BastionGuard/banks.json.':'elementi caricati da ~/.local/share/BastionGuard/banks.json.') ?></p></div></div></div>
<div class="col-lg-5"><div class="card mb-4"><div class="card-body"><h5>Whitelist BastionGuard</h5><p class="small-muted"><?= bg_e(bg_language()==='en'?'Read from':'Letta da') ?> <code><?= bg_e(bg_config_catalog()['whitelist']['path']) ?></code> via <?= bg_e($whitelistRead['via'] ?? 'direct') ?>.</p><form method="post" class="input-group mb-3"><?php csrf_field(); ?><input type="hidden" name="action" value="add-white"><input class="form-control" name="domain" placeholder="bank.example"><button class="btn btn-outline-primary"><?= bg_e(bg_t('add')) ?></button></form><?php foreach($whitelist as $d): ?><form method="post" class="d-inline-block me-1 mb-1"><?php csrf_field(); ?><input type="hidden" name="action" value="del-white"><input type="hidden" name="domain" value="<?= bg_e($d) ?>"><button class="btn btn-sm btn-light border"><?= bg_e($d) ?> ×</button></form><?php endforeach; ?></div></div><div class="card"><div class="card-body"><h5><?= bg_e(bg_language()==='en'?'Desktop sandbox':'Sandbox desktop') ?></h5><p class="text-muted mb-0"><?= bg_e(bg_language()==='en'?'Removed from this page: a WebUI must not launch graphical windows or CEF sandboxes in the user desktop. Use the BastionGuard GTK client for safe opening.':'Rimosso da questa pagina: una WebUI non deve avviare finestre grafiche o sandbox CEF sul desktop utente. Usa il client GTK BastionGuard per l’apertura sicura.') ?></p></div></div></div>
</div>
<?php include 'includes/footer.php'; ?>