You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
304 lines
12 KiB
304 lines
12 KiB
<?php |
|
if (!defined('WORDFENCE_VERSION')) { exit; } |
|
/** |
|
* Presents the Whitelisted URLs group. |
|
* |
|
* Expects $firewall, $waf, and $stateKey. |
|
* |
|
* @var wfFirewall $firewall |
|
* @var wfWAF $waf |
|
* @var string $stateKey The key under which the collapse state is stored. |
|
* @var bool $collapseable If defined, specifies whether or not this grouping can be collapsed. Defaults to true. |
|
*/ |
|
|
|
$config = $waf->getStorageEngine(); |
|
|
|
if (!isset($collapseable)) { |
|
$collapseable = true; |
|
} |
|
?> |
|
<div class="wf-row"> |
|
<div class="wf-col-xs-12"> |
|
<div class="wf-block<?php if (!$collapseable) { echo ' wf-always-active'; } else { echo (wfPersistenceController::shared()->isActive($stateKey) ? ' wf-active' : ''); } ?>" data-persistence-key="<?php echo esc_attr($stateKey); ?>"> |
|
<div class="wf-block-header"> |
|
<div class="wf-block-header-content"> |
|
<div class="wf-block-title"> |
|
<strong><?php _e('Whitelisted URLs', 'wordfence'); ?></strong> |
|
</div> |
|
<?php if ($collapseable): ?><div class="wf-block-header-action"><div class="wf-block-header-action-disclosure" role="checkbox" aria-checked="<?php echo (wfPersistenceController::shared()->isActive($stateKey) ? 'true' : 'false'); ?>" tabindex="0"></div></div><?php endif; ?> |
|
</div> |
|
</div> |
|
<div class="wf-block-content"> |
|
<ul class="wf-block-list"> |
|
<?php if ($firewall->isSubDirectoryInstallation()): ?> |
|
<li> |
|
<p><?php printf(__('You are currently running the Wordfence Web Application Firewall from another WordPress installation. Please <a href="%s">click here</a> to configure the Firewall to run correctly on this site.', 'wordfence'), esc_attr(network_admin_url('admin.php?page=WordfenceWAF&subpage=waf_options#configureAutoPrepend'))); ?></p> |
|
</li> |
|
<?php else: ?> |
|
<li> |
|
<?php |
|
echo wfView::create('waf/option-whitelist', array( |
|
))->render(); |
|
?> |
|
</li> |
|
<li> |
|
<?php |
|
echo wfView::create('options/option-toggled-multiple', array( |
|
'options' => array( |
|
array( |
|
'name' => 'ajaxWatcherDisabled_front', |
|
'enabledValue' => 0, |
|
'disabledValue' => 1, |
|
'value' => wfConfig::get('ajaxWatcherDisabled_front') ? 1 : 0, |
|
'title' => __('Front-end Website', 'wordfence'), |
|
), |
|
array( |
|
'name' => 'ajaxWatcherDisabled_admin', |
|
'enabledValue' => 0, |
|
'disabledValue' => 1, |
|
'value' => wfConfig::get('ajaxWatcherDisabled_admin') ? 1 : 0, |
|
'title' => __('Admin Panel', 'wordfence'), |
|
), |
|
), |
|
'noSpacer' => true, |
|
'htmlTitle' => '<strong>' . __('Monitor background requests from an administrator\'s web browser for false positives', 'wordfence') . '</strong>', |
|
'helpLink' => wfSupportController::supportURL(wfSupportController::ITEM_FIREWALL_WAF_OPTION_MONITOR_AJAX), |
|
))->render(); |
|
?> |
|
</li> |
|
<?php endif; ?> |
|
</ul> |
|
</div> |
|
</div> |
|
</div> |
|
</div> <!-- end whitelisted urls --> |
|
<script type="text/x-jquery-template" id="waf-whitelisted-urls-tmpl"> |
|
<div class="whitelist-table-container"> |
|
<table class="wf-striped-table whitelist-table"> |
|
<thead> |
|
<tr> |
|
<th style="width: 2%;text-align: center"><div class="wf-whitelist-bulk-select wf-option-checkbox" role="checkbox" aria-checked="false" tabindex="0" aria-label="<?php esc_attr_e('Select/deselect all', 'wordfence'); ?>"><i class="wf-ion-ios-checkmark-empty" aria-hidden="true"></i></div></th> |
|
<th style="width: 5%;"><?php _e('Enabled', 'wordfence'); ?></th> |
|
<th><?php _e('URL', 'wordfence'); ?></th> |
|
<th><?php _e('Param', 'wordfence'); ?></th> |
|
<th><?php _e('Created', 'wordfence'); ?></th> |
|
<th><?php _e('Source', 'wordfence'); ?></th> |
|
<th><?php _e('User', 'wordfence'); ?></th> |
|
<th><?php _e('IP', 'wordfence'); ?></th> |
|
</tr> |
|
</thead> |
|
{{if whitelistedURLParams.length > 5}} |
|
<tfoot> |
|
<tr> |
|
<th style="width: 2%;text-align: center"><div class="wf-whitelist-bulk-select wf-option-checkbox" role="checkbox" aria-checked="false" tabindex="0" aria-label="<?php esc_attr_e('Select/deselect all', 'wordfence'); ?>"><i class="wf-ion-ios-checkmark-empty" aria-hidden="true"></i></div></th> |
|
<th style="width: 5%;"><?php _e('Enabled', 'wordfence'); ?></th> |
|
<th><?php _e('URL', 'wordfence'); ?></th> |
|
<th><?php _e('Param', 'wordfence'); ?></th> |
|
<th><?php _e('Created', 'wordfence'); ?></th> |
|
<th><?php _e('Source', 'wordfence'); ?></th> |
|
<th><?php _e('User', 'wordfence'); ?></th> |
|
<th><?php _e('IP', 'wordfence'); ?></th> |
|
</tr> |
|
{{/if}} |
|
</tfoot> |
|
<tbody> |
|
{{each(idx, whitelistedURLParam) whitelistedURLParams}} |
|
<tr data-index="${idx}" data-adding="{{if (whitelistedURLParam.adding)}}1{{else}}0{{/if}}" data-key="${whitelistedURLParam.path}|${whitelistedURLParam.paramKey}"> |
|
<td style="text-align: center;"><div class="wf-whitelist-table-bulk-checkbox wf-option-checkbox" role="checkbox" aria-checked="false" tabindex="0" aria-label="<?php esc_attr_e('Select row ${idx}', 'wordfence'); ?>"><i class="wf-ion-ios-checkmark-empty" aria-hidden="true"></i></div></td> |
|
<td style="text-align: center;"><div class="wf-whitelist-item-enabled wf-option-checkbox{{if (!whitelistedURLParam.data.disabled)}} wf-checked{{/if}}" data-original-value="{{if (!whitelistedURLParam.data.disabled)}}1{{else}}0{{/if}}" role="checkbox" aria-checked="{{if (!whitelistedURLParam.data.disabled)}}true{{else}}false{{/if}}" tabindex="0" aria-label="<?php esc_attr_e('Toggle row ${idx}', 'wordfence'); ?>"><i class="wf-ion-ios-checkmark-empty" aria-hidden="true"></i></div></td> |
|
<td data-column="url"> |
|
<input name="replaceWhitelistedPath" type="hidden" value="${whitelistedURLParam.path}"> |
|
<span class="whitelist-display">${WFAD.htmlEscape(WFAD.base64_decode(whitelistedURLParam.path))}</span> |
|
<input name="whitelistedPath" class="whitelist-edit whitelist-path" type="text" |
|
value="${WFAD.htmlEscape(WFAD.base64_decode(whitelistedURLParam.path))}"> |
|
</td> |
|
<td data-column="param"> |
|
<input name="replaceWhitelistedParam" type="hidden" value="${whitelistedURLParam.paramKey}"> |
|
<span class="whitelist-display">${WFAD.htmlEscape(WFAD.base64_decode(whitelistedURLParam.paramKey))}</span> |
|
<input name="whitelistedParam" class="whitelist-edit whitelist-param-key" |
|
type="text" value="${WFAD.htmlEscape(WFAD.base64_decode(whitelistedURLParam.paramKey))}"> |
|
</td> |
|
<td> |
|
{{if (whitelistedURLParam.data.timestamp)}} |
|
${WFAD.dateFormat((new Date(whitelistedURLParam.data.timestamp * 1000)))} |
|
{{else}} |
|
- |
|
{{/if}} |
|
</td> |
|
<td data-column="source"> |
|
{{if (whitelistedURLParam.data.description)}} |
|
${whitelistedURLParam.data.description} |
|
{{else}} |
|
- |
|
{{/if}} |
|
</td> |
|
<td data-column="user"> |
|
{{if (whitelistedURLParam.data.userID)}} |
|
{{if (whitelistedURLParam.data.username)}} |
|
${whitelistedURLParam.data.username} |
|
{{else}} |
|
${whitelistedURLParam.data.userID} |
|
{{/if}} |
|
{{else}} |
|
- |
|
{{/if}} |
|
</td> |
|
<td data-column="ip"> |
|
{{if (whitelistedURLParam.data.ip)}} |
|
${whitelistedURLParam.data.ip} |
|
{{else}} |
|
- |
|
{{/if}} |
|
</td> |
|
</tr> |
|
{{/each}} |
|
{{if (whitelistedURLParams.length == 0)}} |
|
<tr> |
|
<td colspan="8"><?php _e('No whitelisted URLs currently set.', 'wordfence'); ?></td> |
|
</tr> |
|
{{/if}} |
|
</tbody> |
|
</table> |
|
</div> |
|
</script> |
|
<script type="application/javascript"> |
|
(function($) { |
|
function whitelistCheckAllVisible() { |
|
$('.wf-whitelist-bulk-select.wf-option-checkbox').toggleClass('wf-checked', true).attr('aria-checked', 'true'); |
|
$('.wf-whitelist-table-bulk-checkbox.wf-option-checkbox').each(function() { |
|
$(this).toggleClass('wf-checked', $(this).closest('tr').is(':visible')).attr('aria-checked', $(this).closest('tr').is(':visible') ? 'true' : 'false'); |
|
}); |
|
} |
|
|
|
function whitelistUncheckAll() { |
|
$('.wf-whitelist-bulk-select.wf-option-checkbox').toggleClass('wf-checked', false).attr('aria-checked', 'false'); |
|
$('.wf-whitelist-table-bulk-checkbox.wf-option-checkbox').toggleClass('wf-checked', false).attr('aria-checked', 'false'); |
|
} |
|
|
|
$(window).on('wordfenceWAFInstallWhitelistEventHandlers', function() { |
|
//Enabled/Disabled |
|
$('.wf-whitelist-item-enabled.wf-option-checkbox').each(function() { |
|
$(this).on('keydown', function(e) { |
|
if (e.keyCode == 32) { |
|
e.preventDefault(); |
|
e.stopPropagation(); |
|
|
|
$(this).trigger('click'); |
|
} |
|
}); |
|
|
|
$(this).on('click', function(e) { |
|
e.preventDefault(); |
|
e.stopPropagation(); |
|
|
|
var row = $(this).closest('tr'); |
|
var key = row.data('key'); |
|
var value = $(this).hasClass('wf-checked') ? 1 : 0; |
|
if (value) { |
|
$(this).removeClass('wf-checked').attr('aria-checked', 'false'); |
|
value = 0; |
|
} |
|
else { |
|
$(this).addClass('wf-checked').attr('aria-checked', 'true'); |
|
value = 1; |
|
} |
|
|
|
WFAD.wafWhitelistedChangeEnabled(key, value); |
|
WFAD.updatePendingChanges(); |
|
}); |
|
}); |
|
|
|
//Header/Footer Bulk Action |
|
$('.wf-whitelist-bulk-select.wf-option-checkbox').each(function() { |
|
$(this).on('keydown', function(e) { |
|
if (e.keyCode == 32) { |
|
e.preventDefault(); |
|
e.stopPropagation(); |
|
|
|
$(this).trigger('click'); |
|
} |
|
}); |
|
|
|
$(this).on('click', function(e) { |
|
e.preventDefault(); |
|
e.stopPropagation(); |
|
|
|
if ($(this).hasClass('wf-checked')) { |
|
$(this).removeClass('wf-checked').attr('aria-checked', 'false'); |
|
whitelistUncheckAll(); |
|
} |
|
else { |
|
$(this).addClass('wf-checked'); |
|
whitelistCheckAllVisible().attr('aria-checked', 'true'); |
|
} |
|
}); |
|
}); |
|
|
|
//Row Bulk Action |
|
$('.wf-whitelist-table-bulk-checkbox.wf-option-checkbox').each(function() { |
|
$(this).on('keydown', function(e) { |
|
if (e.keyCode == 32) { |
|
e.preventDefault(); |
|
e.stopPropagation(); |
|
|
|
$(this).trigger('click'); |
|
} |
|
}); |
|
|
|
$(this).on('click', function(e) { |
|
e.preventDefault(); |
|
e.stopPropagation(); |
|
|
|
var row = $(this).closest('tr'); |
|
var key = row.data('key'); |
|
var value = $(this).hasClass('wf-checked') ? 1 : 0; |
|
if (value) { |
|
$(this).removeClass('wf-checked').attr('aria-checked', 'false'); |
|
} |
|
else { |
|
$(this).addClass('wf-checked').attr('aria-checked', 'true'); |
|
} |
|
|
|
var totalCount = $('.wf-whitelist-table-bulk-checkbox.wf-option-checkbox:visible').length; |
|
var checkedCount = $('.wf-whitelist-table-bulk-checkbox.wf-option-checkbox.wf-checked:visible').length; |
|
if (totalCount == 0 || (checkedCount != totalCount)) { |
|
$('.wf-whitelist-bulk-select.wf-option-checkbox').removeClass('wf-checked').attr('aria-checked', 'false'); |
|
} |
|
else { |
|
$('.wf-whitelist-bulk-select.wf-option-checkbox').addClass('wf-checked').attr('aria-checked', 'true'); |
|
} |
|
}); |
|
}); |
|
|
|
$(window).trigger('wordfenceWAFApplyWhitelistFilter'); |
|
}); |
|
|
|
$(window).on('wordfenceWAFApplyWhitelistFilter', function() { |
|
if (WFAD.wafData.whitelistedURLParams.length == 0) { |
|
return; |
|
} |
|
|
|
var filterColumn = $('#whitelist-table-controls select').val(); |
|
var filterValue = $('input[name="filterValue"]').val(); |
|
if (typeof filterValue != 'string' || filterValue.length == 0) { |
|
$('#waf-whitelisted-urls-wrapper .whitelist-table > tbody > tr[data-index]').show(); |
|
} |
|
else { |
|
$('#waf-whitelisted-urls-wrapper .whitelist-table > tbody > tr[data-index]').each(function() { |
|
var text = $(this).find('td[data-column="' + filterColumn + '"]').text(); |
|
if (text.indexOf(filterValue) > -1) { |
|
$(this).show(); |
|
} |
|
else { |
|
$(this).hide(); |
|
} |
|
}); |
|
} |
|
}); |
|
|
|
$(window).on('wordfenceWAFConfigPageRender', function() { |
|
//Add event handler to whitelist checkboxes |
|
$(window).trigger('wordfenceWAFInstallWhitelistEventHandlers'); |
|
}); |
|
})(jQuery); |
|
</script>
|