this.key_setDevicePolicies = "device.policies.set";
var htmlBuilder = new HtmlBuilder();
+ //append blacklist item
+ this.appendBlacklistItem = function(protocol, address, port) {
+ htmlBuilder.appendBlacklistItem(protocol, address, port);
+ }
+
//toggle togglable policies
- this.togglePolicy = function(policyContainer) {
- var enabled = $(policyContainer).find(".state").hasClass("on");
+ this.togglePolicy = function(stateContainer) {
+ var enabled = $(stateContainer).hasClass("on");
if (enabled) {
//switch off
- $(policyContainer).attr("data-state", 0).find(".state").removeClass("on").addClass("off");
+ $(stateContainer).parent(".policy.toggle").attr("data-state", 0).find(".state").removeClass("on").addClass("off");
} else {
//switch on
- $(policyContainer).attr("data-state", 1).find(".state").removeClass("off").addClass("on");
+ $(stateContainer).parent(".policy.toggle").attr("data-state", 1).find(".state").removeClass("off").addClass("on");
}
}
if ($(this).hasClass("toggle")) {
policyInstance.state = parseInt($(this).attr("data-state"));
- } else {
- switch(policyName) {
- case "iptables":
- policyInstance.items = $(this).find("textarea").val().split('\n');
- break;
- }
+ }
+
+ switch(policyName) {
+ case "iptables":
+ $(this).find(".blacklist .item").each(function() {
+ policyInstance.items.push($(this).find(".rule").text());
+ });
+ break;
}
groupInstance.policies.push(policyInstance);
var m_devicePolicies = "#policies-content";
var m_devicePoliciesList = "#policies-content .policies-list";
+ this.appendBlacklistItem = function(protocol, address, port) {
+ var rule = protocol + ":" + address + ":" + port;
+
+ $(m_devicePoliciesList).find(".blacklist").append(
+ "<div class='item'>" +
+ "<div class='rule'>" + rule + "</div>" +
+ "<div class='delete'><button type='button'>X</button></div>" +
+ "</div>"
+ );
+
+ $(m_devicePoliciesList).trigger("create");
+ }
+
this.getDevicePolicyListContainer = function() {
return m_devicePoliciesList;
}
PoliciesController.getPolicyHtml = function(policy, readonly) {
var formatedPolicy = {};
var disabled = "";
- var readonlyTextarea = "";
var toggleClass = "toggle";
if (readonly) {
disabled = "disabled";
- readonlyTextarea = "readonly='readonly'";
toggleClass = "";
}
+ formatedPolicy.uname = policy.name;
+ formatedPolicy.isToggle = true;
+ formatedPolicy.state = policy.state;
+ formatedPolicy.stateClass = ((policy.state == 1) ? "on" : "off");
+ formatedPolicy.policyBody = "<div class='state " + formatedPolicy.stateClass + " " + disabled + "'></div>";
+
switch(policy.name) {
case "usb":
- formatedPolicy.uname = policy.name;
formatedPolicy.name = "USB";
formatedPolicy.description = "Disable or enable USB";
- formatedPolicy.isToggle = true;
- formatedPolicy.state = policy.state;
- formatedPolicy.stateClass = ((policy.state == 1) ? "on" : "off");
- formatedPolicy.policyBody = "<div class='state " + formatedPolicy.stateClass + " " + disabled + "'></div>";
break;
case "sound":
- formatedPolicy.uname = policy.name;
formatedPolicy.name = "Sound";
formatedPolicy.description = "Disable or enable Sound";
- formatedPolicy.isToggle = true;
- formatedPolicy.state = policy.state;
- formatedPolicy.stateClass = ((policy.state == 1) ? "on" : "off");
- formatedPolicy.policyBody = "<div class='state " + formatedPolicy.stateClass + " " + disabled + "'></div>";
break;
case "wifi":
- formatedPolicy.uname = policy.name;
formatedPolicy.name = "Wi-Fi";
formatedPolicy.description = "Disable or enable Wi-Fi";
- formatedPolicy.isToggle = true;
- formatedPolicy.state = policy.state;
- formatedPolicy.stateClass = ((policy.state == 1) ? "on" : "off");
- formatedPolicy.policyBody = "<div class='state " + formatedPolicy.stateClass + " " + disabled + "'></div>";
break;
case "bluetooth":
- formatedPolicy.uname = policy.name;
formatedPolicy.name = "Bluetooth";
formatedPolicy.description = "Disable or enable Bluetooth";
- formatedPolicy.isToggle = true;
- formatedPolicy.state = policy.state;
- formatedPolicy.stateClass = ((policy.state == 1) ? "on" : "off");
- formatedPolicy.policyBody = "<div class='state " + formatedPolicy.stateClass + " " + disabled + "'></div>";
break;
case "dtv-tunner":
- formatedPolicy.uname = policy.name;
formatedPolicy.name = "DTV Tunner";
formatedPolicy.description = "Disable or enable DTV Tunner";
- formatedPolicy.isToggle = true;
- formatedPolicy.state = policy.state;
- formatedPolicy.stateClass = ((policy.state == 1) ? "on" : "off");
- formatedPolicy.policyBody = "<div class='state " + formatedPolicy.stateClass + " " + disabled + "'></div>";
break;
case "iptables":
- formatedPolicy.uname = policy.name;
formatedPolicy.name = "IP tables";
formatedPolicy.description = "Add or remove IP restrictions";
- formatedPolicy.isToggle = false;
- formatedPolicy.state = policy.state;
+
var policies = "";
+ var addButton = "";
+ var formButtons = "";
+
+ if (!readonly) {
+ addButton = "<button type='button'>Add</button>";
+ formButtons = "<button type='submit'>Save</button>" +
+ "<button type='button' class='cancel'>Cancel</button>";
+ }
+
policy.items.forEach(function(item) {
- policies += item + "\n";
+ policies += "<div class='item'>" +
+ "<div class='rule'>" + item + "</div>" +
+ "<div class='delete'><button type='button' " + disabled + " class='btn btn-sm btn-default'>X</button></div>" +
+ "</div>";
});
- formatedPolicy.policyBody = "<div class='body'><textarea " + readonlyTextarea + ">" + policies + "</textarea></div>";
+
+ formatedPolicy.policyBody +=
+ "<div style='clear:both;'></div>" +
+ "<div class='blacklist-header'>" +
+ "<span>Blacklist</span>" +
+ addButton +
+ "</div>" +
+ "<div style='clear:both;'></div>" +
+ "<div class='collapse blacklist-add'>" +
+ "<form class='form-horizontal'>" +
+ "<label for='protocol'>Protocol</label>" +
+ "<input type='text' name='protocol' required='required' id='protocol' placeholder='TCP or UDP or *'>" +
+ "<label for='address'>Address</label>" +
+ "<input type='text' name='address' required='required' id='address' placeholder='Domain name or IP address'>" +
+ "<label for='port'>Port</label>" +
+ "<input type='text' name='port' required='required' id='port' placeholder='P or P1,P2 or P1-P10 or *'>" +
+ formButtons +
+ "</form>" +
+ "</div>" +
+ "<div style='clear:both;'></div>" +
+ "<div class='blacklist'>" +
+ policies +
+ "</div>";
break;
default:
console.log("Error, add case for policy: " + policy.name);
bindEvent("click", "#dashboard .controls .btn-reports", deviceReportsControllHandler);
bindEvent("click", "#dashboard .controls .btn-policies", devicePoliciesControllHandler);
bindEvent("click", "#dashboard .agent-list .agent", agentPoliciesControllHandler);
- bindEvent("click", "#policies-content .policies-list li .policy.toggle", policyToggleControllHandler);
+ bindEvent("click", "#policies-content .policies-list li .policy.toggle div.state", policyToggleControllHandler);
+ bindEvent("click", "#policies-content .policies-list li .policy[data-policy='iptables'] .blacklist .item .delete button", deleteBlacklistItemClick);
+ bindEvent("submit", "#policies-content .policies-list li .policy[data-policy='iptables'] form", saveBlacklistItemClick);
+ bindEvent("click", "#policies-content .policies-list li .policy[data-policy='iptables'] .blacklist-header button", toggleAddBlacklistItem);
+ bindEvent("click", "#policies-content .policies-list li .policy[data-policy='iptables'] .blacklist-add button.cancel", toggleAddBlacklistItem);
});
function leftHeaderControllHandler() {
function policyToggleControllHandler() {
policiesController.togglePolicy($(this));
+}
+
+function deleteBlacklistItemClick() {
+ $(this).closest(".item").slideUp(500 , function(){ $(this).remove(); });
+}
+
+function saveBlacklistItemClick() {
+ event.preventDefault();
+
+ var form = $(this).serializeArray().reduce(function(obj, item) {
+ obj[item.name] = item.value;
+
+ return obj;
+ }, {});
+
+ policiesController.appendBlacklistItem(form.protocol, form.address, form.port);
+ $(this)[0].reset();
+}
+
+function toggleAddBlacklistItem() {
+ $("#policies-content .policies-list li .policy[data-policy='iptables'] .blacklist-add form")[0].reset();
+ $("#policies-content .policies-list li .policy[data-policy='iptables'] .blacklist-add").toggleClass("active");
}
\ No newline at end of file