options = get_option('ash_options');
}
public function enqueue_admin_assets($hook) {
if ($hook != 'settings_page_abdal-security-headers') {
return;
}
// Enqueue Bootstrap
wp_enqueue_style('bootstrap', 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css');
wp_enqueue_script('bootstrap', 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js', array('jquery'), null, true);
// Enqueue SweetAlert2
wp_enqueue_style('sweetalert2', 'https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css');
wp_enqueue_script('sweetalert2', 'https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.all.min.js', array(), null, true);
// Enqueue our custom styles
wp_enqueue_style('ash-admin-styles', ASH_PLUGIN_URL . 'assets/css/admin.css', array('bootstrap', 'sweetalert2'), ASH_VERSION);
// Enqueue our custom scripts
wp_enqueue_script('ash-admin-scripts', ASH_PLUGIN_URL . 'assets/js/admin.js', array('jquery', 'bootstrap', 'sweetalert2'), ASH_VERSION, true);
// Add translation strings for JavaScript
wp_localize_script('ash-admin-scripts', 'ashStrings', array(
'confirmSave' => esc_html__('Are you sure you want to save these settings?', 'abdal-security-headers'),
'yes' => esc_html__('Yes', 'abdal-security-headers'),
'no' => esc_html__('No', 'abdal-security-headers'),
'success' => esc_html__('Settings saved successfully', 'abdal-security-headers'),
'ok' => esc_html__('OK', 'abdal-security-headers'),
'error' => esc_html__('Error', 'abdal-security-headers'),
'errorMessage' => esc_html__('An error occurred while saving the settings. Please try again.', 'abdal-security-headers')
));
}
public function add_plugin_page() {
add_options_page(
esc_html__('Abdal Security Headers', 'abdal-security-headers'),
esc_html__('Security Headers', 'abdal-security-headers'),
'manage_options',
'abdal-security-headers',
array($this, 'create_admin_page')
);
}
public function create_admin_page() {
?>
add_checkbox_field('x_xss_protection', esc_html__('X-XSS-Protection', 'abdal-security-headers'), 'ash_basic_headers');
$this->add_checkbox_field('x_content_type_options', esc_html__('X-Content-Type-Options', 'abdal-security-headers'), 'ash_basic_headers');
$this->add_checkbox_field('strict_transport_security', esc_html__('Strict-Transport-Security', 'abdal-security-headers'), 'ash_basic_headers');
$this->add_checkbox_field('permissions_policy', esc_html__('Permissions-Policy', 'abdal-security-headers'), 'ash_basic_headers');
$this->add_checkbox_field('x_frame_options', esc_html__('X-Frame-Options', 'abdal-security-headers'), 'ash_basic_headers');
$this->add_checkbox_field('referrer_policy', esc_html__('Referrer-Policy', 'abdal-security-headers'), 'ash_basic_headers');
// Additional Security Section
add_settings_section(
'ash_additional_security',
esc_html__('Additional Security Features', 'abdal-security-headers'),
array($this, 'print_additional_section_info'),
'abdal-security-headers'
);
// New Security Options
$this->add_checkbox_field('remove_x_powered_by', esc_html__('Remove X-Powered-By Header', 'abdal-security-headers'), 'ash_additional_security');
$this->add_checkbox_field('hide_wp_version', esc_html__('Hide WordPress Version', 'abdal-security-headers'), 'ash_additional_security');
$this->add_checkbox_field('remove_login_errors', esc_html__('Remove Login Error Messages', 'abdal-security-headers'), 'ash_additional_security');
$this->add_checkbox_field('disable_xmlrpc', esc_html__('Disable XML-RPC', 'abdal-security-headers'), 'ash_additional_security');
$this->add_checkbox_field('remove_x_pingback', esc_html__('Remove X-Pingback Header', 'abdal-security-headers'), 'ash_additional_security');
$this->add_checkbox_field('restrict_rest_api', esc_html__('Restrict REST API Access', 'abdal-security-headers'), 'ash_additional_security');
// CSP Section
add_settings_section(
'ash_csp_section',
esc_html__('Content Security Policy', 'abdal-security-headers'),
array($this, 'print_csp_section_info'),
'abdal-security-headers'
);
// CSP Fields
$csp_fields = array(
'default-src' => esc_html__('Default Source', 'abdal-security-headers'),
'script-src' => esc_html__('Script Source', 'abdal-security-headers'),
'style-src' => esc_html__('Style Source', 'abdal-security-headers'),
'img-src' => esc_html__('Image Source', 'abdal-security-headers'),
'connect-src' => esc_html__('Connect Source', 'abdal-security-headers'),
'font-src' => esc_html__('Font Source', 'abdal-security-headers'),
'object-src' => esc_html__('Object Source', 'abdal-security-headers'),
'media-src' => esc_html__('Media Source', 'abdal-security-headers'),
'frame-src' => esc_html__('Frame Source', 'abdal-security-headers'),
'worker-src' => esc_html__('Worker Source', 'abdal-security-headers'),
'form-action' => esc_html__('Form Action', 'abdal-security-headers'),
'base-uri' => esc_html__('Base URI', 'abdal-security-headers'),
'sandbox' => esc_html__('Sandbox', 'abdal-security-headers'),
'report-uri' => esc_html__('Report URI', 'abdal-security-headers'),
'report-to' => esc_html__('Report To', 'abdal-security-headers')
);
foreach ($csp_fields as $key => $label) {
$this->add_text_field('csp_' . str_replace('-', '_', $key), $label, 'ash_csp_section');
}
}
private function add_checkbox_field($id, $title, $section) {
add_settings_field(
$id,
$title,
array($this, 'checkbox_callback'),
'abdal-security-headers',
$section,
array('id' => $id)
);
}
private function add_text_field($id, $title, $section) {
add_settings_field(
$id,
$title,
array($this, 'text_callback'),
'abdal-security-headers',
$section,
array('id' => $id)
);
}
public function checkbox_callback($args) {
$id = $args['id'];
$checked = isset($this->options[$id]) ? $this->options[$id] : '0';
?>
options[$id]) ? $this->options[$id] : '';
?>