Edgewall Software

Changeset 17728

Timestamp:
Oct 25, 2023, 10:11:32 PM (9 months ago)
Author:
Dirk Stöcker
Message:

copy missing code from 1.2

Location:
plugins/trunk/spam-filter
Files:
1 added
14 edited

Legend:

Unmodified
Added
Removed
  • plugins/trunk/spam-filter/setup.py

    r17301 r17728  
    1616
    1717PACKAGE = 'TracSpamFilter'
    18 VERSION = '1.5.0'
     18VERSION = '1.5.'
    1919
    2020extra = {}
     
    8989        spamfilter.captcha.rand = tracspamfilter.captcha.rand
    9090        spamfilter.captcha.recaptcha2 = tracspamfilter.captcha.recaptcha2
     91
    9192        spamfilter.captcha.keycaptcha = tracspamfilter.captcha.keycaptcha
    9293    """,
  • plugins/trunk/spam-filter/tracspamfilter/__init__.py

    r17126 r17728  
    1818from tracspamfilter.model import *
    1919
    20 pkg_resources.require('Trac >= 1.5.1dev')
     20pkg_resources.require('Trac >= 1.5.1')
  • plugins/trunk/spam-filter/tracspamfilter/admin.py

    r17301 r17728  
    9393                page = 'entry'
    9494            else:
     95
    9596                data = self._render_monitoring_panel(req, cat, page)
    9697                data['allowselect'] = True
    9798                data['monitor'] = True
     99
    98100                add_script_data(req, {
    99101                    'bayestext': _("SpamBayes determined spam probability "
     
    104106                    'sel0text': _("Select 0.00%% entries") % (),
    105107                    'selspamtext': _("Select Spam entries"),
    106                     'selhamtext': _('Select Ham entries')
     108                    'selhamtext': _('Select Ham entries'),
     109                    'nolog_obvious': nolog_obvious
    107110                })
    108111                add_script(req, 'spamfilter/adminmonitor.js')
  • plugins/trunk/spam-filter/tracspamfilter/captcha/admin.py

    r16461 r17728  
    2626from tracspamfilter.captcha.keycaptcha import KeycaptchaCaptcha
    2727from tracspamfilter.captcha.recaptcha2 import Recaptcha2Captcha
     28
    2829
    2930try:
     
    4344        self.recaptcha_enabled = \
    4445            self.env.is_enabled(Recaptcha2Captcha)
     46
     47
    4548        self.keycaptcha_enabled =\
    4649            self.env.is_enabled(KeycaptchaCaptcha)
     
    5457    def get_admin_panels(self, req):
    5558        any_captchas_enabled = \
    56             any((self.recaptcha_enabled, self.keycaptcha_enabled,
     59            any((self.recaptcha_enabled, self.keycaptcha_enabled,
    5760                 self.expressioncaptcha_enabled, self.imagecaptcha_enabled))
    5861        if 'SPAM_CONFIG' in req.perm and any_captchas_enabled:
     
    9396                    if recaptcha_private_key and not verified_key:
    9497                        data['recaptcha_error'] = _("The keys are invalid")
     98
     99
     100
     101
     102
     103
     104
     105
     106
     107
     108
    95109                        data['error'] = 1
    96110
     
    167181                                        recaptcha_public_key)
    168182
     183
     184
     185
     186
     187
     188
    169189                    if self.keycaptcha_enabled:
    170190                        spam_config.set('captcha_keycaptcha_private_key',
     
    205225                spam_config.get('captcha_recaptcha_public_key')
    206226
     227
     228
     229
     230
     231
    207232            keycaptcha_private_key = \
    208233                spam_config.get('captcha_keycaptcha_private_key')
     
    234259            'recaptcha_private_key': recaptcha_private_key,
    235260            'recaptcha_public_key': recaptcha_public_key,
     261
     262
     263
    236264            'keycaptcha_enabled': self.keycaptcha_enabled,
    237265            'keycaptcha_private_key': keycaptcha_private_key,
  • plugins/trunk/spam-filter/tracspamfilter/htdocs/adminconfig.js

    r16629 r17728  
    1 jQuery(function ($) {
    2   var $logging_enabled = $("#logging_enabled");
    3   var $trust_authenticated = $("#trust_authenticated");
    4   var $purge_age = $("#purge_age");
    5   var $spam_monitor_entries = $("#spam_monitor_entries");
    6   var $authenticated_karma = $("#authenticated_karma");
    7   $purge_age.enable($logging_enabled.checked());
    8   $spam_monitor_entries.enable($logging_enabled.checked());
    9   $logging_enabled.click(function () {
    10     $purge_age.enable(this.checked);
    11     $spam_monitor_entries.enable(this.checked);
     1jQuery(function($) {
     2  $("#purge_age").enable($("#logging_enabled").checked());
     3  $("#spam_monitor_entries").enable($("#logging_enabled").checked());
     4  $("#logging_enabled").click(function() {
     5    $("#purge_age").enable(this.checked);
     6    $("#spam_monitor_entries").enable(this.checked);
    127  });
    13   $authenticated_karma.enable(!$trust_authenticated.checked());
    14   $trust_authenticated.click(function () {
    15     $authenticated_karma.enable(!this.checked);
     8  $.checked());
     9  $() {
     10    $.enable(!this.checked);
    1611  });
    1712});
  • plugins/trunk/spam-filter/tracspamfilter/htdocs/adminexternal.js

    r16629 r17728  
    11function my_enable(element, state) {
    22  var input = document.getElementById(element).getElementsByTagName("input");
    3   for (var i = 0; i < input.length; i++) {
     3  for(var i = 0; i < input.length; i++) {
    44    input[i].disabled = !state;
    55  }
    66}
    77
    8 jQuery(function ($) {
    9   var $use_external = $("#use_external");
    10   my_enable("external", $use_external.checked());
    11   $use_external.click(function () {
     8jQuery(function($) {
     9  my_enable("external", $("#use_external").checked());
     10  $("#use_external").click(function() {
    1211    my_enable("external", this.checked);
    1312  });
  • plugins/trunk/spam-filter/tracspamfilter/htdocs/adminmonitor.js

    r16629 r17728  
    1 function ToggleSelectPerfect(all, no, name) {
     1function ToggleSelectPerfect(all, no, name)
     2{
    23  var bayes = bayestext.replace("%%", "%");
    34  var box = document.getElementById(name);
     
    89
    910  var lines = table.getElementsByTagName('tr');
    10   for (var i = 0; i < lines.length; i += 2) {
     11  for(var i = 0; i < lines.length; i += 2)
     12  {
    1113    var checkbox = lines[i].getElementsByTagName('input')[0];
    1214    var sstate = lines[i].className.indexOf("rejected");
    13     var html = lines[i + 1].innerHTML;
    14     if (all && sstate > 0 && html.indexOf(bayes.replace("%s", "100.00")) > 0)
     15    var html = lines[i1].innerHTML;
     16    if(all && sstate > 0 && html.indexOf(bayes.replace("%s", "100.00")) > 0)
    1517      checkbox.checked = state;
    16     else if (all === 2 && sstate > 0 && respam.exec(html))
     18    else if== 2 && sstate > 0 && respam.exec(html))
    1719      checkbox.checked = state;
    18     else if (no === 2 && sstate < 0 && reham.exec(html))
     20    else if== 2 && sstate < 0 && reham.exec(html))
    1921      checkbox.checked = state;
    20     else if (no && sstate < 0 && html.indexOf(bayes.replace("%s", "0.00")) > 0)
     22    else if(no && sstate < 0 && html.indexOf(bayes.replace("%s", "0.00")) > 0)
    2123      checkbox.checked = state;
    2224  }
    2325}
    2426
    25 function ToggleSelectSpam(mode) {
     27function ToggleSelectSpam(mode)
     28{
    2629  var box = document.getElementById(mode ? "selhambutton" : "selspambutton");
    2730  var state = box.checked;
    2831  var table = document.getElementById("spamtable");
    2932  var lines = table.getElementsByTagName('tr');
    30   for (var i = 0; i < lines.length; i += 2) {
     33  for(var i = 0; i < lines.length; i += 2)
     34  {
    3135    var checkbox = lines[i].getElementsByTagName('input')[0];
    3236    var sstate = lines[i].className.indexOf("rejected");
    3337    var event = new Event('click', { 'bubbles': true });
    34     if (mode ? sstate < 0 : sstate >= 0) {
     38    if(mode ? sstate < 0 : sstate >= 0) {
    3539      checkbox.checked = state;
    3640      checkbox.dispatchEvent(event);
     
    3943}
    4044
    41 function setbuttons() {
    42   document.getElementById("boxes").innerHTML += "<table><tr>"
    43     + "<td valign=\"center\"><input class=\"spambox\" type=\"checkbox\" id=\"sel100button\" "
     45function setbuttons()
     46{
     47  var txt = "<table>"
     48  if(!nolog_obvious)
     49  {
     50    txt += "<tr>"
     51    +"<td valign=\"center\"><input class=\"spambox\" type=\"checkbox\" id=\"sel100button\""
    4452    + "onclick=\"ToggleSelectPerfect(1,0,'sel100button')\"/><\/td>"
    45     + "<td class=\"spambox\" valign=\"center\">"
    46     + "<label for=\"sel100button\">" + sel100text + "</label><\/td>"
    47     + "<td valign=\"center\"><input class=\"spambox\" type=\"checkbox\" id=\"sel90button\" "
     53    +"<td class=\"spambox\" valign=\"center\">"
     54    + "<label for=\"sel100button\">""</label><\/td>"
     55    +"
    4856    + "onclick=\"ToggleSelectPerfect(2,0,'sel90button')\"/><\/td>"
    49     + "<td class=\"spambox\" valign=\"center\">"
    50     + "<label for=\"sel90button\">" + sel90text + "</label><\/td>"
    51     + "<td valign=\"center\"><input class=\"hambox\" type=\"checkbox\" id=\"sel10button\" "
     57    +"<td class=\"spambox\" valign=\"center\">"
     58    + "<label for=\"sel90button\">""</label><\/td>"
     59    +"
    5260    + "onclick=\"ToggleSelectPerfect(0,2,'sel10button')\"/><\/td>"
    53     + "<td class=\"hambox\" valign=\"center\">"
    54     + "<label for=\"sel10button\">" + sel10text + "</label><\/td>"
    55     + "<td valign=\"center\"><input class=\"hambox\" type=\"checkbox\" id=\"sel0button\" "
     61    +"<td class=\"hambox\" valign=\"center\">"
     62    + "<label for=\"sel10button\">""</label><\/td>"
     63    +"
    5664    + "onclick=\"ToggleSelectPerfect(0,1,'sel0button')\"/><\/td>"
    57     + "<td class=\"hambox\" valign=\"center\">"
    58     + "<label for=\"sel0button\">" + sel0text + "</label><\/td>"
    59     + "<\/tr><tr>"
    60     + "<td valign=\"center\"><input class=\"spambox\" type=\"checkbox\" id=\"selspambutton\" "
    61     + "onclick=\"ToggleSelectSpam(0)\"/><\/td>"
    62     + "<td colspan=3 class=\"spambox\" valign=\"center\">"
    63     + "<label for=\"selspambutton\">" + selspamtext + "</label><\/td>"
    64     + "<td valign=\"center\"><input class=\"hambox\" type=\"checkbox\" id=\"selhambutton\" "
    65     + "onclick=\"ToggleSelectSpam(1)\"/><\/td>"
    66     + "<td colspan=3 class=\"hambox\" valign=\"center\">"
    67     + "<label for=\"selhambutton\">" + selhamtext + "</label><\/td>"
    68     + "<\/tr><\/table>";
     65    +"<td class=\"hambox\" valign=\"center\">"
     66    + "<label for=\"sel0button\">"+sel0text+"</label><\/td>"
     67    +"<\/tr>";
     68  }
     69  txt += "<tr>"
     70  +"<td valign=\"center\"><input class=\"spambox\" type=\"checkbox\" id=\"selspambutton\""
     71  + "onclick=\"ToggleSelectSpam(0)\"/><\/td>"
     72  +"<td colspan=3 class=\"spambox\" valign=\"center\">"
     73  + "<label for=\"selspambutton\">"+selspamtext+"</label><\/td>"
     74  +"<td valign=\"center\"><input class=\"hambox\" type=\"checkbox\" id=\"selhambutton\""
     75  + "onclick=\"ToggleSelectSpam(1)\"/><\/td>"
     76  +"<td colspan=3 class=\"hambox\" valign=\"center\">"
     77  + "<label for=\"selhambutton\">"+selhamtext+"</label><\/td>"
     78  +"<\/tr><\/table>";
     79 
     80  document.getElementById("boxes").innerHTML += txt;
    6981}
    7082
    71 jQuery(function ($) {
     83jQuery(function($) {
    7284  $("#spammonitor").addSelectAllCheckboxes();
    73   if (document.forms["spammonitorform"].elements["sel"]) {
     85  if(document.forms["spammonitorform"].elements["sel"])
     86  {
    7487    setbuttons();
    7588  }
  • plugins/trunk/spam-filter/tracspamfilter/htdocs/reportspam.js

    r15675 r17728  
    11jQuery(function ($) {
    2   $("#reportspam").click(function () {
     2  $("#reportspam").click(function ({
    33    var comment = prompt(spamreport_comment, "");
    44    if (comment === null) {
    5       this.href = document.URL;
     5      event.preventDefault();
     6      return;
    67    }
    7     else {
    8       this.href += "&comment=" + comment;
    9     }
     8    this.href += "&comment=" + encodeURIComponent(comment);
    109  });
    1110});
  • plugins/trunk/spam-filter/tracspamfilter/model.py

    r16455 r17728  
    396396                    UPDATE spamfilter_statistics
    397397                    SET delay=%s,delay_max=%s,delay_min=%s,count=%s
    398                     WHERE ACTION=%s AND data=%s AND status=%s AND strategy=%s
     398                    WHERE =%s AND data=%s AND status=%s AND strategy=%s
    399399                    """, (delay_val, delay_max, delay_min, count, action,
    400400                          data, status, strategy))
  • plugins/trunk/spam-filter/tracspamfilter/report.py

    r16490 r17728  
    6060            """, (savepage, headers, req.authname, isauth,
    6161                  req.args.get('comment'), int(time())))
     62
    6263        req.redirect(req.href(page))
    6364
  • plugins/trunk/spam-filter/tracspamfilter/templates/admin_captcha.html

    r15825 r17728  
    5757          <legend>reCAPTCHA</legend>
    5858          <p class="hint" i18n:msg="">
    59             The reCAPTCHA system provides a very good captcha system based on
    60             scanned books. See
     59            The reCAPTCHA system provides a very good captcha system. See
    6160            <a class="ext-link" href="http://www.google.com/recaptcha">Google
    6261            reCAPTCHA</a> page. You need to obtain
     
    8483          <div py:if="recaptcha_error" class="system-message">
    8584            <strong>Key validation failed:</strong> ${recaptcha_error}
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
     100
     101
     102
     103
     104
     105
     106
     107
     108
     109
     110
     111
     112
     113
     114
     115
    86116          </div>
    87117        </fieldset>
  • plugins/trunk/spam-filter/tracspamfilter/templates/admin_spammonitor.html

    r15628 r17728  
    4242      </div>
    4343
     44
     45
    4446      <xi:include href="monitortable.html" />
    4547
     
    4749        ${prevnext_nav()}
    4850      </div>
    49       <div id="boxes" py:if="entries"></div>
    5051
    5152      <div class="buttons" py:if="entries">
    52         <input type="submit" class="trac-disable-on-submit"
     53        <input type="submit" class="trac-disable-on-submit"
    5354               name="deleteobvious" value="${dgettext('tracspamfilter', 'Delete &gt; 90%')}" />
    5455        <input type="hidden" name="page" value="$page" />
  • plugins/trunk/spam-filter/tracspamfilter/templates/usertable.html

    r16685 r17728  
    3737              <py:choose test="data[1]">
    3838                <py:when test="0">
    39                   <td><a href="${href() + data[0]}">Source</a></td>
     39                  <td><a href="${data[0]}">Source</a></td>
    4040                </py:when>
    4141                <py:otherwise>
  • plugins/trunk/spam-filter/tracspamfilter/tests/api.py

    r16457 r17728  
    2525
    2626class DummyStrategy(Component):
    27 
    2827    implements(IFilterStrategy)
    2928
     
    3433        self.message = None
    3534        self.spam = None
    36         self.ip = None
    3735
    3836    def configure(self, karma, message="Dummy"):
     
    5856    def is_external(self):
    5957        return False
    60 
    6158
    6259class FilterSystemTestCase(unittest.TestCase):
     
    119116            FilterSystem(self.env).test(req, 'John Doe', [(None, 'Test')])
    120117            self.fail('Expected RejectContent exception')
    121         except RejectContent:
     118        except RejectContent:
    122119            pass
    123120
     
    127124        self.assertEqual('/foo', entry.path)
    128125        self.assertEqual('John Doe', entry.author)
    129         self.assertFalse(entry.authenticated)
     126        self.assertentry.authenticated)
    130127        self.assertEqual('127.0.0.1', entry.ipnr)
    131128        self.assertEqual('Test', entry.content)
    132         self.assertTrue(entry.rejected)
     129        self.assertentry.rejected)
    133130        self.assertEqual(-5, entry.karma)
    134         self.assertEqual([['DummyStrategy', '-5', 'Blacklisted']],
    135                          entry.reasons)
     131        self.assertEqual([['DummyStrategy', '-5', 'Blacklisted']], entry.reasons)
    136132
    137133    def test_log_accept(self):
     
    145141        self.assertEqual('/foo', entry.path)
    146142        self.assertEqual('John Doe', entry.author)
    147         self.assertFalse(entry.authenticated)
     143        self.assertentry.authenticated)
    148144        self.assertEqual('127.0.0.1', entry.ipnr)
    149145        self.assertEqual('Test', entry.content)
    150         self.assertFalse(entry.rejected)
     146        self.assertentry.rejected)
    151147        self.assertEqual(5, entry.karma)
    152148        self.assertEqual([['DummyStrategy', '5', 'Dummy']], entry.reasons)
     
    161157
    162158        strategy = DummyStrategy(self.env)
    163         self.assertTrue(strategy.train_called)
     159        self.assertstrategy.train_called)
    164160        self.assertEqual('john', strategy.author)
    165161        self.assertEqual('Test', strategy.content)
    166         self.assertTrue(strategy.spam)
     162        self.assertstrategy.spam)
    167163
    168164        log = list(LogEntry.select(self.env))
    169165        self.assertEqual(1, len(log))
    170166        entry = log[0]
    171         self.assertTrue(entry.rejected)
     167        self.assertentry.rejected)
    172168
    173169    def test_train_ham(self):
     
    179175
    180176        strategy = DummyStrategy(self.env)
    181         self.assertTrue(strategy.train_called)
     177        self.assertstrategy.train_called)
    182178        self.assertEqual('john', strategy.author)
    183179        self.assertEqual('Test', strategy.content)
    184         self.assertFalse(strategy.spam)
     180        self.assertstrategy.spam)
    185181
    186182        log = list(LogEntry.select(self.env))
    187183        self.assertEqual(1, len(log))
    188184        entry = log[0]
    189         self.assertFalse(entry.rejected)
     185        self.assertentry.rejected)
    190186
    191187
     
    195191    return suite
    196192
    197 
    198193if __name__ == '__main__':
    199194    unittest.main(defaultTest='test_suite')
Note: See TracChangeset for help on using the changeset viewer.