86 lines
7.5 KiB
PHP
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'; ?>
|