From 45b257132c8e9b1ae093c16890855da85f27fdaa Mon Sep 17 00:00:00 2001
From: garvinhicking <garvinhicking>
Date: Thu, 27 Oct 2005 11:02:22 +0000
Subject: [PATCH]     * Spamblock plugin can now check domains against the
 blogg.de      blacklist (http://spam.blogg.de/blacklist.txt). Deactivated by 
     default, the blacklist will be cached for 60 minutes before      being
 queried again. Thanks to the guys of blogg.de for notifying      us about
 their service! (garvinhicking) M   
 trunk/plugins/serendipity_event_spamblock/serendipity_event_spamblock.php M  
  trunk/plugins/serendipity_event_spamblock/lang_de.inc.php M   
 trunk/plugins/serendipity_event_spamblock/UTF-8/lang_de.inc.php M   
 trunk/docs/NEWS

---
 docs/NEWS                                     |  6 ++
 .../UTF-8/lang_de.inc.php                     |  2 +
 .../lang_de.inc.php                           |  2 +
 .../serendipity_event_spamblock.php           | 88 ++++++++++++++++++-
 4 files changed, 96 insertions(+), 2 deletions(-)

diff --git a/docs/NEWS b/docs/NEWS
index ac46a97..dbcf17c 100644
--- a/docs/NEWS
+++ b/docs/NEWS
@@ -3,6 +3,12 @@
 Version 0.9-beta4 ()
 ------------------------------------------------------------------------
 
+    * Spamblock plugin can now check domains against the blogg.de
+      blacklist (http://spam.blogg.de/blacklist.txt). Deactivated by
+      default, the blacklist will be cached for 60 minutes before
+      being queried again. Thanks to the guys of blogg.de for notifying
+      us about their service! (garvinhicking)
+
     * Fix categories plugin to properly work on pgsql installations.
       Thanks to CaptainCrunch!
 
diff --git a/plugins/serendipity_event_spamblock/UTF-8/lang_de.inc.php b/plugins/serendipity_event_spamblock/UTF-8/lang_de.inc.php
index e85c800..ab338a9 100644
--- a/plugins/serendipity_event_spamblock/UTF-8/lang_de.inc.php
+++ b/plugins/serendipity_event_spamblock/UTF-8/lang_de.inc.php
@@ -77,3 +77,5 @@
         @define('PLUGIN_EVENT_SPAMBLOCK_ADD_URL', 'Diese URL via Spamschutz blockieren');
         @define('PLUGIN_EVENT_SPAMBLOCK_REMOVE_AUTHOR', 'Blockade dieses Autoren via Spamschutz aufheben');
         @define('PLUGIN_EVENT_SPAMBLOCK_REMOVE_URL', 'Blockade dieser URL via Spamschutz aufheben');
+
+        @define('PLUGIN_EVENT_SPAMBLOCK_BLOGG_SPAMLIST', 'URL-Filterung anhand der blogg.de Blacklist aktivieren');
diff --git a/plugins/serendipity_event_spamblock/lang_de.inc.php b/plugins/serendipity_event_spamblock/lang_de.inc.php
index 78062e6..cea8e2c 100644
--- a/plugins/serendipity_event_spamblock/lang_de.inc.php
+++ b/plugins/serendipity_event_spamblock/lang_de.inc.php
@@ -77,3 +77,5 @@
         @define('PLUGIN_EVENT_SPAMBLOCK_ADD_URL', 'Diese URL via Spamschutz blockieren');
         @define('PLUGIN_EVENT_SPAMBLOCK_REMOVE_AUTHOR', 'Blockade dieses Autoren via Spamschutz aufheben');
         @define('PLUGIN_EVENT_SPAMBLOCK_REMOVE_URL', 'Blockade dieser URL via Spamschutz aufheben');
+
+        @define('PLUGIN_EVENT_SPAMBLOCK_BLOGG_SPAMLIST', 'URL-Filterung anhand der blogg.de Blacklist aktivieren');
diff --git a/plugins/serendipity_event_spamblock/serendipity_event_spamblock.php b/plugins/serendipity_event_spamblock/serendipity_event_spamblock.php
index 94d5f37..91c9f1b 100644
--- a/plugins/serendipity_event_spamblock/serendipity_event_spamblock.php
+++ b/plugins/serendipity_event_spamblock/serendipity_event_spamblock.php
@@ -92,6 +92,9 @@ if (!function_exists('serendipity_serverOffsetHour')) {
 @define('PLUGIN_EVENT_SPAMBLOCK_REMOVE_AUTHOR', 'Unblock this author via Spamblock plugin');
 @define('PLUGIN_EVENT_SPAMBLOCK_REMOVE_URL', 'Unblock this URL via Spamblock plugin');
 
+@define('PLUGIN_EVENT_SPAMBLOCK_BLOGG_SPAMLIST', 'Activate URL filtering by blogg.de Blacklist');
+@define('PLUGIN_EVENT_SPAMBLOCK_REASON_BLOGG_SPAMLIST', 'Filtered by blogg.de Blacklist');
+
 class serendipity_event_spamblock extends serendipity_event
 {
 var $filter_defaults;
@@ -111,7 +114,7 @@ var $filter_defaults;
             'smarty'      => '2.6.7',
             'php'         => '4.1.0'
         ));
-        $propbag->add('version',       '1.25');
+        $propbag->add('version',       '1.26');
         $propbag->add('event_hooks',    array(
             'frontend_saveComment' => true,
             'external_plugin'      => true,
@@ -120,7 +123,7 @@ var $filter_defaults;
             'backend_comments_top' => true,
             'backend_view_comment' => true
         ));
-        $propbag->add('configuration', array('killswitch', 'bodyclone', 'ipflood', 'captchas', 'captchas_ttl', 'captcha_color', 'forcemoderation', 'disable_api_comments', 'links_moderate', 'links_reject', 'contentfilter_activate', 'contentfilter_urls', 'contentfilter_authors', 'hide_email', 'checkmail', 'required_fields', 'logtype', 'logfile'));
+        $propbag->add('configuration', array('killswitch', 'bodyclone', 'ipflood', 'captchas', 'captchas_ttl', 'captcha_color', 'forcemoderation', 'disable_api_comments', 'links_moderate', 'links_reject', 'contentfilter_activate', 'contentfilter_urls', 'bloggdeblacklist', 'contentfilter_authors', 'hide_email', 'checkmail', 'required_fields', 'logtype', 'logfile'));
         $propbag->add('groups', array('ANTISPAM'));
 
         $this->filter_defaults = array(
@@ -202,6 +205,19 @@ var $filter_defaults;
 
                 break;
 
+            case 'bloggdeblacklist':
+                $propbag->add('type', 'radio');
+                $propbag->add('name', PLUGIN_EVENT_SPAMBLOCK_BLOGG_SPAMLIST);
+                $propbag->add('description', '');
+                $propbag->add('default', 'none');
+                $propbag->add('radio', array(
+                    'value' => array('moderate', 'reject', 'none'),
+                    'desc'  => array(PLUGIN_EVENT_SPAMBLOCK_API_MODERATE, PLUGIN_EVENT_SPAMBLOCK_API_REJECT, NONE)
+                ));
+                $propbag->add('radio_per_row', '1');
+
+                break;
+
             case 'contentfilter_urls':
                 $propbag->add('type', 'text');
                 $propbag->add('name', PLUGIN_EVENT_SPAMBLOCK_FILTER_URLS);
@@ -286,6 +302,45 @@ var $filter_defaults;
         return true;
     }
 
+    function getBlacklist($where) {
+        global $serendipity;
+        
+        switch($where) {
+            case 'blogg.de':
+                $target  = $serendipity['serendipityPath'] . PATH_SMARTY_COMPILE . '/blogg.de.blacklist.txt';
+                $timeout = 3600; // One hour
+  
+                if (file_exists($target) && filemtime($target) > time()-$timeout) {
+                    $data = file_get_contents($target);
+                } else {
+                    $data = '';
+                    require_once S9Y_PEAR_PATH . 'HTTP/Request.php';
+                    $req    = &new HTTP_Request('http://spam.blogg.de/blacklist.txt');
+    
+                    if (PEAR::isError($req->sendRequest()) || $req->getResponseCode() != '200') {
+                        if (file_exists($target) && filesize($target) > 0) {
+                            $data = file_get_contents($target);
+                        }
+                    } else {
+                        // Fetch file
+                        $data = $req->getResponseBody();
+                        $fp = @fopen($target, 'w');
+        
+                        if ($fp) {
+                            fwrite($fp, $data);
+                            fclose($fp);
+                        }
+                    }
+                }
+                
+                $blacklist = explode("\n", $data);
+                return $blacklist;
+            
+            default:
+                return false;
+        }
+    }
+
     function checkScheme($maxVersion) {
         global $serendipity;
 
@@ -459,6 +514,35 @@ var $filter_defaults;
                                     }
                                 }
                             }
