function jetpack_protect_save_whitelist($whitelist) { $whitelist_error = false; $new_items = array(); if (!is_array($whitelist)) { return new WP_Error('invalid_parameters', __('Expecting an array', 'jetpack')); } // validate each item foreach ($whitelist as $item) { $item = trim($item); if (empty($item)) { continue; } $range = false; if (strpos($item, '-')) { $item = explode('-', $item); $range = true; } $new_item = new stdClass(); $new_item->range = $range; if (!empty($range)) { $low = trim($item[0]); $high = trim($item[1]); if (!filter_var($low, FILTER_VALIDATE_IP) || !filter_var($high, FILTER_VALIDATE_IP)) { $whitelist_error = true; break; } if (!jetpack_convert_ip_address($low) || !jetpack_convert_ip_address($high)) { $whitelist_error = true; break; } $new_item->range_low = $low; $new_item->range_high = $high; } else { if (!filter_var($item, FILTER_VALIDATE_IP)) { $whitelist_error = true; break; } if (!jetpack_convert_ip_address($item)) { $whitelist_error = true; break; } $new_item->ip_address = $item; } $new_items[] = $new_item; } // end item loop if (!empty($whitelist_error)) { return new WP_Error('invalid_ip', __('One of your IP addresses was not valid.', 'jetpack')); } update_site_option('jetpack_protect_whitelist', $new_items); return true; }
function jetpack_protect_save_whitelist($whitelist, $global = false) { $whitelist_error = false; $new_items = array(); if (!is_array($whitelist)) { return new WP_Error('invalid_parameters', __('Expecting an array', 'jetpack')); } if ($global && !is_multisite()) { return new WP_Error('invalid_parameters', __('Cannot use global flag on non-multisites', 'jetpack')); } if ($global && !current_user_can('manage_network')) { return new WP_Error('permission_denied', __('Only super admins can edit the global whitelist', 'jetpack')); } // validate each item foreach ($whitelist as $item) { $item = trim($item); if (empty($item)) { continue; } $range = false; if (strpos($item, '-')) { $item = explode('-', $item); $range = true; } $new_item = new stdClass(); $new_item->range = $range; if (!empty($range)) { $low = trim($item[0]); $high = trim($item[1]); if (!filter_var($low, FILTER_VALIDATE_IP) || !filter_var($high, FILTER_VALIDATE_IP)) { $whitelist_error = true; break; } if (!jetpack_convert_ip_address($low) || !jetpack_convert_ip_address($high)) { $whitelist_error = true; break; } $new_item->range_low = $low; $new_item->range_high = $high; } else { if (!filter_var($item, FILTER_VALIDATE_IP)) { $whitelist_error = true; break; } if (!jetpack_convert_ip_address($item)) { $whitelist_error = true; break; } $new_item->ip_address = $item; } $new_items[] = $new_item; } // end item loop if (!empty($whitelist_error)) { return new WP_Error('invalid_ip', __('One of your IP addresses was not valid.', 'jetpack')); } if ($global) { update_site_option('jetpack_protect_global_whitelist', $new_items); // once a user has saved their global whitelist, we can permanently remove the legacy option delete_site_option('jetpack_protect_whitelist'); } else { Jetpack_Options::update_option('protect_whitelist', $new_items); } return true; }