Replace array_map with foreach

This commit is contained in:
Ely Deckers 2022-09-25 20:13:29 +02:00
parent e603ca1a7b
commit 40c5ca87cd
1 changed files with 147 additions and 72 deletions

View File

@ -292,11 +292,6 @@ class Util
return array_merge(...$multi_dimensional_array) ?: []; return array_merge(...$multi_dimensional_array) ?: [];
} }
public static function array_zip(array $keys, array $values): array
{
return array_map(null, $keys, $values);
}
public static function b2int(bool $b): int public static function b2int(bool $b): int
{ {
return (int)$b; return (int)$b;
@ -326,16 +321,14 @@ class NetworkInterface
{ {
public static function retrieve_wan_interfaces(): array public static function retrieve_wan_interfaces(): array
{ {
$if_descriptions = PfEnv::get_configured_interface_with_descr(true); $interfaces = [];
$interfaces = array_map(function ($interface) { foreach (PfEnv::get_configured_interface_with_descr(true) as $if_name => $description) {
list ($if_name, $description) = $interface; $interfaces[] = array_merge(
return array_merge(
PfEnv::get_interface_info($if_name), PfEnv::get_interface_info($if_name),
["description" => $description], ["description" => $description],
); );
}, Util::array_zip(array_keys($if_descriptions), array_values($if_descriptions))); }
return array_filter($interfaces, function ($iface_info_ext) { return array_filter($interfaces, function ($iface_info_ext) {
$has_gw = array_key_exists("gateway", $iface_info_ext); $has_gw = array_key_exists("gateway", $iface_info_ext);
@ -437,9 +430,12 @@ class Discovery
{ {
public static function gw() public static function gw()
{ {
self::print_json(array_map( $gateway_discoveries = [];
fn($gw) => ["{#GATEWAY}" => $gw["name"]], foreach (PfEnv::return_gateways_status(true) as $gateway) {
array_values(PfEnv::return_gateways_status(true)))); $gateway_discoveries[] = ["{#GATEWAY}" => $gateway["name"]];
}
self::print_json($gateway_discoveries);
} }
public static function wan() public static function wan()
@ -475,10 +471,15 @@ class Discovery
public static function openvpn_server() public static function openvpn_server()
{ {
self::print_json(array_map(fn($server) => [ $active_openvpn_server_discoveries = [];
"{#SERVER}" => $server["vpnid"], foreach (OpenVpn::get_active_servers() as $server) {
"{#NAME}" => self::sanitize_name($server["name"])], $active_openvpn_server_discoveries[] = [
OpenVpn::get_active_servers())); "{#SERVER}" => $server["vpnid"],
"{#NAME}" => self::sanitize_name($server["name"]),
];
}
self::print_json($active_openvpn_server_discoveries);
} }
public static function openvpn_server_user() public static function openvpn_server_user()
@ -492,30 +493,43 @@ class Discovery
$servers_with_relevant_mode, $servers_with_relevant_mode,
fn($server) => is_array($server["conns"])); fn($server) => is_array($server["conns"]));
self::print_json(Util::array_flatten(array_map(fn($s) => self::map_server($s), $servers_with_conns))); $server_discoveries = [];
foreach ($servers_with_conns as $server) {
$server_discoveries[] = self::map_server($server);
}
self::print_json(Util::array_flatten($server_discoveries));
} }
public static function openvpn_client() public static function openvpn_client()
{ {
self::print_json(array_map(fn($client) => [ $client_discoveries = [];
"{#CLIENT}" => $client["vpnid"], foreach (PfEnv::openvpn_get_active_clients() as $client) {
"{#NAME}" => self::sanitize_name($client["name"]), $client_discoveries[] = [
], PfEnv::openvpn_get_active_clients())); "{#CLIENT}" => $client["vpnid"],
"{#NAME}" => self::sanitize_name($client["name"]),
];
}
self::print_json($client_discoveries);
} }
public static function services() public static function services()
{ {
$named_services = array_filter(PfEnv::get_services(), fn($service) => !empty($service["name"])); $named_services = array_filter(PfEnv::get_services(), fn($service) => !empty($service["name"]));
self::print_json(array_map(function ($service) { $service_discoveries = [];
foreach ($named_services as $service) {
$maybe_id = Util::array_first(fn($key) => in_array($key, ["id", "zone"]), array_keys($service)); $maybe_id = Util::array_first(fn($key) => in_array($key, ["id", "zone"]), array_keys($service));
$id = is_null($maybe_id) ? "" : $service[$maybe_id]; $id = is_null($maybe_id) ? "" : $service[$maybe_id];
return [ $service_discoveries[] = [
"{#SERVICE}" => sprintf("%s%s", Util::space_to_underscore($service["name"]), $id), "{#SERVICE}" => sprintf("%s%s", Util::space_to_underscore($service["name"]), $id),
"{#DESCRIPTION}" => $service["description"], "{#DESCRIPTION}" => $service["description"],
]; ];
}, $named_services)); }
self::print_json($service_discoveries);
} }
public static function interfaces() public static function interfaces()
@ -529,10 +543,15 @@ class Discovery
$config = PfEnv::cfg(); $config = PfEnv::cfg();
self::print_json(array_map(fn($data) => [ $ipsec_ph1_discoveries = [];
"{#IKEID}" => $data["ikeid"], foreach ($config["ipsec"]["phase1"] as $data) {
"{#NAME}" => $data["descr"], $ipsec_ph1_discoveries[] = [
], $config["ipsec"]["phase1"])); "{#IKEID}" => $data["ikeid"],
"{#NAME}" => $data["descr"],
];
}
self::print_json($ipsec_ph1_discoveries);
} }
public static function ipsec_ph2() public static function ipsec_ph2()
@ -541,13 +560,18 @@ class Discovery
$config = PfEnv::cfg(); $config = PfEnv::cfg();
self::print_json(array_map(fn($data) => [ $ipsec_ph2_discoveries = [];
"{#IKEID}" => $data["ikeid"], foreach ($config["ipsec"]["phase2"] as $data) {
"{#NAME}" => $data["descr"], $ipsec_ph2_discoveries[] = [
"{#UNIQID}" => $data["uniqid"], "{#IKEID}" => $data["ikeid"],
"{#REQID}" => $data["reqid"], "{#NAME}" => $data["descr"],
"{#EXTID}" => sprintf("%s.%s", $data["ikeid"], $data["reqid"]), "{#UNIQID}" => $data["uniqid"],
], $config["ipsec"]["phase2"])); "{#REQID}" => $data["reqid"],
"{#EXTID}" => sprintf("%s.%s", $data["ikeid"], $data["reqid"]),
];
}
self::print_json($ipsec_ph2_discoveries);
} }
public static function dhcpfailover() public static function dhcpfailover()
@ -555,9 +579,14 @@ class Discovery
// System public static functions regarding DHCP Leases will be available in the upcoming release of pfSense, so let's wait // System public static functions regarding DHCP Leases will be available in the upcoming release of pfSense, so let's wait
$leases = PfEnv::system_get_dhcpleases(); $leases = PfEnv::system_get_dhcpleases();
self::print_json(array_map(fn($data) => [ $dhcp_failover_discoveries = [];
"{#FAILOVER_GROUP}" => Util::space_to_underscore($data["name"]), foreach ($leases["failover"] as $data) {
], $leases["failover"])); $dhcp_failover_discoveries[] = [
"{#FAILOVER_GROUP}" => Util::space_to_underscore($data["name"]),
];
}
self::print_json($dhcp_failover_discoveries);
} }
private static function print_json(array $json) private static function print_json(array $json)
@ -584,9 +613,13 @@ class Discovery
private static function map_conns(string $server_name, string $vpn_id, array $conns): array private static function map_conns(string $server_name, string $vpn_id, array $conns): array
{ {
return array_map( $conn_discoveries = [];
fn($conn) => self::map_conn($server_name, $vpn_id, $conn), foreach ($conns as $conn) {
$conns); $conn_discoveries[] = self::map_conn($server_name, $vpn_id, $conn);
}
return $conn_discoveries;
} }
private static function map_server(array $server): array private static function map_server(array $server): array
@ -604,12 +637,15 @@ class Discovery
return; return;
} }
self::print_json(array_map(function ($hwif) { $wan_interface_discoveries = [];
return [ foreach (NetworkInterface::retrieve_wan_interfaces() as $hwif) {
$wan_interface_discoveries[] = [
"{#IFNAME}" => $hwif["hwif"], "{#IFNAME}" => $hwif["hwif"],
"{#IFDESCR}" => $hwif["description"], "{#IFDESCR}" => $hwif["description"],
]; ];
}, NetworkInterface::retrieve_wan_interfaces())); }
self::print_json($wan_interface_discoveries);
} }
} }
@ -746,10 +782,12 @@ class Command
public static function gw_status() public static function gw_status()
{ {
return Util::result(implode(",", $gw_statuses = [];
array_map( foreach (PfEnv::return_gateways_status(true) as $gw) {
fn($gw) => sprintf("%s.%s", $gw["name"], $gw["status"]), $gw_statuses[] = sprintf("%s.%s", $gw["name"], $gw["status"]);
PfEnv::return_gateways_status(true)))); }
return Util::result(implode(",", $gw_statuses));
} }
public static function if_speedtest_value($if_name, $value) public static function if_speedtest_value($if_name, $value)
@ -962,16 +1000,17 @@ class Command
// Taken from /usr/local/www/widgets/widgets/smart_status.widget.php // Taken from /usr/local/www/widgets/widgets/smart_status.widget.php
public static function smart_status() public static function smart_status()
{ {
$dev_states = array_map( $dev_states = [];
fn($device_name) => Shell::read_smart_status($device_name), foreach (PfEnv::get_smart_drive_list() as $device_name) {
PfEnv::get_smart_drive_list()); $dev_states[] = Shell::read_smart_status($device_name);
}
$smart_states = $smart_states = [];
array_map( foreach ($dev_states as $dev_state) {
fn($dev_state) => array_key_exists($dev_state, SMART_DEV_STATUS) ? $smart_states[] = array_key_exists($dev_state, SMART_DEV_STATUS) ?
SMART_DEV_STATUS[$dev_state] : SMART_DEV_STATUS[$dev_state] :
SMART_ERROR, SMART_ERROR;
$dev_states); }
$maybe_not_ok = Util::array_first(function ($smart_state) { $maybe_not_ok = Util::array_first(function ($smart_state) {
return $smart_state != SMART_OK; return $smart_state != SMART_OK;
@ -988,7 +1027,12 @@ class Command
$field = CERT_VK_TO_FIELD[$value_key]; $field = CERT_VK_TO_FIELD[$value_key];
$config = PfEnv::cfg(); $config = PfEnv::cfg();
$all_certs = Util::array_flatten(array_map(fn($cert_type) => $config[$cert_type] ?: [], ["cert", "ca"]));
$certs_and_cas = [];
foreach (["cert", "ca"] as $cert_type) {
$certs_and_cas[] = $config[$cert_type] ?: [];
}
$all_certs = Util::array_flatten($certs_and_cas);
return Util::result(array_reduce($all_certs, function ($value, $certificate) use ($field) { return Util::result(array_reduce($all_certs, function ($value, $certificate) use ($field) {
$cert_info = openssl_x509_parse(base64_decode($certificate[PfEnv::CRT])); $cert_info = openssl_x509_parse(base64_decode($certificate[PfEnv::CRT]));
@ -1213,8 +1257,12 @@ class Command
private static function parse_raw_record(string $raw_lease_data): array private static function parse_raw_record(string $raw_lease_data): array
{ {
$lease_data_lines = $raw_lease_data_lines = [];
array_filter(array_map(fn($m) => trim($m), explode(";", $raw_lease_data))); foreach (explode(";", $raw_lease_data) as $raw_line) {
$raw_lease_data_lines[] = trim($raw_line);
}
$lease_data_lines = array_filter($raw_lease_data_lines);
return array_reduce( return array_reduce(
$lease_data_lines, $lease_data_lines,
@ -1228,7 +1276,12 @@ class Command
private static function parse_failover_record(array $data): array private static function parse_failover_record(array $data): array
{ {
list($name, $raw_lease_data) = array_map(fn($m) => trim($m), $data); $sanitized_data = [];
foreach ($data as $line) {
$sanitized_data[] = trim($line);
}
list($name, $raw_lease_data) = $sanitized_data;
return [ return [
"type" => "failover", "type" => "failover",
@ -1239,7 +1292,12 @@ class Command
private static function parse_lease_record(array $data): array private static function parse_lease_record(array $data): array
{ {
list($lease_address, $raw_lease_data) = array_map(fn($m) => trim($m), $data); $sanitized_data = [];
foreach ($data as $line) {
$sanitized_data[] = trim($line);
}
list($lease_address, $raw_lease_data) = $sanitized_data;
return [ return [
"type" => "lease", "type" => "lease",
@ -1267,9 +1325,13 @@ class Command
private static function read_dhcp_records_from_file(string $leases_file_path): array private static function read_dhcp_records_from_file(string $leases_file_path): array
{ {
return array_map( $dhcp_records = [];
fn($r) => self::parse_dhcp_record($r), foreach (Shell::read_dhcpd_records($leases_file_path) as $raw_dhcp_record) {
Shell::read_dhcpd_records($leases_file_path)); $dhcp_records[] = self::parse_dhcp_record($raw_dhcp_record);
}
return $dhcp_records;
} }
private static function binding_to_state($binding): array private static function binding_to_state($binding): array
@ -1355,14 +1417,22 @@ class Command
if ($value_key === "pools") { if ($value_key === "pools") {
$failover_records = array_filter($dhcp_records, fn($r) => $r["type"] == "failover"); $failover_records = array_filter($dhcp_records, fn($r) => $r["type"] == "failover");
return self::remove_duplicates(array_map(fn($r) => self::raw_failover_record_to_pool($r), $failover_records), "name"); $pools = [];
} foreach ($failover_records as $failover_record) {
$pools[] = self::raw_failover_record_to_pool($failover_record);
}
$lease_records = array_filter($dhcp_records, fn($r) => $r["type"] == "lease"); return self::remove_duplicates($pools, "name");
}
$arp_ips = Shell::read_arp_ips(); $arp_ips = Shell::read_arp_ips();
return self::remove_duplicates(array_map(fn($r) => self::raw_lease_record_to_lease($r, $arp_ips), $lease_records), "mac"); $leases = [];
foreach (array_filter($dhcp_records, fn($r) => $r["type"] == "lease") as $lease_record) {
$leases[] = self::raw_lease_record_to_lease($lease_record, $arp_ips);
}
return self::remove_duplicates($leases, "mac");
} }
private static function check_dhcp_offline_leases(): int private static function check_dhcp_offline_leases(): int
@ -1421,7 +1491,12 @@ function build_method_lookup(string $clazz): array
$commands = array_filter($all_methods, fn($method) => $method->isStatic() && $method->isPublic()); $commands = array_filter($all_methods, fn($method) => $method->isStatic() && $method->isPublic());
return array_map(fn(ReflectionMethod $method) => $method->getName(), $commands); $available_methods = [];
foreach ($commands as $method) {
$available_methods[] = $method->getName();
}
return $available_methods;
} catch (Exception $e) { } catch (Exception $e) {
return []; return [];
} }