Ejemplo n.º 1
0
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';
}