Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * This program is copyright © 2008-2013 Eric Bishop and is distributed under the terms of the GNU GPL
- * version 2.0 with a special clarification/exception that permits adapting the program to
- * configure proprietary "back end" software provided that all modifications to the web interface
- * itself remain covered by the GPL.
- * See http://gargoyle-router.com/faq.html#qfoss for more information
- */
- function saveChanges() {
- errorList = proofreadAll();
- if (errorList.length > 0) errorString = errorList.join("\n") + "\n\n" + UI.ErrChanges, alert(errorString);
- else {
- setControlsEnabled(!1, !0);
- var e = [],
- t = ["redirect", "redirect_disabled", "dmz"];
- for (typeIndex = 0; typeIndex < t.length; typeIndex++) {
- var n = t[typeIndex],
- r = uciOriginal.getAllSectionsOfType("firewall", n);
- while (r.length > 0) {
- var i = r.pop();
- uciOriginal.removeSection("firewall", i), e.push("uci del firewall." + i)
- }
- }
- var s = uciOriginal.clone(),
- o = document.getElementById("portf_table_container").firstChild,
- u = getTableDataArray(o, !0, !1),
- a = 0,
- f = 0;
- for (rowIndex = 0; rowIndex < u.length; rowIndex++) {
- var l = u[rowIndex],
- c = l[5].checked,
- h = l[1].toLowerCase() == UI.both.toLowerCase() ? ["tcp", "udp"] : [l[1].toLowerCase()],
- p = 0;
- for (p = 0; p < h.length; p++) {
- var d = "redirect_" + (c ? "enabled" : "disabled") + "_number_" + (c ? a : f);
- e.push("uci set firewall." + d + "=" + (c ? "redirect" : "redirect_disabled")), s.set("firewall", d, "", c ? "redirect" : "redirect_disabled"), s.set("firewall", d, "name", l[0]), s.set("firewall", d, "src", "wan"), s.set("firewall", d, "dest", "lan"), s.set("firewall", d, "proto", h[p]), s.set("firewall", d, "src_dport", l[2]), s.set("firewall", d, "dest_ip", l[3]), s.set("firewall", d, "dest_port", l[4]), s.set("firewall", d, "reflection", "1"), s.set("firewall", d, "reflection_src", "external"), a += c ? 1 : 0, f += c ? 0 : 1
- }
- }
- var v = document.getElementById("portfrange_table_container").firstChild,
- m = getTableDataArray(v, !0, !1);
- for (rowIndex = 0; rowIndex < m.length; rowIndex++) {
- var l = m[rowIndex],
- c = l[5].checked,
- h = l[1].toLowerCase() == UI.both.toLowerCase() ? ["tcp", "udp"] : [l[1].toLowerCase()],
- p = 0;
- for (p = 0; p < h.length; p++) {
- var d = "redirect_" + (c ? "enabled" : "disabled") + "_number_" + (c ? a : f);
- e.push("uci set firewall." + d + "=" + (c ? "redirect" : "redirect_disabled")), s.set("firewall", d, "", c ? "redirect" : "redirect_disabled"), s.set("firewall", d, "name", l[0]), s.set("firewall", d, "src", "wan"), s.set("firewall", d, "dest", "lan"), s.set("firewall", d, "proto", h[p]), s.set("firewall", d, "src_dport", l[2] + "-" + l[3]), s.set("firewall", d, "dest_port", l[2] + "-" + l[3]), s.set("firewall", d, "dest_ip", l[4]), s.set("firewall", d, "reflection", "1"), s.set("firewall", d, "reflection_src", "external"), a += c ? 1 : 0, f += c ? 0 : 1
- }
- }
- if (document.getElementById("dmz_enabled").checked) {
- var d = "dmz";
- e.push("uci firewall.dmz=dmz"), s.set("firewall", d, "", "dmz"), s.set("firewall", d, "from", "wan"), s.set("firewall", d, "to_ip", document.getElementById("dmz_ip").value)
- }
- e.push("uci commit"), restartFirewallCommand = "\nsh /usr/lib/gargoyle/restart_firewall.sh ;\n", upnpStartCommands = new Array, upnpdEnabled = document.getElementById("upnp_enabled").checked, upnpdEnabled ? (upnpStartCommands.push("/etc/init.d/miniupnpd enable"), s.set("upnpd", "config", "enable_upnp", "1"), s.set("upnpd", "config", "enable_natpmp", "1"), s.set("upnpd", "config", "upload", document.getElementById("upnp_up").value), s.set("upnpd", "config", "download", document.getElementById("upnp_down").value)) : (s.set("upnpd", "config", "enable_upnp", "0"), s.set("upnpd", "config", "enable_natpmp", "0"), upnpStartCommands.push("/etc/init.d/miniupnpd disable")), commands = e.join("\n") + "\n" + s.getScriptCommands(uciOriginal) + "\n" + upnpStartCommands.join("\n") + "\n" + restartFirewallCommand;
- var g = getParameterDefinition("commands", commands) + "&" + getParameterDefinition("hash", document.cookie.replace(/^.*hash=/, "").replace(/[\t ;]+.*$/, "")),
- y = function(e) {
- e.readyState == 4 && (uciOriginal = s.clone(), resetData(), setControlsEnabled(!0))
- };
- runAjax("POST", "utility/run_commands.sh", g, y)
- }
- }
- function proofreadAll() {
- return controlIds = ["dmz_ip", "upnp_up", "upnp_down"], labelIds = ["dmz_ip_label", "upnp_up_label", "upnp_down_label"], functions = [validateIP, validateNumeric, validateNumeric], returnCodes = [0, 0, 0], visibilityIds = controlIds, errors = proofreadFields(controlIds, labelIds, functions, returnCodes, visibilityIds), errors
- }
- function addPortfRule() {
- errors = proofreadForwardSingle();
- if (errors.length > 0) alert(errors.join("\n") + "\n\n" + prtS.AFRErr);
- else {
- values = new Array, ids = ["add_desc", "add_prot", "add_fp", "add_ip", "add_dp"];
- for (idIndex in ids) element = document.getElementById(ids[idIndex]), v = element.value, v = v == "" ? "-" : v, values.push(v), element.type == "text" && (element.value = "");
- values[4] = values[4] == "-" ? values[2] : values[4], portfTable = document.getElementById("portf_table_container").firstChild, currentPortfData = getTableDataArray(portfTable, !0, !1), otherProto = values[1] == "TCP" ? "UDP" : "TCP", mergedWithExistingRule = !1;
- for (rowDataIndex in currentPortfData) rowData = currentPortfData[rowDataIndex], otherProto == rowData[1] && values[2] == rowData[2] && values[3] == rowData[3] && values[4] == rowData[4] && (portfTable.rows[rowDataIndex * 1 + 1].childNodes[1].firstChild.data = UI.both, values[0] != "-" && rowData[0] == "-" && (portfTable.rows[rowDataIndex * 1 + 1].childNodes[0].firstChild.data = values[0]), table1Container = document.getElementById("portf_table_container"), table1Container.firstChild != null && table1Container.removeChild(table1Container.firstChild), table1Container.appendChild(portfTable), mergedWithExistingRule = !0);
- mergedWithExistingRule || (checkbox = createInput("checkbox"), checkbox.checked = !0, values.push(checkbox), values.push(createEditButton(!0)), addTableRow(portfTable, values, !0, !1))
- }
- }
- function addPortfRangeRule() {
- errors = proofreadForwardRange();
- if (errors.length > 0) alert(errors.join("\n") + "\n\n" + prtS.AFRErr);
- else {
- values = new Array, ids = ["addr_desc", "addr_prot", "addr_sp", "addr_ep", "addr_ip"];
- for (idIndex in ids) element = document.getElementById(ids[idIndex]), v = element.value, v = v == "" ? "-" : v, values.push(v), element.type == "text" && (element.value = "");
- portfRangeTable = document.getElementById("portfrange_table_container").firstChild, currentRangeData = getTableDataArray(portfRangeTable, !0, !1), otherProto = values[1] == "TCP" ? "UDP" : "TCP", mergedWithExistingRule = !1;
- for (rowDataIndex in currentRangeData) rowData = currentRangeData[rowDataIndex], otherProto == rowData[1] && values[2] == rowData[2] && values[3] == rowData[3] && values[4] == rowData[4] && (portfRangeTable.rows[rowDataIndex * 1 + 1].childNodes[1].firstChild.data = UI.both, values[0] != "-" && rowData[0] == "-" && (portfRangeTable.rows[rowDataIndex * 1 + 1].childNodes[0].firstChild.data = values[0]), table2Container = document.getElementById("portfrange_table_container"), table2Container.firstChild != null && table2Container.removeChild(table2Container.firstChild), table2Container.appendChild(portfRangeTable), mergedWithExistingRule = !0);
- mergedWithExistingRule || (checkbox = createInput("checkbox"), checkbox.checked = !0, values.push(checkbox), values.push(createEditButton(!1)), portfrangeTable = document.getElementById("portfrange_table_container").firstChild, addTableRow(portfrangeTable, values, !0, !1))
- }
- }
- function proofreadForwardRange(e, t, n) {
- e = e == null ? document : e, t = t == null ? document : t;
- var r = ["addr_sp", "addr_ep", "addr_ip"],
- i = ["addr_sp_label", "addr_ep_label", "addr_ip_label"],
- s = [validateNumeric, validateNumeric, validateIP],
- o = [0, 0, 0],
- u = r,
- a = proofreadFields(r, i, s, o, u, e);
- if (a.length == 0) {
- 1 * e.getElementById("addr_sp").value > 1 * e.getElementById("addr_ep").value && a.push(prtS.GTErr);
- var f = t.getElementById("portf_table_container").firstChild,
- l = getTableDataArray(f, !0, !1),
- c = e.getElementById("addr_sp").value,
- h = e.getElementById("addr_ep").value,
- p = e.getElementById("addr_prot").value,
- d = 0;
- for (d = 0; d < l.length; d++) {
- var v = l[d];
- (p == v[1] || p == UI.both || v[1] == UI.both) && c * 1 <= v[2] * 1 && h * 1 >= v[2] * 1 && a.push(prtS.DupErr)
- }
- var m = t.getElementById("portfrange_table_container").firstChild,
- g = getTableDataArray(m, !0, !1);
- for (d = 0; d < g.length; d++)
- if (m.rows[d + 1] != n) {
- var v = g[d];
- (p == v[1] || p == UI.both || v[1] == UI.both) && v[2] * 1 <= h * 1 && v[3] * 1 >= c * 1 && a.push(prtS.DupErr)
- }
- }
- return a
- }
- function proofreadForwardSingle(e, t, n) {
- e = e == null ? document : e, t = t == null ? document : t;
- var r = ["add_fp", "add_ip"],
- i = ["add_fp_label", "add_ip_label", "add_dp_label"],
- s = [validateNumeric, validateIP, validateNumeric],
- o = [0, 0, 0],
- u = r;
- e.getElementById("add_dp").value.length > 0 && r.push("add_dp");
- var a = proofreadFields(r, i, s, o, u, e);
- if (a.length == 0) {
- var f = t.getElementById("portf_table_container").firstChild,
- l = getTableDataArray(f, !0, !1),
- c = e.getElementById("add_fp").value,
- h = e.getElementById("add_prot").value,
- p = 0;
- for (p = 0; p < l.length; p++)
- if (f.rows[p + 1] != n) {
- var d = l[p];
- (h == d[1] || h == UI.both || d[1] == UI.both) && c == d[2] && a.push(prtS.CopErr)
- }
- var v = t.getElementById("portfrange_table_container").firstChild,
- m = getTableDataArray(v, !0, !1);
- for (p = 0; p < m; p++) {
- var d = m[p];
- (h == d[1] || h == UI.both || d[1] == UI.both) && d[2] * 1 <= c * 1 && d[3] * 1 >= c * 1 && a.push(prtS.CopErr)
- }
- }
- return a
- }
- function resetData() {
- var e = new Array,
- t = new Array,
- n = new Array,
- r = new Array,
- i = "",
- s = [],
- o = [];
- s.tcp = [], s.udp = [], o.tcp = [], o.udp = [];
- var u = ["redirect", "redirect_disabled"];
- for (typeIndex = 0; typeIndex < u.length; typeIndex++) {
- var a = u[typeIndex],
- f = uciOriginal.getAllSectionsOfType("firewall", u[typeIndex]);
- for (rdIndex = 0; rdIndex < f.length; rdIndex++) {
- var l = f[rdIndex],
- c = uciOriginal.get("firewall", l, "name");
- c = c == "" ? "-" : c;
- var h = uciOriginal.get("firewall", l, "proto").toLowerCase(),
- p = uciOriginal.get("firewall", l, "src_dport"),
- d = uciOriginal.get("firewall", l, "dest_ip"),
- v = uciOriginal.get("firewall", l, "dest_port");
- if (p == "" && v == "" && a == "redirect") i = i == "" ? d : i;
- else if (h.toLowerCase() == "tcp" || h.toLowerCase() == "udp") {
- checkbox = createInput("checkbox"), checkbox.checked = a == "redirect" ? !0 : !1, v = v == "" ? p : v, otherProto = h == "tcp" ? "udp" : "tcp", hashStr = c + "-" + p + "-" + d + "-" + v;
- if (p.match(/-/)) {
- var m = p.split(/-/);
- if (o[otherProto][hashStr] != null) o[otherProto][hashStr][1] = UI.both;
- else {
- var g = [c, h.toUpperCase(), m[0], m[1], d, checkbox, createEditButton(!1)];
- t.push(g), o[h][hashStr] = g, r.push(checkbox.checked)
- }
- } else if (s[otherProto][hashStr] != null) s[otherProto][hashStr][1] = UI.both;
- else {
- var g = [c, h.toUpperCase(), p, d, v, checkbox, createEditButton(!0)];
- e.push(g), s[h][hashStr] = g, n.push(checkbox.checked)
- }
- }
- }
- }
- x = [prtS.Desc, prtS.Proto, prtS.FPrt, prtS.TIP, prtS.TPrt, UI.Enabled, ""], portfTable = createTable(x, e, "portf_table", !0, !1), table1Container = document.getElementById("portf_table_container"), table1Container.firstChild != null && table1Container.removeChild(table1Container.firstChild), table1Container.appendChild(portfTable), x = [prtS.Desc, prtS.Proto, prtS.SPrt, prtS.EPrt, prtS.TIP, UI.Enabled, ""], portfrangeTable = createTable(x, t, "portf_range_table", !0, !1), table2Container = document.getElementById("portfrange_table_container"), document.getElementById("portfrange_table_container").firstChild != null && table2Container.removeChild(table2Container.firstChild), table2Container.appendChild(portfrangeTable);
- for (spIndex = 0; spIndex < n.length; spIndex++) e[spIndex][5].checked = n[spIndex];
- for (prIndex = 0; prIndex < r.length; prIndex++) t[prIndex][5].checked = r[prIndex];
- clearIds = ["add_desc", "add_fp", "add_ip", "add_dp", "addr_desc", "addr_sp", "addr_ep", "addr_ip"];
- for (clearIndex = 0; clearIndex < clearIds.length; clearIndex++) document.getElementById(clearIds[clearIndex]).value = "";
- var y = uciOriginal.getAllSectionsOfType("firewall", "dmz");
- document.getElementById("dmz_enabled").checked = y.length > 0;
- if (y.length > 0) document.getElementById("dmz_ip").value = uciOriginal.get("firewall", y[0], "to_ip");
- else {
- var b = currentLanIp.split(/\.[^\.]*$/)[0],
- w = parseInt(currentLanIp.split(".")[3]);
- w >= 254 ? w-- : w++, b = b + "." + w, document.getElementById("dmz_ip").value = b
- }
- setDmzEnabled(), document.getElementById("upnp_enabled").checked = upnpdEnabled, upElement = document.getElementById("upnp_up"), downElement = document.getElementById("upnp_down"), upElement.value = uciOriginal.get("upnpd", "config", "upload"), upElement.value = upElement.value == "" ? 1250 : upElement.value, downElement.value = uciOriginal.get("upnpd", "config", "download"), downElement.value = downElement.value == "" ? 1250 : downElement.value, setUpnpEnabled(), initializeDescriptionVisibility(uciOriginal, "upnp_help"), uciOriginal.removeSection("gargoyle", "help");
- if (upnpdEnabled) update_upnp(), timerid = setInterval("update_upnp()", 1e4);
- else {
- clearInterval(timerid), timerid = null;
- var E = new Array,
- S = ["***", "***********", "***** "];
- E.push(S);
- var x = [prtS.Prot, prtS.LHst, prtS.Port],
- T = createTable(x, E, "upnp_table", !1, !1),
- N = document.getElementById("upnp_table_container");
- N.firstChild != null && N.removeChild(N.firstChild), N.appendChild(T)
- }
- }
- function setUpnpEnabled() {
- enableAssociatedField(document.getElementById("upnp_enabled"), "upnp_up", document.getElementById("upnp_up").value), enableAssociatedField(document.getElementById("upnp_enabled"), "upnp_down", document.getElementById("upnp_down").value)
- }
- function setDmzEnabled() {
- enableAssociatedField(document.getElementById("dmz_enabled"), "dmz_ip", document.getElementById("dmz_ip").value)
- }
- function createEditButton(e) {
- var t = createInput("button");
- return t.value = UI.Edit, t.className = "default_button", t.onclick = e ? function() {
- editForward(!0, this)
- } : function() {
- editForward(!1, this)
- }, t
- }
- function editForward(e, t) {
- if (typeof editForwardWindow != "undefined") try {
- editForwardWindow.close()
- } catch (n) {}
- try {
- xCoor = window.screenX + 225, yCoor = window.screenY + 225
- } catch (n) {
- xCoor = window.left + 225, yCoor = window.top + 225
- }
- var r = e ? "single_forward_edit.sh" : "multi_forward_edit.sh";
- editForwardWindow = window.open(r, "edit", "width=560,height=180,left=" + xCoor + ",top=" + yCoor), saveButton = createInput("button", editForwardWindow.document), closeButton = createInput("button", editForwardWindow.document), saveButton.value = UI.CApplyChanges, saveButton.className = "default_button", closeButton.value = UI.CDiscardChanges, closeButton.className = "default_button", editRow = t.parentNode.parentNode, runOnEditorLoaded = function() {
- updateDone = !1;
- if (editForwardWindow.document != null && editForwardWindow.document.getElementById("bottom_button_container") != null) {
- editForwardWindow.document.getElementById("bottom_button_container").appendChild(saveButton), editForwardWindow.document.getElementById("bottom_button_container").appendChild(closeButton);
- var t = e ? "" : "r";
- editForwardWindow.document.getElementById("add" + t + "_button").style.display = "none", editForwardWindow.document.getElementById("add" + t + "_desc").value = editRow.childNodes[0].firstChild.data, setSelectedText("add" + t + "_prot", editRow.childNodes[1].firstChild.data, editForwardWindow.document), e ? (editForwardWindow.document.getElementById("add_fp").value = editRow.childNodes[2].firstChild.data, editForwardWindow.document.getElementById("add_ip").value = editRow.childNodes[3].firstChild.data, editForwardWindow.document.getElementById("add_dp").value = editRow.childNodes[4].firstChild.data) : (editForwardWindow.document.getElementById("addr_sp").value = editRow.childNodes[2].firstChild.data, editForwardWindow.document.getElementById("addr_ep").value = editRow.childNodes[3].firstChild.data, editForwardWindow.document.getElementById("addr_ip").value = editRow.childNodes[4].firstChild.data), closeButton.onclick = function() {
- editForwardWindow.close()
- }, saveButton.onclick = function() {
- var n;
- e ? n = proofreadForwardSingle(editForwardWindow.document, document, editRow) : n = proofreadForwardRange(editForwardWindow.document, document, editRow), n.length > 0 ? alert(n.join("\n") + "\n" + prtS.UpErr) : (editRow.childNodes[0].firstChild.data = editForwardWindow.document.getElementById("add" + t + "_desc").value, editRow.childNodes[1].firstChild.data = getSelectedValue("add" + t + "_prot", editForwardWindow.document), e ? (editRow.childNodes[2].firstChild.data = editForwardWindow.document.getElementById("add_fp").value, editRow.childNodes[3].firstChild.data = editForwardWindow.document.getElementById("add_ip").value, editRow.childNodes[4].firstChild.data = editForwardWindow.document.getElementById("add_dp").value) : (editRow.childNodes[2].firstChild.data = editForwardWindow.document.getElementById("addr_sp").value, editRow.childNodes[3].firstChild.data = editForwardWindow.document.getElementById("addr_ep").value, editRow.childNodes[4].firstChild.data = editForwardWindow.document.getElementById("addr_ip").value), editForwardWindow.close())
- }, editForwardWindow.moveTo(xCoor, yCoor), editForwardWindow.focus(), updateDone = !0
- }
- updateDone || setTimeout("runOnEditorLoaded()", 250)
- }, runOnEditorLoaded()
- }
- function update_upnp() {
- if (!updateInProgress) {
- updateInProgress = !0;
- var e = "iptables -nL MINIUPNPD | grep ACCEPT",
- t = getParameterDefinition("commands", e) + "&" + getParameterDefinition("hash", document.cookie.replace(/^.*hash=/, "").replace(/[\t ;]+.*$/, "")),
- n = function(e) {
- if (e.readyState == 4) {
- var t = e.responseText.split("\n"),
- n = new Array,
- r, i = 0;
- if (t != null)
- for (r = 0; r < t.length; r++) {
- var s = t[r].split(/\s+/);
- if (typeof s[6] != "undefined") {
- var o = [s[1], s[4], s[6].substr(4)];
- n.push(o), i += 1
- }
- }
- if (i == 0) {
- var o = ["***", "***********", "***** "];
- n.push(o)
- }
- var u = [prtS.Prot, prtS.LHst, prtS.Port],
- a = createTable(u, n, "upnp_table", !1, !1),
- f = document.getElementById("upnp_table_container");
- f.firstChild != null && f.removeChild(f.firstChild), f.appendChild(a), updateInProgress = !1
- }
- };
- runAjax("POST", "utility/run_commands.sh", t, n)
- }
- }
- var prtS = new Object,
- updateInProgress = !1,
- timerid = null;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement