Advertisement
repeat83

NAT Loopback enabled (1.7.1)/www/js/port_forwarding.js

Jun 23rd, 2015
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * This program is copyright © 2008-2013 Eric Bishop and is distributed under the terms of the GNU GPL
  3.  * version 2.0 with a special clarification/exception that permits adapting the program to
  4.  * configure proprietary "back end" software provided that all modifications to the web interface
  5.  * itself remain covered by the GPL.
  6.  * See http://gargoyle-router.com/faq.html#qfoss for more information
  7.  */
  8. function saveChanges() {
  9.     errorList = proofreadAll();
  10.     if (errorList.length > 0) errorString = errorList.join("\n") + "\n\n" + UI.ErrChanges, alert(errorString);
  11.     else {
  12.         setControlsEnabled(!1, !0);
  13.         var e = [],
  14.             t = ["redirect", "redirect_disabled", "dmz"];
  15.         for (typeIndex = 0; typeIndex < t.length; typeIndex++) {
  16.             var n = t[typeIndex],
  17.                 r = uciOriginal.getAllSectionsOfType("firewall", n);
  18.             while (r.length > 0) {
  19.                 var i = r.pop();
  20.                 uciOriginal.removeSection("firewall", i), e.push("uci del firewall." + i)
  21.             }
  22.         }
  23.         var s = uciOriginal.clone(),
  24.             o = document.getElementById("portf_table_container").firstChild,
  25.             u = getTableDataArray(o, !0, !1),
  26.             a = 0,
  27.             f = 0;
  28.         for (rowIndex = 0; rowIndex < u.length; rowIndex++) {
  29.             var l = u[rowIndex],
  30.                 c = l[5].checked,
  31.                 h = l[1].toLowerCase() == UI.both.toLowerCase() ? ["tcp", "udp"] : [l[1].toLowerCase()],
  32.                 p = 0;
  33.             for (p = 0; p < h.length; p++) {
  34.                 var d = "redirect_" + (c ? "enabled" : "disabled") + "_number_" + (c ? a : f);
  35.                 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
  36.             }
  37.         }
  38.         var v = document.getElementById("portfrange_table_container").firstChild,
  39.             m = getTableDataArray(v, !0, !1);
  40.         for (rowIndex = 0; rowIndex < m.length; rowIndex++) {
  41.             var l = m[rowIndex],
  42.                 c = l[5].checked,
  43.                 h = l[1].toLowerCase() == UI.both.toLowerCase() ? ["tcp", "udp"] : [l[1].toLowerCase()],
  44.                 p = 0;
  45.             for (p = 0; p < h.length; p++) {
  46.                 var d = "redirect_" + (c ? "enabled" : "disabled") + "_number_" + (c ? a : f);
  47.                 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
  48.             }
  49.         }
  50.         if (document.getElementById("dmz_enabled").checked) {
  51.             var d = "dmz";
  52.             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)
  53.         }
  54.         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;
  55.         var g = getParameterDefinition("commands", commands) + "&" + getParameterDefinition("hash", document.cookie.replace(/^.*hash=/, "").replace(/[\t ;]+.*$/, "")),
  56.             y = function(e) {
  57.                 e.readyState == 4 && (uciOriginal = s.clone(), resetData(), setControlsEnabled(!0))
  58.             };
  59.         runAjax("POST", "utility/run_commands.sh", g, y)
  60.     }
  61. }
  62.  
  63. function proofreadAll() {
  64.     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
  65. }
  66.  
  67. function addPortfRule() {
  68.     errors = proofreadForwardSingle();
  69.     if (errors.length > 0) alert(errors.join("\n") + "\n\n" + prtS.AFRErr);
  70.     else {
  71.         values = new Array, ids = ["add_desc", "add_prot", "add_fp", "add_ip", "add_dp"];
  72.         for (idIndex in ids) element = document.getElementById(ids[idIndex]), v = element.value, v = v == "" ? "-" : v, values.push(v), element.type == "text" && (element.value = "");
  73.         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;
  74.         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);
  75.         mergedWithExistingRule || (checkbox = createInput("checkbox"), checkbox.checked = !0, values.push(checkbox), values.push(createEditButton(!0)), addTableRow(portfTable, values, !0, !1))
  76.     }
  77. }
  78.  
  79. function addPortfRangeRule() {
  80.     errors = proofreadForwardRange();
  81.     if (errors.length > 0) alert(errors.join("\n") + "\n\n" + prtS.AFRErr);
  82.     else {
  83.         values = new Array, ids = ["addr_desc", "addr_prot", "addr_sp", "addr_ep", "addr_ip"];
  84.         for (idIndex in ids) element = document.getElementById(ids[idIndex]), v = element.value, v = v == "" ? "-" : v, values.push(v), element.type == "text" && (element.value = "");
  85.         portfRangeTable = document.getElementById("portfrange_table_container").firstChild, currentRangeData = getTableDataArray(portfRangeTable, !0, !1), otherProto = values[1] == "TCP" ? "UDP" : "TCP", mergedWithExistingRule = !1;
  86.         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);
  87.         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))
  88.     }
  89. }
  90.  
  91. function proofreadForwardRange(e, t, n) {
  92.     e = e == null ? document : e, t = t == null ? document : t;
  93.     var r = ["addr_sp", "addr_ep", "addr_ip"],
  94.         i = ["addr_sp_label", "addr_ep_label", "addr_ip_label"],
  95.         s = [validateNumeric, validateNumeric, validateIP],
  96.         o = [0, 0, 0],
  97.         u = r,
  98.         a = proofreadFields(r, i, s, o, u, e);
  99.     if (a.length == 0) {
  100.         1 * e.getElementById("addr_sp").value > 1 * e.getElementById("addr_ep").value && a.push(prtS.GTErr);
  101.         var f = t.getElementById("portf_table_container").firstChild,
  102.             l = getTableDataArray(f, !0, !1),
  103.             c = e.getElementById("addr_sp").value,
  104.             h = e.getElementById("addr_ep").value,
  105.             p = e.getElementById("addr_prot").value,
  106.             d = 0;
  107.         for (d = 0; d < l.length; d++) {
  108.             var v = l[d];
  109.             (p == v[1] || p == UI.both || v[1] == UI.both) && c * 1 <= v[2] * 1 && h * 1 >= v[2] * 1 && a.push(prtS.DupErr)
  110.         }
  111.         var m = t.getElementById("portfrange_table_container").firstChild,
  112.             g = getTableDataArray(m, !0, !1);
  113.         for (d = 0; d < g.length; d++)
  114.             if (m.rows[d + 1] != n) {
  115.                 var v = g[d];
  116.                 (p == v[1] || p == UI.both || v[1] == UI.both) && v[2] * 1 <= h * 1 && v[3] * 1 >= c * 1 && a.push(prtS.DupErr)
  117.             }
  118.     }
  119.     return a
  120. }
  121.  
  122. function proofreadForwardSingle(e, t, n) {
  123.     e = e == null ? document : e, t = t == null ? document : t;
  124.     var r = ["add_fp", "add_ip"],
  125.         i = ["add_fp_label", "add_ip_label", "add_dp_label"],
  126.         s = [validateNumeric, validateIP, validateNumeric],
  127.         o = [0, 0, 0],
  128.         u = r;
  129.     e.getElementById("add_dp").value.length > 0 && r.push("add_dp");
  130.     var a = proofreadFields(r, i, s, o, u, e);
  131.     if (a.length == 0) {
  132.         var f = t.getElementById("portf_table_container").firstChild,
  133.             l = getTableDataArray(f, !0, !1),
  134.             c = e.getElementById("add_fp").value,
  135.             h = e.getElementById("add_prot").value,
  136.             p = 0;
  137.         for (p = 0; p < l.length; p++)
  138.             if (f.rows[p + 1] != n) {
  139.                 var d = l[p];
  140.                 (h == d[1] || h == UI.both || d[1] == UI.both) && c == d[2] && a.push(prtS.CopErr)
  141.             }
  142.         var v = t.getElementById("portfrange_table_container").firstChild,
  143.             m = getTableDataArray(v, !0, !1);
  144.         for (p = 0; p < m; p++) {
  145.             var d = m[p];
  146.             (h == d[1] || h == UI.both || d[1] == UI.both) && d[2] * 1 <= c * 1 && d[3] * 1 >= c * 1 && a.push(prtS.CopErr)
  147.         }
  148.     }
  149.     return a
  150. }
  151.  
  152. function resetData() {
  153.     var e = new Array,
  154.         t = new Array,
  155.         n = new Array,
  156.         r = new Array,
  157.         i = "",
  158.         s = [],
  159.         o = [];
  160.     s.tcp = [], s.udp = [], o.tcp = [], o.udp = [];
  161.     var u = ["redirect", "redirect_disabled"];
  162.     for (typeIndex = 0; typeIndex < u.length; typeIndex++) {
  163.         var a = u[typeIndex],
  164.             f = uciOriginal.getAllSectionsOfType("firewall", u[typeIndex]);
  165.         for (rdIndex = 0; rdIndex < f.length; rdIndex++) {
  166.             var l = f[rdIndex],
  167.                 c = uciOriginal.get("firewall", l, "name");
  168.             c = c == "" ? "-" : c;
  169.             var h = uciOriginal.get("firewall", l, "proto").toLowerCase(),
  170.                 p = uciOriginal.get("firewall", l, "src_dport"),
  171.                 d = uciOriginal.get("firewall", l, "dest_ip"),
  172.                 v = uciOriginal.get("firewall", l, "dest_port");
  173.             if (p == "" && v == "" && a == "redirect") i = i == "" ? d : i;
  174.             else if (h.toLowerCase() == "tcp" || h.toLowerCase() == "udp") {
  175.                 checkbox = createInput("checkbox"), checkbox.checked = a == "redirect" ? !0 : !1, v = v == "" ? p : v, otherProto = h == "tcp" ? "udp" : "tcp", hashStr = c + "-" + p + "-" + d + "-" + v;
  176.                 if (p.match(/-/)) {
  177.                     var m = p.split(/-/);
  178.                     if (o[otherProto][hashStr] != null) o[otherProto][hashStr][1] = UI.both;
  179.                     else {
  180.                         var g = [c, h.toUpperCase(), m[0], m[1], d, checkbox, createEditButton(!1)];
  181.                         t.push(g), o[h][hashStr] = g, r.push(checkbox.checked)
  182.                     }
  183.                 } else if (s[otherProto][hashStr] != null) s[otherProto][hashStr][1] = UI.both;
  184.                 else {
  185.                     var g = [c, h.toUpperCase(), p, d, v, checkbox, createEditButton(!0)];
  186.                     e.push(g), s[h][hashStr] = g, n.push(checkbox.checked)
  187.                 }
  188.             }
  189.         }
  190.     }
  191.     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);
  192.     for (spIndex = 0; spIndex < n.length; spIndex++) e[spIndex][5].checked = n[spIndex];
  193.     for (prIndex = 0; prIndex < r.length; prIndex++) t[prIndex][5].checked = r[prIndex];
  194.     clearIds = ["add_desc", "add_fp", "add_ip", "add_dp", "addr_desc", "addr_sp", "addr_ep", "addr_ip"];
  195.     for (clearIndex = 0; clearIndex < clearIds.length; clearIndex++) document.getElementById(clearIds[clearIndex]).value = "";
  196.     var y = uciOriginal.getAllSectionsOfType("firewall", "dmz");
  197.     document.getElementById("dmz_enabled").checked = y.length > 0;
  198.     if (y.length > 0) document.getElementById("dmz_ip").value = uciOriginal.get("firewall", y[0], "to_ip");
  199.     else {
  200.         var b = currentLanIp.split(/\.[^\.]*$/)[0],
  201.             w = parseInt(currentLanIp.split(".")[3]);
  202.         w >= 254 ? w-- : w++, b = b + "." + w, document.getElementById("dmz_ip").value = b
  203.     }
  204.     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");
  205.     if (upnpdEnabled) update_upnp(), timerid = setInterval("update_upnp()", 1e4);
  206.     else {
  207.         clearInterval(timerid), timerid = null;
  208.         var E = new Array,
  209.             S = ["***", "***********", "***** "];
  210.         E.push(S);
  211.         var x = [prtS.Prot, prtS.LHst, prtS.Port],
  212.             T = createTable(x, E, "upnp_table", !1, !1),
  213.             N = document.getElementById("upnp_table_container");
  214.         N.firstChild != null && N.removeChild(N.firstChild), N.appendChild(T)
  215.     }
  216. }
  217.  
  218. function setUpnpEnabled() {
  219.     enableAssociatedField(document.getElementById("upnp_enabled"), "upnp_up", document.getElementById("upnp_up").value), enableAssociatedField(document.getElementById("upnp_enabled"), "upnp_down", document.getElementById("upnp_down").value)
  220. }
  221.  
  222. function setDmzEnabled() {
  223.     enableAssociatedField(document.getElementById("dmz_enabled"), "dmz_ip", document.getElementById("dmz_ip").value)
  224. }
  225.  
  226. function createEditButton(e) {
  227.     var t = createInput("button");
  228.     return t.value = UI.Edit, t.className = "default_button", t.onclick = e ? function() {
  229.         editForward(!0, this)
  230.     } : function() {
  231.         editForward(!1, this)
  232.     }, t
  233. }
  234.  
  235. function editForward(e, t) {
  236.     if (typeof editForwardWindow != "undefined") try {
  237.         editForwardWindow.close()
  238.     } catch (n) {}
  239.     try {
  240.         xCoor = window.screenX + 225, yCoor = window.screenY + 225
  241.     } catch (n) {
  242.         xCoor = window.left + 225, yCoor = window.top + 225
  243.     }
  244.     var r = e ? "single_forward_edit.sh" : "multi_forward_edit.sh";
  245.     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() {
  246.         updateDone = !1;
  247.         if (editForwardWindow.document != null && editForwardWindow.document.getElementById("bottom_button_container") != null) {
  248.             editForwardWindow.document.getElementById("bottom_button_container").appendChild(saveButton), editForwardWindow.document.getElementById("bottom_button_container").appendChild(closeButton);
  249.             var t = e ? "" : "r";
  250.             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() {
  251.                 editForwardWindow.close()
  252.             }, saveButton.onclick = function() {
  253.                 var n;
  254.                 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())
  255.             }, editForwardWindow.moveTo(xCoor, yCoor), editForwardWindow.focus(), updateDone = !0
  256.         }
  257.         updateDone || setTimeout("runOnEditorLoaded()", 250)
  258.     }, runOnEditorLoaded()
  259. }
  260.  
  261. function update_upnp() {
  262.     if (!updateInProgress) {
  263.         updateInProgress = !0;
  264.         var e = "iptables -nL MINIUPNPD | grep ACCEPT",
  265.             t = getParameterDefinition("commands", e) + "&" + getParameterDefinition("hash", document.cookie.replace(/^.*hash=/, "").replace(/[\t ;]+.*$/, "")),
  266.             n = function(e) {
  267.                 if (e.readyState == 4) {
  268.                     var t = e.responseText.split("\n"),
  269.                         n = new Array,
  270.                         r, i = 0;
  271.                     if (t != null)
  272.                         for (r = 0; r < t.length; r++) {
  273.                             var s = t[r].split(/\s+/);
  274.                             if (typeof s[6] != "undefined") {
  275.                                 var o = [s[1], s[4], s[6].substr(4)];
  276.                                 n.push(o), i += 1
  277.                             }
  278.                         }
  279.                     if (i == 0) {
  280.                         var o = ["***", "***********", "***** "];
  281.                         n.push(o)
  282.                     }
  283.                     var u = [prtS.Prot, prtS.LHst, prtS.Port],
  284.                         a = createTable(u, n, "upnp_table", !1, !1),
  285.                         f = document.getElementById("upnp_table_container");
  286.                     f.firstChild != null && f.removeChild(f.firstChild), f.appendChild(a), updateInProgress = !1
  287.                 }
  288.             };
  289.         runAjax("POST", "utility/run_commands.sh", t, n)
  290.     }
  291. }
  292. var prtS = new Object,
  293.     updateInProgress = !1,
  294.     timerid = null;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement