You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

selectors.js 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. define(["jquery", "app/rspamd"],
  2. function ($, rspamd) {
  3. "use strict";
  4. const ui = {};
  5. function enable_disable_check_btn() {
  6. $("#selectorsChkMsgBtn").prop("disabled", (
  7. $.trim($("#selectorsMsgArea").val()).length === 0 ||
  8. !$("#selectorsSelArea").hasClass("is-valid")
  9. ));
  10. }
  11. function get_server() {
  12. const checked_server = rspamd.getSelector("selSrv");
  13. return (checked_server === "All SERVERS") ? "local" : checked_server;
  14. }
  15. function checkMsg(data) {
  16. const selector = $("#selectorsSelArea").val();
  17. rspamd.query("plugins/selectors/check_message?selector=" + encodeURIComponent(selector), {
  18. data: data,
  19. method: "POST",
  20. success: function (neighbours_status) {
  21. const json = neighbours_status[0].data;
  22. if (json.success) {
  23. rspamd.alertMessage("alert-success", "Message successfully processed");
  24. $("#selectorsResArea")
  25. .val(Object.prototype.hasOwnProperty.call(json, "data") ? json.data.toString() : "");
  26. } else {
  27. rspamd.alertMessage("alert-error", "Unexpected error processing message");
  28. }
  29. },
  30. server: get_server()
  31. });
  32. }
  33. function checkSelectors() {
  34. function toggle_form_group_class(remove, add) {
  35. $("#selectorsSelArea").removeClass("is-" + remove).addClass("is-" + add);
  36. enable_disable_check_btn();
  37. }
  38. const selector = $("#selectorsSelArea").val();
  39. if (selector.length && !rspamd.read_only) {
  40. rspamd.query("plugins/selectors/check_selector?selector=" + encodeURIComponent(selector), {
  41. method: "GET",
  42. success: function (json) {
  43. if (json[0].data.success) {
  44. toggle_form_group_class("invalid", "valid");
  45. } else {
  46. toggle_form_group_class("valid", "invalid");
  47. }
  48. },
  49. server: get_server()
  50. });
  51. } else {
  52. $("#selectorsSelArea").removeClass("is-valid is-invalid");
  53. enable_disable_check_btn();
  54. }
  55. }
  56. function buildLists() {
  57. function build_table_from_json(json, table_id) {
  58. Object.keys(json).forEach(function (key) {
  59. const td = $("<td/>");
  60. const tr = $("<tr/>")
  61. .append(td.clone().html("<code>" + key + "</code>"))
  62. .append(td.clone().html(json[key].description));
  63. $(table_id + " tbody").append(tr);
  64. });
  65. }
  66. function getList(list) {
  67. rspamd.query("plugins/selectors/list_" + list, {
  68. method: "GET",
  69. success: function (neighbours_status) {
  70. const json = neighbours_status[0].data;
  71. build_table_from_json(json, "#selectorsTable-" + list);
  72. },
  73. server: get_server()
  74. });
  75. }
  76. getList("extractors");
  77. getList("transforms");
  78. }
  79. ui.displayUI = function () {
  80. if (!rspamd.read_only &&
  81. !$("#selectorsTable-extractors>tbody>tr").length &&
  82. !$("#selectorsTable-transforms>tbody>tr").length) buildLists();
  83. if (!$("#selectorsSelArea").is(".is-valid, .is-invalid")) checkSelectors();
  84. };
  85. function toggleSidebar(side) {
  86. $("#sidebar-" + side).toggleClass("collapsed");
  87. let contentClass = "col-lg-6";
  88. const openSidebarsCount = $("#sidebar-left").hasClass("collapsed") +
  89. $("#sidebar-right").hasClass("collapsed");
  90. switch (openSidebarsCount) {
  91. case 1:
  92. contentClass = "col-lg-9";
  93. break;
  94. case 2:
  95. contentClass = "col-lg-12";
  96. break;
  97. default:
  98. }
  99. $("#content").removeClass("col-lg-12 col-lg-9 col-lg-6")
  100. .addClass(contentClass);
  101. }
  102. $("#sidebar-tab-left>a").click(function () {
  103. toggleSidebar("left");
  104. return false;
  105. });
  106. $("#sidebar-tab-right>a").click(function () {
  107. toggleSidebar("right");
  108. return false;
  109. });
  110. $("#selectorsMsgClean").on("click", function () {
  111. $("#selectorsChkMsgBtn").attr("disabled", true);
  112. $("#selectorsMsgArea").val("");
  113. return false;
  114. });
  115. $("#selectorsClean").on("click", function () {
  116. $("#selectorsSelArea").val("");
  117. checkSelectors();
  118. return false;
  119. });
  120. $("#selectorsChkMsgBtn").on("click", function () {
  121. $("#selectorsResArea").val("");
  122. checkMsg($("#selectorsMsgArea").val());
  123. return false;
  124. });
  125. $("#selectorsMsgArea").on("input", function () {
  126. enable_disable_check_btn();
  127. });
  128. $("#selectorsSelArea").on("input", function () {
  129. checkSelectors();
  130. });
  131. return ui;
  132. });