+                            
+                            // Filter Blogg.de Blacklist?
+                            $bloggdeblacklist = $this->get_config('bloggdeblacklist');
+                            if ($bloggdeblacklist == 'moderate' || $bloggdeblacklist == 'reject') {
+                                $domains = $this->getBlacklist('blogg.de');
+                                if (is_array($domains)) {
+                                    foreach($domains AS $domain) {
+                                        $domain = trim($domain);
+                                        if (empty($domain)) {
+                                            continue;
+                                        }
+                                        
+                                        if (preg_match('@' . preg_quote($domain) . '@i', $addData['url'])) {
+                                            if ($bloggdeblacklist == 'moderate') {
+                                                $this->log($logfile, $eventData['id'], 'MODERATE', PLUGIN_EVENT_SPAMBLOCK_REASON_BLOGG_SPAMLIST . ': ' . $domain, $addData);
+                                                $eventData['moderate_comments'] = true;
+                                                $serendipity['csuccess']        = 'moderate';
+                                                $serendipity['moderate_reason'] = PLUGIN_EVENT_SPAMBLOCK_ERROR_BODY;
+                                                return false;
+                                            } else {
+                                                $this->log($logfile, $eventData['id'], 'REJECTED', PLUGIN_EVENT_SPAMBLOCK_REASON_BLOGG_SPAMLIST . ': ' . $domain, $addData);
+                                                $eventData = array('allow_comments' => false);
+                                                $serendipity['messagestack']['comments'][] = PLUGIN_EVENT_SPAMBLOCK_ERROR_BODY;
+                                                return false;
+                                            }
+                                        }
+                                    }
+                                }
+                            }
                         }
 
                         // Check for maximum number of links before rejecting
-- 
2.39.5