function oneportalcloud_firewallsave($params) { if (!isset($_POST['params'])) { return 'No firewall parameters set.'; } $op = new OnePortalCloud($params['configoption1'], $params['configoption2'], $params['configoption3']); $server_id = $params['customfields']['Server ID']; if (empty($server_id)) { return 'Unable to determine Server ID'; } $d = trim($_POST['params']); $d = str_replace('"', '"', $d); $fw_params = json_decode($d); $order_changes = array(); $delete_changes = array(); $new_changes = array(); if (strlen($fw_params->deleted_rules) > 1) { $deletes = explode(',', $fw_params->deleted_rules); foreach ($deletes as $d) { list($k, $v) = explode(':', $d); $delete_changes[] = $v; } } $delete_keys = array_flip($delete_changes); foreach ($fw_params->order as $n => $rule_order) { $nic = substr($n, strpos($n, '_', 4) + 1); $o = explode(',', $rule_order); foreach ($o as $rule) { $r = explode(':', $rule); if (in_array($r[0], $delete_keys)) { continue; } $order_changes[$nic][$r[1]] = $r[0]; } } foreach ($fw_params->new_rules as $nic => $rules) { if (!is_null($rules) && !empty($rules)) { $n = substr($nic, strpos($nic, '_', 4) + 1); $rule_ar = array(); foreach ($rules as $r) { $r->nic = $n; $rule_ar[] = $r; } if (empty($rule_ar)) { continue; } if (!($error = validateFireWallRule($rule_ar))) { return implode('<br>', $error); } $new_changes[] = $rule_ar; } } if (!empty($delete_changes)) { foreach ($delete_changes as $delete) { $op->deleteFirewallRule($server_id, $delete); } } if (!empty($new_changes)) { foreach ($new_changes as $nic => $new) { foreach ($new as $n) { $op->createFirewallRule($server_id, $n); } } } $op->updateFirewallRuleOrder($server_id, $order_changes); $op->updateDefaultFirewallRules($server_id, (array) $fw_params->defaults); return 'success'; }