]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[WebUI] Add Bayes classifier selector to Learn card 5520/head
authorAlexander Moisseev <moiseev@mezonplus.ru>
Wed, 18 Jun 2025 13:56:55 +0000 (16:56 +0300)
committerAlexander Moisseev <moiseev@mezonplus.ru>
Wed, 18 Jun 2025 13:56:55 +0000 (16:56 +0300)
This enables users to choose a specific Bayes classifier for training from WebUI.

interface/index.html
interface/js/app/rspamd.js
interface/js/app/upload.js
src/controller.c

index b176d6527303fa37ae7dae7ace52eee7710e1e49..61487ce2951eda4102a1dd852f5d62b3f8b0b5c9 100644 (file)
                                                                <div class="card bg-light shadow card-body card p-2">
                                                                        <p>Learn Bayesian classifier:</p>
                                                                        <form>
-                                                                               <div class="btn-group">
-                                                                                       <button class="btn btn-success d-flex align-items-center" type="button" data-upload="learnham" disabled><i class="fas fa-thumbs-up me-2"></i>Upload HAM</button>
-                                                                                       <button class="btn btn-danger d-flex align-items-center" type="button" data-upload="learnspam" disabled><i class="fas fa-thumbs-down me-2"></i>Upload SPAM</button>
+                                                                               <div class="d-flex flex-wrap flex-lg-column align-items-start align-items-lg-stretch gap-2">
+                                                                                       <select id="classifier" class="form-select w-auto"></select>
+                                                                                       <div class="btn-group">
+                                                                                               <button class="btn btn-success d-flex align-items-center" type="button" data-upload="learnham" disabled><i class="fas fa-thumbs-up me-2"></i>Upload HAM</button>
+                                                                                               <button class="btn btn-danger d-flex align-items-center" type="button" data-upload="learnspam" disabled><i class="fas fa-thumbs-down me-2"></i>Upload SPAM</button>
+                                                                                       </div>
                                                                                </div>
                                                                        </form>
                                                                </div>
index 6d047d6f6648d3816888f72c861c02be2acf9ab5..da4e9bccfeaf4221bc61093ad25409b765949ad6 100644 (file)
@@ -236,6 +236,8 @@ define(["jquery", "app/common", "stickytabs", "visibility",
             complete: function () {
                 ajaxSetup(localStorage.getItem("ajax_timeout"));
 
+                if (require.defined("app/upload")) require(["app/upload"], (module) => module.getClassifiers());
+
                 if (common.read_only) {
                     $(".ro-disable").attr("disabled", true);
                     $(".ro-hide").hide();
index a5d30b59efc42ba9a597d0f7288798c13c34185f..0960ebf25bb509094b1c2a2746c0ef88380ada66 100644 (file)
@@ -217,7 +217,10 @@ define(["jquery", "app/common", "app/libft"],
                     getFuzzyHashes(data);
                 } else {
                     let headers = {};
-                    if (source === "fuzzyadd") {
+                    if (source === "learnham" || source === "learnspam") {
+                        const classifier = $("#classifier").val();
+                        if (classifier) headers = {classifier: classifier};
+                    } else if (source === "fuzzyadd") {
                         headers = {
                             flag: $("#fuzzyFlagText").val(),
                             weight: $("#fuzzyWeightText").val()
@@ -296,5 +299,18 @@ define(["jquery", "app/common", "app/libft"],
 
         common.fileUtils.setupFileHandling("#scanMsgSource", "#formFile", fileSet, enable_disable_scan_btn, multiple_files_cb);
 
+        ui.getClassifiers = function () {
+            if (!common.read_only) {
+                const sel = $("#classifier").empty().append($("<option>", {value: "", text: "All classifiers"}));
+                common.query("/bayes/classifiers", {
+                    success: function (data) {
+                        data[0].data.forEach((c) => sel.append($("<option>", {value: c, text: c})));
+                    },
+                    server: common.getServer()
+                });
+            }
+        };
+        ui.getClassifiers();
+
         return ui;
     });
index 9ba95fcabac0e8beeb7ac1a406cf03bb7f3f9596..0550ba6b866f201fef82a1468b81ca14e7d082b1 100644 (file)
@@ -3292,7 +3292,7 @@ rspamd_controller_handle_unknown(struct rspamd_http_connection_entry *conn_ent,
                rspamd_http_message_add_header(rep, "Access-Control-Allow-Methods",
                                                                           "POST, GET, OPTIONS");
                rspamd_http_message_add_header(rep, "Access-Control-Allow-Headers",
-                                                                          "Content-Type,Password,Map,Weight,Flag,Hash");
+                                                                          "Classifier,Content-Type,Password,Map,Weight,Flag,Hash");
                rspamd_http_connection_reset(conn_ent->conn);
                rspamd_http_router_insert_headers(conn_ent->rt, rep);
                rspamd_http_connection_write_message(conn_ent->conn,