Viewing File: /usr/local/cpanel/whostmgr/docroot/cgi/cwaf/js/cwaf.js
// CWAF plugin actions
// global tmp var
var cwaf_plugin_tmp_data = {};
// main handler URL
var cwaf_main_handler_url = "cwaf_main.cgi";
// plugin first run flag
var plugin_firstrun = false;
// get catalog data with ajax request
// or from local cache
function get_cwaf_remote_data(url_handler, data, type) {
// check parameters and set default if need
var data = typeof data !== 'undefined' ? data : {};
var type = typeof type !== 'undefined' ? type : 'post';
// create overlay
create_overlay();
if(! data.action) {
show_error_msg('no action, break request');
return false;
}
// ajax request
$.ajax({
url: url_handler,
data: data,
type: type,
statusCode: {
412: function() { show_error_msg('action is undefined'); },
400: function() { show_error_msg('unknown action'); }
}
})
.done(function(msg) {
// success
if(msg.status == 1) {
// parse data and send needed function
parse_cwaf_remote_data(data.action, msg);
}
// some error during request processing
else {
if(cwaf_plugin_tmp_data[data.action]) {
cwaf_plugin_tmp_data[data.action] = false;
}
show_error_msg(msg.errmsg);
}
})
.fail(function() {
if(cwaf_plugin_tmp_data[data.action]) {
cwaf_plugin_tmp_data[data.action] = false;
}
show_error_msg("request to server failed!");
});
return true;
}
// postprocessing an successful ajax request
function parse_cwaf_remote_data(action, msg) {
// remove overlay
remove_overlay();
switch(action) {
case 'update_config':
// we saved main config
show_info_msg('Main config has been updated successfully.<br>Please wait until page will be reloaded.');
create_overlay();
setTimeout(function() {location.reload();}, 2000);
break;
case 'update_msconfig':
// modsec config saved
show_info_msg('Mod Security config has been updated successfully. HTTPD server restarted.');
//setTimeout(function() {location.reload();}, 2000);
break;
case 'get_rules_excludelist':
// we got exclude list (array of string)
$('#modsec_textarea').val(msg.data);
break;
case 'set_rules_excludelist':
// we saved exclude list, show info
show_info_msg('Exclude list has been updated successfully.');
show_info_msg('Note!<br/>You should restart HTTPD server to apply changes.');
break;
case 'set_userdata':
// we saved userdata files, show info
show_info_msg('Userdata files has been updated successfully.<br/> Note! You should restart HTTPD server to apply changes.');
break;
case 'run_feedbacksend':
// we sent feedback, clean field and show info
//$("#fb_rules_version").val('');
$("#fb_short").val('');
$("#fb_msg").val('');
$("#fb_rule_id").val('');
show_info_msg('Feedback has been sent successfully.');
break;
case 'run_rules_restore':
// previous version was restored
show_info_msg(msg.data + '.<br>Please wait until page will be reloaded.');
create_overlay();
setTimeout(function() {location.reload();}, 2000);
break;
case 'run_updater':
// updater (script) was started
// prepare window and start to show log
$("#dialog").dialog({ title: "LOGGING" });
$("#dialog_caption").text("Updating rules...");
// set #updater_textarea READ ONLY and set empty default content
$("#updater_textarea").prop("disabled", true);
$("#updater_textarea").val("Please wait...");
$("#dialog").dialog("open");
cwaf_plugin_tmp_data.counter = 60;
cwaf_plugin_tmp_data.update_finished = false;
cwaf_plugin_tmp_data['get_updater_log'] = true;
show_updater_log_action();
break;
case 'run_client_updater':
// updater (script) was started
// prepare window and start to show log
$("#dialog").dialog({ title: "LOGGING" });
$("#dialog_caption").text("Updating client...");
// set #updater_textarea READ ONLY and set empty default content
$("#updater_textarea").prop("disabled", true);
$("#updater_textarea").val("Please wait...");
$("#dialog").dialog("open");
cwaf_plugin_tmp_data.counter = 60;
cwaf_plugin_tmp_data.update_finished = false;
cwaf_plugin_tmp_data['get_updater_log'] = true;
show_updater_log_action();
break;
case 'get_updater_log':
// we got an new logs
$('#updater_textarea').val(msg.data.join(''));
$('#updater_textarea').scrollTop($('#updater_textarea')[0].scrollHeight);
if(/update process finished!/i.test(msg.data)) {
$("#dialog" ).on( "dialogclose", function( event, ui ) {
show_info_msg('Please wait until page will be reloaded.');
create_overlay();
setTimeout(function() {location.reload();}, 2000);
});
cwaf_plugin_tmp_data.update_finished = true;
show_info_msg('Update has been finished.');
}
break;
case 'update_disabled_domains':
show_info_msg('Update of disabled domains has been finished. HTTPD server restarted.');
break;
case 'user_conf_backup':
show_info_msg('Backup of user data completed.');
create_overlay();
setTimeout(function() {location.reload();}, 2000);
break;
case 'user_conf_restore':
show_info_msg('Restore of user data completed.');
create_overlay();
setTimeout(function() {location.reload();}, 2000);
break;
default:
show_error_msg('unknown request (internal)');
return false;
}
return true;
}
// first init tabs after loading
function cwaf_plugin_activate_button_events() {
// tabID: tabs-main, redirect button to tabs-upd
//$("#new_version_avail").on('click', function(e) {
// $("#tabs").tabs("option", "selected", 2);
// e.preventDefault();
// return true;
// });
//$("#new_client_avail").on('click', function(e) {
// $("#tabs").tabs("option", "selected", 2);
// e.preventDefault();
// return true;
// });
// tabID: tabs-conf, update main config
// init validation
//$("#cwaf_login").on('keyup', function(){ validateName(validation_rules('auth'), "#cwaf_login", "#config_update","#conf_warn","Login"); });
//$("#cwaf_password").on('keyup', function(){ validateName(validation_rules('auth'), "#cwaf_password", "#config_update","#conf_warn","Password"); });
$("#log_dir").on('keyup', function(){ validateName(validation_rules('path'), "#log_dir", "#config_update","#conf_warn","Logs Directory"); });
$("#utils_log").on('keyup', function(){ validateName(validation_rules('filename'), "#utils_log", "#config_update","#conf_warn","Log Filename"); });
$("#cwaf_path").on('keyup', function(){ validateName(validation_rules('path'), "#cwaf_path", "#config_update","#conf_warn","Rules Directory Path"); });
$("#cwaf_exclude_config").on('keyup', function(){ validateName(validation_rules('path'), "#cwaf_exclude_config", "#config_update","#conf_warn","Exclude Filename"); });
// activate click event
$("#config_update").unbind('click').bind('click', function(e) {
$.confirm(
"CONFIRM", //title
"Do you really want to save changes?", //message
"Save", //button text
update_cwaf_main_config,
300
);
e.preventDefault();
return true;
});
// tabID: tabs-upd, button "RESTORE RULES"
$("#restore_rules").unbind('click').bind('click', function(e) {
$.confirm(
"CONFIRM", //title
"Do you really want to restore previous version of protection rules?", //message
"Restore", //button text
restore_rules_action,
350
);
e.preventDefault();
return true;
});
// tabID: tabs-upd, button "UPDATE RULES", get new version if available
$("#start_update").unbind('click').bind('click', function(e) {
$.confirm(
"CONFIRM", //title
"Do you really want to update current rules version?", //message
"Update", //button text
update_cwaf_rules_action,
350
);
e.preventDefault();
return true;
});
$("#start_update_client").unbind('click').bind('click', function(e) {
$.confirm(
"CONFIRM", //title
"Do you really want to update client?", //message
"Update", //button text
update_cwaf_client_action,
350
);
e.preventDefault();
return true;
});
// tabID: tabs-excl, update exclide list
$("#save_config").css("display","inline"); // ????????
$("#modsec_textarea").prop("disabled", false); // ??????
// save button click
$("#save_config").unbind('click').bind('click', function(e) {
$.confirm(
"CONFIRM", //title
"Do you really want to save changes?", //message
"Save", //button text
update_cwaf_exclude_config,
300
);
e.preventDefault();
return true;
});
// tabID: tabs-conf, button "BACKUP USER CONF"
$("#start_user_backup").unbind('click').bind('click', function(e) {
$.confirm(
"CONFIRM", //title
"Do you really want to backup user configuration?", //message
"Backup", //button text
user_backup_action,
350
);
e.preventDefault();
return true;
});
// tabID: tabs-conf, button "RESTORE USER CONF"
$("#start_user_restore").unbind('click').bind('click', function(e) {
$.confirm(
"CONFIRM", //title
"Do you really want to restore user configuration?", //message
"Restore", //button text
user_restore_action,
350
);
e.preventDefault();
return true;
});
// tabID: tabs-fdb, send feedback
// init validation
$("#fb_rules_version").on('keyup', function(){ validateName(validation_rules('version'), "#fb_rules_version", "#send_feedback","#feedback_warn","Rules Version"); });
$("#fb_rule_id").on('keyup', function(){ validateName(validation_rules('ids'), "#fb_rule_id", "#send_feedback","#feedback_warn","Rule ID"); });
$("#fb_msg").on('keyup', function(){ validateName(validation_rules('text'), "#fb_msg", "#send_feedback","#feedback_warn","Feedback Message Too Short"); });
// init click event
$("#send_feedback").unbind('click').bind('click', function(e) {
$.confirm(
"CONFIRM", //title
"Do you really want to send feedback?", //message
"Send", //button text
send_feedback_message,
300
);
e.preventDefault();
return true;
});
// tabID: tabs-modsec, mod_security configuration
// init validation
$("#audit_log").on('keyup', function(){ validateName(validation_rules('path'), "#audit_log", "#modsec_update","#modsec_warn","Audit Log"); });
$("#debug_log").on('keyup', function(){ validateName(validation_rules('path'), "#debug_log", "#modsec_update","#modsec_warn","Debug Log"); });
$("#debug_level").on('keyup', function(){ validateName(validation_rules('dbglev'), "#debug_level", "#modsec_update","#modsec_warn","Debug Level"); });
$("#data_dir").on('keyup', function(){ validateName(validation_rules('path'), "#data_dir", "#modsec_update","#modsec_warn","Data Directory"); });
$("#match_limit").on('keyup', function(){ validateName(validation_rules('int'), "#match_limit", "#modsec_update","#modsec_warn","PCRE Match Limit"); });
$("#match_recursion").on('keyup', function(){ validateName(validation_rules('int'), "#match_recursion", "#modsec_update","#modsec_warn","PCRE Match Recursion"); });
// init click event
$("#modsec_update").unbind('click').bind('click', function(e) {
$.confirm(
"CONFIRM", //title
"Do you really want to update Mod Security config?", //message
"Save", //button text
update_cwaf_modsec_config,
300
);
e.preventDefault();
return true;
});
// save userdata button click
$("#save_userdata").unbind('click').bind('click', function(e) {
$.confirm(
"CONFIRM", //title
"Do you really want to save changes?", //message
"Save", //button text
update_cwaf_userdata,
300
);
e.preventDefault();
return true;
});
// disable domains buttons
$("#disable_domains_button").unbind('click').bind('click', function(e) {
cwaf_disabled_domains();
e.preventDefault();
return true;
});
$("#domain_disable_button").unbind('click').bind('click', function(e) {
var ddomains = $("#enabled_domains_list :selected");
$.each(ddomains, function (idx, val) {
if($("#disabled_domains_list option[value='"+val.value+"']").length == 0) {
$("#disabled_domains_list").append('<option value="'+val.value+'">'+val.text+'</option>');
}
});
$('#enabled_domains_list :selected').remove();
e.preventDefault();
return true;
});
$("#domain_enable_button").unbind('click').bind('click', function(e) {
var ddomains = $("#disabled_domains_list :selected");
$.each(ddomains, function (idx, val) {
if($("#enabled_domains_list option[value='"+val.value+"']").length == 0) {
$("#enabled_domains_list").append('<option value="'+val.value+'">'+val.text+'</option>');
}
});
$('#disabled_domains_list :selected').remove();
e.preventDefault();
return true;
});
$("#domains_update_button").unbind('click').bind('click', function(e) {
if($('#enabled_domains_list option').length == 0) {
$.confirm(
"CONFIRM", //title
"All domains will be disabled. For performance it's better to turn off security engine instead. Do you really want to use disabled domains?", //message
"Update", //button text
update_cwaf_disabled_domains,
300
);
} else {
update_cwaf_disabled_domains();
}
e.preventDefault();
return true;
});
}
// collection main config data
function update_cwaf_main_config() {
// create config object
var conf = {};
conf.cwaf_login = $("#cwaf_login").val();
conf.cwaf_passwd = $("#cwaf_passwd").val();
conf.log_dir = $("#log_dir").val();
conf.utils_log = $("#utils_log").val();
conf.rules_dir = $("#rules_dir").val();
conf.cwaf_exclude_config = $("#cwaf_exclude_config").val();
conf.debug = $("#debug").slider( "option", "value" );
conf.cwaf_subdomains = $("#cwaf_subdomains").prop('checked') ? 1 : 0;
conf.tname = $("#cwaf_autoupdate_scheme option:selected").val();
conf.action = 'update_config';
get_cwaf_remote_data(cwaf_main_handler_url, conf);
return true;
}
// collection exclude config data
function update_cwaf_exclude_config() {
var conf = {action: 'set_rules_excludelist', modsec_textarea: $("#modsec_textarea").val()};
get_cwaf_remote_data(cwaf_main_handler_url, conf);
return true;
}
// collection userdata
function update_cwaf_userdata() {
var conf = {};
conf.action = 'set_userdata';
// get all values from userdata_ textareas
// f.e. conf.userdata_wl_agents = $("#userdata_wl_agents").val();
$("[id*='userdata_']").each(function()
{
conf[$(this).attr("id")] = $(this).val();
});
get_cwaf_remote_data(cwaf_main_handler_url, conf);
return true;
}
// collection feedback data
function send_feedback_message() {
var conf = {};
conf.fb_rules_version = $("#fb_rules_version").val();
conf.fb_short = $("#fb_short").val();
conf.fb_msg = $("#fb_msg").val();
conf.fb_rule_id = $("#fb_rule_id").val();
conf.fb_client_version = $("#fb_client_version").val();
conf.action = 'run_feedbacksend';
get_cwaf_remote_data(cwaf_main_handler_url, conf);
return true;
}
// send request to restore previous version of rules
function restore_rules_action() {
var conf = {};
conf.action = 'run_rules_restore';
get_cwaf_remote_data(cwaf_main_handler_url, conf);
return true;
}
// send request to update rules version
function update_cwaf_rules_action() {
var conf = {};
conf.action = 'run_updater';
get_cwaf_remote_data(cwaf_main_handler_url, conf);
return true;
}
// send request to backup user data
function user_backup_action() {
var conf = {};
conf.action = 'user_conf_backup';
get_cwaf_remote_data(cwaf_main_handler_url, conf);
return true;
}
// send request to restore user backup
function user_restore_action() {
var conf = {};
conf.action = 'user_conf_restore';
get_cwaf_remote_data(cwaf_main_handler_url, conf);
return true;
}
// send request to update client
function update_cwaf_client_action() {
var conf = {};
conf.action = 'run_client_updater';
get_cwaf_remote_data(cwaf_main_handler_url, conf);
return true;
}
// send request to update modsec config data
function update_cwaf_modsec_config() {
var conf = {};
conf.SecRuleEngine = $("#secengine option:selected").val();
conf.SecAuditEngine = $("#auditengine option:selected").val();
conf.SecServerSignature = $("#server_signature").prop('checked') ? 1 : 0;
conf.SecResponseBodyLimit = $("#response_body_limit").val();
conf.SecAuditLog = $("#audit_log").val();
conf.SecAuditLogStorageDir = $("#audit_log_storage").val();
conf.SecAuditLogType = $("#audit_log_type option:selected").val();
conf.SecDebugLog = $("#debug_log").val();
conf.SecDebugLogLevel = $("#debug_level").slider( "option", "value" );
conf.SecRequestBodyAccess = $("#body_access option:selected").val();
conf.SecDataDir = $("#data_dir").val();
conf.SecTmpDir = $("#temp_dir").val();
conf.SecPcreMatchLimit = $("#match_limit").val();
conf.SecPcreMatchLimitRecursion = $("#match_recursion").val();
conf.action = 'update_msconfig';
get_cwaf_remote_data(cwaf_main_handler_url, conf);
return true;
}
// collection of disabled domains
function cwaf_disabled_domains() {
// ajax request
$.ajax({
url: cwaf_main_handler_url,
data: { 'action': 'disabled_domains' },
type: 'POST',
statusCode: {
412: function() { show_error_msg('action is undefined'); },
400: function() { show_error_msg('unknown action'); }
}
})
.done(function(msg) {
if(msg.status == 1) {
$('#enabled_domains_list option').remove();
$('#disabled_domains_list option').remove();
// prepare html form
$.each(msg.list, function(index, value) {
if($.inArray(value, msg.disabled) < 0) {
$('#enabled_domains_list').append("<option value='" + value + "'>" + value + "</option>");
} else {
$('#disabled_domains_list').append("<option value='" + value + "'>" + value + "</option>");
}
});
// open dialog
$("#disabled_domains_dialog").dialog({ title: "Disable domains" });
$("#disabled_domains_dialog").dialog("open");
}
else { show_error_msg(msg.errmsg); }
})
.fail(function() { show_error_msg("request to server failed!"); });
return true;
}
// send request to update disabled domains
function update_cwaf_disabled_domains() {
var conf = {};
var ddomains = [];
$("#disabled_domains_list option").each(function()
{
ddomains.push( $(this).val() );
});
conf.action = 'update_disabled_domains';
conf.disabled = JSON.stringify(ddomains);
get_cwaf_remote_data(cwaf_main_handler_url, conf);
$("#disabled_domains_dialog").dialog("close");
return true;
}
//
function show_updater_log_action() {
var conf = {};
conf.action = 'get_updater_log';
var task_queue = setInterval( function() {
if( !cwaf_plugin_tmp_data[conf.action]) {
// ajax failed
clearInterval(task_queue);
return true;
}
if(cwaf_plugin_tmp_data.update_finished) {
// update was finished
clearInterval(task_queue);
return true;
}
// update counter
cwaf_plugin_tmp_data.counter = cwaf_plugin_tmp_data.counter - 1;
if(! cwaf_plugin_tmp_data.counter > 0) {
// limit is off
show_error_msg('time limit is over');
clearInterval(task_queue);
return true;
}
// send request to show log
get_cwaf_remote_data(cwaf_main_handler_url, conf);
}, 3000);
return true;
}
// select needed REGEXP by type
function validation_rules(rulename) {
// list of validation rules
var db = {
// ids may contains digits, - and ,
'ids' : /^[1-9]{1}[0-9\-\,]+$/,
'int' : /^[1-9]{1}[0-9]+$/,
'url' : /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/,
'path' : /\//,
'filename' : /^[0-9a-zA-Z\^\&\'\@\{\}\[\]\,\$\=\!\-\#\(\)\.\%\+\~\_ ]+$/,
// auth - simple string with digits and literals
'auth' : /^[a-zA-Z0-9-_]+$/,
'text' : /[a-zA-Z0-9-_]{3,}/,
'version' : /^\d+\.\d+$/
};
// if rulename found - return regexp
if(rulename in db) { return db[rulename]; }
return undefined;
}
// control string input by REGEXP
function validateName(regex,selector,hide_el,warn_id,warn_msg) {
if(!regex.test( $(selector).val() )) {
$(selector + ":focus").css( {'border-color':'#f00', 'box-shadow':'0 0 10px #f00'} );
$(warn_id).text("Invalid input: "+warn_msg);
//$(hide_el).css('display' , 'none');
}
else {
$(selector + ":focus").removeAttr( 'style' );
$(warn_id).text("");
$(hide_el).css('display','inline');
}
}
// slider value in digit -> text
function get_debug_status(val) {
var debug_text;
if (val == 0) { debug_text = 'None'; }
if (val>0 && val<=3) { debug_text = 'Critical'; }
if (val>3 && val<=7) { debug_text = 'Warning'; }
if (val>7 && val<=9) { debug_text = 'Notice'; }
if(val == 10) { debug_text = 'All'; }
return val + " ("+ debug_text +")";
}
function get_msdebug_status(val) {
var debug_text;
if (val == 0) { debug_text = 'None'; }
if (val == 1) { debug_text = 'Errors'; }
if (val == 2) { debug_text = 'Warnings'; }
if (val == 3) { debug_text = 'Notices'; }
if (val == 4) { debug_text = 'Transactions'; }
if (val == 5) { debug_text = 'Detailed Transactions'; }
if (val>5 && val<=9) { debug_text = 'All'; }
return val + " ("+ debug_text +")";
}
// first run actions
function cwaf_plugin_firstrun(firstrun, rules_local_version) {
// set global flag (default: false)
plugin_firstrun = typeof firstrun !== 'undefined' ? firstrun : false;
// return if not first run
if(!plugin_firstrun) {
return true;
}
if(rules_local_version == 0) {
$.confirm_yesno(
"Welcome to COMODO Web Application Firewall!", //title
"Do you want to download latest COMODO Rules and run Protection Wizard?", //message
"Yes, I do", //button yes text
update_cwaf_rules_action,
"No, thanks", //button no text
update_firstrun,
350
);
} else {
$("#tabs").tabs("option", "selected", 6);
wiz_show_questionnaire();
}
return true;
}
function update_firstrun() {
$.ajax({
type: 'POST',
url: wiz_handler_url,
data: {action:'update_firstrun'}
});
return true;
}
function onload_DOM(conf_debug_value, conf_msdebug_value, rules_installed) {
var conf = {};
//load tabs from JQuery UI
$("#tabs").tabs({
activate: function( event, ui ) {
if(ui.newPanel.attr('id') == 'tabs-ctlg') {
if(rules_installed == 0) {
show_error_msg("No COMODO rules found!<br>Please load latest ruleset from '<b>Main</b>' tab.");
} else {
activate_catalog();
}
}
else if(ui.newPanel.attr('id') == 'tabs-wizard') {
wiz_show_questionnaire();
}
else if(ui.newPanel.attr('id') == 'tabs-cwatch') {
cwatch_show();
}
}
});
// show short help
$(document).tooltip();
// window for updater logs
$("#dialog") .dialog({
autoOpen: false,
modal: true,
width: '650px',
dialogClass: 'alert',
position: ['center', 'center']
});
// window for disabled domains
$("#disabled_domains_dialog") .dialog({
autoOpen: false,
modal: true,
width: '700px',
dialogClass: 'alert',
position: ['center', 'center']
});
// init slider (cwaf main config)
$("#debug").slider({
value:0,
min: 0,
max: 10,
step: 1,
slide: function( event, ui ) {
$("#amount").val( get_debug_status(ui.value) );
}
});
// init input field (cwaf main config)
$("#amount").val($("#debug").slider("value", conf_debug_value));
$("#amount").val(get_debug_status(conf_debug_value));
// init slider (cwaf modsec config)
$("#debug_level").slider({
value:0,
min: 0,
max: 9,
step: 1,
slide: function( event, ui ) {
$("#msamount").val( get_msdebug_status(ui.value) );
}
});
// init input field (cwaf modsec config)
$("#msamount").val($("#debug_level").slider("value", conf_msdebug_value));
$("#msamount").val(get_msdebug_status(conf_msdebug_value));
// activate events
cwaf_plugin_activate_button_events();
return true;
}
Back to Directory
File Manager