verifyCsrfToken($_POST['csrf_token'] ?? '')) {
$error = 'Invalid security token. Please try again.';
} else {
$postAction = $_POST['action'] ?? '';
switch ($postAction) {
case 'create':
if (!hasPermission('create_peers')) {
$error = 'You do not have permission to create ASNs.';
break;
}
$asnNumber = trim($_POST['asn'] ?? '');
$name = trim($_POST['name'] ?? '');
$description = trim($_POST['description'] ?? '');
// Validate ASN
if (!$validator->validateASN($asnNumber)) {
$error = 'Invalid ASN number.';
break;
}
if (empty($name)) {
$error = 'Name is required.';
break;
}
// Build defaults from form
$defaults = buildDefaultsFromForm($_POST);
$result = $asnManager->create($asnNumber, $name, $description, $defaults);
if ($result['success']) {
$logger->log('asn', 'Created ASN', ['asn' => $asnNumber, 'name' => $name]);
header('Location: ?page=asns&message=ASN created successfully');
exit;
} else {
$error = $result['message'];
}
break;
case 'update':
if (!hasPermission('edit_peers')) {
$error = 'You do not have permission to edit ASNs.';
break;
}
$id = $_POST['id'] ?? '';
$name = trim($_POST['name'] ?? '');
$description = trim($_POST['description'] ?? '');
if (empty($name)) {
$error = 'Name is required.';
break;
}
$defaults = buildDefaultsFromForm($_POST);
$result = $asnManager->update($id, [
'name' => $name,
'description' => $description,
'defaults' => $defaults,
]);
if ($result['success']) {
$logger->log('asn', 'Updated ASN', ['id' => $id, 'name' => $name]);
header('Location: ?page=asns&message=ASN updated successfully');
exit;
} else {
$error = $result['message'];
}
break;
case 'delete':
if (!hasPermission('delete_peers')) {
$error = 'You do not have permission to delete ASNs.';
break;
}
$id = $_POST['id'] ?? '';
$asn = $asnManager->get($id);
if (!$asn) {
$error = 'ASN not found.';
break;
}
$result = $asnManager->delete($id);
if ($result['success']) {
$logger->log('asn', 'Deleted ASN', ['asn' => $asn['asn'], 'name' => $asn['name']]);
header('Location: ?page=asns&message=ASN deleted successfully');
exit;
} else {
$error = $result['message'];
}
break;
}
}
}
// Get message from query string
if (isset($_GET['message'])) {
$message = $_GET['message'];
}
// Helper function to build defaults from form
function buildDefaultsFromForm(array $post): array {
$defaults = [];
// String fields
$stringFields = [
'router_id', 'source4', 'source6', 'irr_server', 'rtr_server',
'bgpq_path', 'bgpq_args', 'bird_directory', 'bird_socket',
'cache_directory', 'log_file', 'hostname', 'peeringdb_api_key',
'peeringdb_cache_file', 'peeringdb_query_timeout', 'kernel_table',
];
foreach ($stringFields as $field) {
if (isset($post[$field]) && $post[$field] !== '') {
$defaults[$field] = trim($post[$field]);
}
}
// Boolean fields
$booleanFields = [
'keep_filtered', 'merge_paths', 'rpki_filter', 'irr_filter',
'transit_locking', 'graceful_shutdown', 'no_announce',
];
foreach ($booleanFields as $field) {
if (isset($post[$field])) {
$defaults[$field] = $post[$field] === '1';
}
}
// Integer fields
$intFields = [
'default_route_limit4', 'default_route_limit6', 'pref_src4_placeholder',
'pref_src6_placeholder', 'kernel_learn', 'kernel_export',
];
foreach ($intFields as $field) {
if (isset($post[$field]) && $post[$field] !== '') {
$defaults[$field] = (int) $post[$field];
}
}
// Array fields (comma-separated)
$arrayFields = [
'prefixes4' => 'prefixes4',
'prefixes6' => 'prefixes6',
'communities_blackhole' => 'blackhole',
'communities_nopeer' => 'nopeer',
];
foreach ($arrayFields as $postField => $defaultField) {
if (isset($post[$postField]) && $post[$postField] !== '') {
$values = array_filter(array_map('trim', explode(',', $post[$postField])));
if (!empty($values)) {
$defaults[$defaultField] = $values;
}
}
}
return $defaults;
}
// Get ASN for edit
$editAsn = null;
if ($action === 'edit' && $id) {
$editAsn = $asnManager->get($id);
if (!$editAsn) {
$error = 'ASN not found.';
$action = 'list';
}
}
// Get all ASNs for list view
$asns = $asnManager->getAll();
?>
= e($message) ?>
= e($error) ?>
No ASNs configured
Get started by creating your first ASN.
Create ASN
| ASN |
Name |
Description |
Router ID |
Nodes |
|
getByAsn($asn['id']);
?>
|
AS= e($asn['asn']) ?>
|
= e($asn['name']) ?> |
= e($asn['description'] ?? '-') ?> |
= e($asn['defaults']['router_id'] ?? '-') ?>
|
= count($asnNodes) ?>
|
Edit
|