diff --git a/cname_records.php b/cname_records.php deleted file mode 100644 index 9e9288b1..00000000 --- a/cname_records.php +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - -
-
-
- -
-

- Add a new CNAME record -

-
- -
-
-
- - -
-
- - -
-
-
- -
-
-
- -
-
-
-
-

- List of local CNAME records -

-
- -
- - - - - - - - -
DomainTargetAction
- -
- -
- -
-
- - - - diff --git a/dns_records.php b/dns_records.php deleted file mode 100644 index 7a175f06..00000000 --- a/dns_records.php +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - -
-
-
- -
-

- Add a new domain/IP combination -

-
- -
-
-
- - -
-
- - -
-
-
- -
-
-
- -
-
-
-
-

- List of local DNS domains -

-
- -
- - - - - - - - -
DomainIPAction
- -
- -
- -
-
- - - - - diff --git a/groups.php b/groups.lp similarity index 83% rename from groups.php rename to groups.lp index 97ccd674..7ff09c85 100644 --- a/groups.php +++ b/groups.lp @@ -1,12 +1,11 @@ - @@ -34,8 +33,8 @@ mg.include('scripts/pi-hole/lua/header_authenticated.lp','r')
- - + +
@@ -67,7 +66,7 @@ mg.include('scripts/pi-hole/lua/header_authenticated.lp','r') Name Status - Description + Comment   diff --git a/scripts/pi-hole/js/groups.js b/scripts/pi-hole/js/groups.js index 30efc063..10a297bf 100644 --- a/scripts/pi-hole/js/groups.js +++ b/scripts/pi-hole/js/groups.js @@ -7,17 +7,28 @@ /* global utils:false */ -var table; -var token = $("#token").text(); +var table, id_names = {}; + +function handleAjaxError(xhr, textStatus) { + if (textStatus === "timeout") { + alert("The server took too long to send the data."); + } else { + alert("An unknown error occured while loading the data.\n" + xhr.responseText); + } + + table.clear(); + table.draw(); +} $(function () { $("#btnAdd").on("click", addGroup); table = $("#groupsTable").DataTable({ ajax: { - url: "scripts/pi-hole/php/groups.php", - data: { action: "get_groups", token: token }, - type: "POST", + url: "/api/groups", + error: handleAjaxError, + dataSrc: "groups", + type: "GET", }, order: [[0, "asc"]], columns: [ @@ -25,7 +36,7 @@ $(function () { { data: null, visible: true, orderable: false, width: "15px" }, { data: "name" }, { data: "enabled", searchable: false }, - { data: "description" }, + { data: "comment" }, { data: null, width: "22px", orderable: false }, ], columnDefs: [ @@ -49,6 +60,7 @@ $(function () { $('button[id^="deleteGroup_"]').on("click", deleteGroup); }, rowCallback: function (row, data) { + id_names[data.id] = data.name; $(row).attr("data-id", data.id); var tooltip = "Added: " + @@ -66,23 +78,23 @@ $(function () { var disabled = data.enabled === 0; $("td:eq(2)", row).html( - '" + '" ); - var statusEl = $("#status_" + data.id, row); - statusEl.bootstrapToggle({ + var enabledEl = $("#enabled_" + data.id, row); + enabledEl.bootstrapToggle({ on: "Enabled", off: "Disabled", size: "small", onstyle: "success", width: "80px", }); - statusEl.on("change", editGroup); + enabledEl.on("change", editGroup); - $("td:eq(3)", row).html(''); - var desc = data.description !== null ? data.description : ""; - var descEl = $("#desc_" + data.id, row); - descEl.val(utils.unescapeHtml(desc)); - descEl.on("change", editGroup); + $("td:eq(3)", row).html(''); + var comment = data.comment !== null ? data.comment : ""; + var commentEl = $("#comment_" + data.id, row); + commentEl.val(utils.unescapeHtml(comment)); + commentEl.on("change", editGroup); $("td:eq(4)", row).empty(); if (data.id !== 0) { @@ -212,52 +224,46 @@ function delItems(ids) { // Check input validity if (!Array.isArray(ids)) return; - var items = ""; - for (var id of ids) { // Exploit prevention: Return early for non-numeric IDs if (typeof id !== "number") return; - - // List deleted items - items += "
  • " + utils.escapeHtml($("#name_" + id).val()) + "
  • "; } + var name = id_names[ids[0]]; + + // Remove first element from array + ids.shift(); + utils.disableAll(); var idstring = ids.join(", "); - utils.showAlert("info", "", "Deleting group(s)...", ""); + utils.showAlert("info", "", "Deleting group...", name); $.ajax({ - url: "scripts/pi-hole/php/groups.php", - method: "post", - dataType: "json", - data: { action: "delete_group", id: JSON.stringify(ids), token: token }, + url: "/api/groups/" + name, + method: "delete", }) .done(function (response) { utils.enableAll(); - if (response.success) { - utils.showAlert( - "success", - "far fa-trash-alt", - "Successfully deleted group(s): ", - "" - ); - for (var id in ids) { - if (Object.hasOwnProperty.call(ids, id)) { - table.row(id).remove().draw(false).ajax.reload(null, false); - } - } - } else { - utils.showAlert( - "error", - "", - "Error while deleting group(s): " + idstring, - response.message - ); + utils.showAlert( + "success", + "far fa-trash-alt", + "Successfully deleted group: ", + name + ); + table.row(id).remove().draw(false); + if(ids.length > 0) { + // Recursively delete all remaining items + delItems(ids); + return; } + table.ajax.reload(null, false); // Clear selection after deletion table.rows().deselect(); utils.changeBulkDeleteStates(table); + + // Update number of groups in the sidebar + updateFtlInfo(); }) .fail(function (jqXHR, exception) { utils.enableAll(); @@ -273,7 +279,7 @@ function delItems(ids) { function addGroup() { var name = utils.escapeHtml($("#new_name").val()); - var desc = utils.escapeHtml($("#new_desc").val()); + var comment = utils.escapeHtml($("#new_comment").val()); utils.disableAll(); utils.showAlert("info", "", "Adding group...", name); @@ -286,22 +292,24 @@ function addGroup() { } $.ajax({ - url: "scripts/pi-hole/php/groups.php", + url: "/api/groups", method: "post", dataType: "json", - data: { action: "add_group", name: name, desc: desc, token: token }, + data: JSON.stringify({ + name: name, + comment: comment, + enabled: true, + }), success: function (response) { utils.enableAll(); - if (response.success) { - utils.showAlert("success", "fas fa-plus", "Successfully added group", name); - $("#new_name").val(""); - $("#new_desc").val(""); - table.ajax.reload(); - table.rows().deselect(); - $("#new_name").focus(); - } else { - utils.showAlert("error", "", "Error while adding new group", response.message); - } + utils.showAlert("success", "fas fa-plus", "Successfully added group", name); + $("#new_name").val(""); + $("#new_comment").val(""); + table.ajax.reload(); + table.rows().deselect(); + $("#new_name").focus(); + // Update number of groups in the sidebar + updateFtlInfo(); }, error: function (jqXHR, exception) { utils.enableAll(); @@ -315,69 +323,57 @@ function editGroup() { var elem = $(this).attr("id"); var tr = $(this).closest("tr"); var id = tr.attr("data-id"); + var old_name = id_names[data.id]; var name = utils.escapeHtml(tr.find("#name_" + id).val()); - var status = tr.find("#status_" + id).is(":checked") ? 1 : 0; - var desc = utils.escapeHtml(tr.find("#desc_" + id).val()); + var enabled = tr.find("#enabled_" + id).is(":checked"); + var comment = utils.escapeHtml(tr.find("#comment_" + id).val()); var done = "edited"; var notDone = "editing"; switch (elem) { - case "status_" + id: - if (status === 0) { + case "enabled_" + id: + if (enabled === false) { done = "disabled"; notDone = "disabling"; - } else if (status === 1) { + } else if (enabled === true) { done = "enabled"; notDone = "enabling"; } - break; case "name_" + id: done = "edited name of"; notDone = "editing name of"; break; - case "desc_" + id: - done = "edited description of"; - notDone = "editing description of"; + case "comment_" + id: + done = "edited comment of"; + notDone = "editing comment of"; break; default: - alert("bad element or invalid data-id!"); + alert("bad element ( " + elem + " ) or invalid data-id!"); return; } utils.disableAll(); - utils.showAlert("info", "", "Editing group...", name); + utils.showAlert("info", "", "Editing group...", old_name); $.ajax({ - url: "scripts/pi-hole/php/groups.php", - method: "post", + url: "/api/groups/" + old_name, + method: "put", dataType: "json", - data: { - action: "edit_group", - id: id, + data: JSON.stringify({ name: name, - desc: desc, - status: status, - token: token, - }, + comment: comment, + enabled: enabled, + }), success: function (response) { utils.enableAll(); - if (response.success) { - utils.showAlert("success", "fas fa-pencil-alt", "Successfully " + done + " group", name); - } else { - utils.showAlert( - "error", - "", - "Error while " + notDone + " group with ID " + id, - response.message - ); - } + utils.showAlert("success", "fas fa-pencil-alt", "Successfully " + done + " group", old_name); }, error: function (jqXHR, exception) { utils.enableAll(); utils.showAlert( "error", "", - "Error while " + notDone + " group with ID " + id, + "Error while " + notDone + " group with name " + old_name, jqXHR.responseText ); console.log(exception); // eslint-disable-line no-console diff --git a/scripts/pi-hole/lua/sidebar.lp b/scripts/pi-hole/lua/sidebar.lp index f4c7a900..8245b854 100644 --- a/scripts/pi-hole/lua/sidebar.lp +++ b/scripts/pi-hole/lua/sidebar.lp @@ -43,7 +43,7 @@