Changeset 45
- Timestamp:
- 04/08/05 18:16:30 (4 years ago)
- Files:
-
- 1 modified
-
quasi-spamfilter/trunk/quasi-spamfilter.pl (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
quasi-spamfilter/trunk/quasi-spamfilter.pl
r42 r45 1 1 # A plugin for filtering Comment and TBPing Spams 2 2 # 3 # Release 0. 18 (Mar 6, 2005)3 # Release 0.20 (Apr 8, 2005) 4 4 # 5 5 # This software is provided as-is. You may use it for commercial or … … 8 8 # Copyright (c) 2005 Hirotaka Ogawa 9 9 10 package MT::Plugin::Quasi_SpamFilter; 10 11 use strict; 11 use vars qw($COMMENT_PATTERN $TBPING_PATTERN $COMMENT_METHOD $TBPING_METHOD 12 use vars qw($COMMENT_PATTERN $COMMENT_METHOD 13 $TBPING_PATTERN $TBPING_METHOD 14 $ENABLE_LOGGING 12 15 $URL %comment_methods %tbping_methods); 13 16 … … 19 22 # 'CommentFilter', 'CommentThrottleFilter', 'CommentError', 20 23 # 'CommentLongError', 'CommentRedirect', 'CommentEvilRedirect' 21 $COMMENT_METHOD = 'Comment Filter';24 $COMMENT_METHOD = 'CommentError'; 22 25 23 26 # Choose a method for rejecting Spam Pings from: 24 27 # 'TBPingFilter', 'TBPingThrottleFilter', 'TBPingError' 25 $TBPING_METHOD = 'TBPing Filter';28 $TBPING_METHOD = 'TBPingError'; 26 29 27 30 # Set your Redirect URL (for 'CommentRedirect' and 'CommentEvilRedirect') 28 31 $URL = 'http://www.2ch.net/'; 32 33 # Enable logging? (1/0) 34 $ENABLE_LOGGING = 1; 29 35 30 36 eval("use Storable;"); … … 32 38 require MT::Plugin; 33 39 my $plugin = new MT::Plugin(); 34 $plugin->name("Quasi Spam Filter Plugin , v.0.18");40 $plugin->name("Quasi Spam Filter Plugin 0.20"); 35 41 $plugin->description("A Simple filter for Comment & TBPing Spams"); 36 42 $plugin->doc_link("http://as-is.net/hacks/2005/01/quasi_spam_filter_plugin.html"); … … 69 75 } 70 76 77 use MT::Comment; 78 use MT::TBPing; 79 71 80 sub is_comment_spam { 72 my $ text = shift;73 return ($ text =~ /$COMMENT_PATTERN/i);81 my $comment = shift; 82 return ($comment->text =~ /$COMMENT_PATTERN/i); 74 83 } 75 84 76 85 sub is_tbping_spam { 77 my $text = shift; 78 return ($text =~ /$TBPING_PATTERN/i); 86 my $tbping = shift; 87 return ($tbping->excerpt =~ /$TBPING_PATTERN/i); 88 } 89 90 sub _make_pseudo_comment { 91 my $app = shift; 92 my $q = $app->{query}; 93 my $comment = MT::Comment->new; 94 $comment->author($q->param('author') || ''); 95 $comment->email($q->param('email') || ''); 96 $comment->url($q->param('url') || ''); 97 $comment->text($q->param('text') || ''); 98 $comment->ip($app->remote_ip || ''); 99 return $comment; 100 } 101 102 sub _make_pseudo_tbping { 103 my $app = shift; 104 my $q = $app->{query}; 105 my $tbping = MT::TBPing->new; 106 $tbping->title($q->param('title') || ''); 107 $tbping->excerpt($q->param('excerpt') || ''); 108 $tbping->source_url($q->param('url') || ''); 109 $tbping->blog_name($q->param('blog_name') || ''); 110 $tbping->ip($app->remote_ip || ''); 111 return $tbping; 79 112 } 80 113 81 114 sub comment_filter { 82 115 my ($eh, $app, $comment) = @_; 83 return !is_comment_spam($comment->text); 116 if (is_comment_spam($comment)) { 117 $app->log("[QSF] drop a spam comment from " . $comment->author) if $ENABLE_LOGGING; 118 return 0; 119 } 120 return 1; 84 121 } 85 122 86 123 sub comment_throttle_filter { 87 124 my ($eh, $app, $entry) = @_; 88 my $comment = $app->{query}->param('text'); 89 return !is_comment_spam($comment); 125 my $comment = _make_pseudo_comment($app); 126 if (is_comment_spam($comment)) { 127 $app->log("[QSF] drop a spam comment from " . $comment->author) if $ENABLE_LOGGING; 128 return 0; 129 } 130 return 1; 90 131 } 91 132 … … 95 136 my $mode = $q->param('__mode') || $app->{default_mode}; 96 137 return if $mode ne 'post'; 97 if (is_comment_spam($q->param('text'))) { 98 $app->add_methods(post => sub { }); 99 $app->error("Spam Comment!"); 138 my $comment = _make_pseudo_comment($app); 139 if (is_comment_spam($comment)) { 140 $app->add_methods(post => sub { }); 141 $app->error("Spam Comment!"); 142 $app->log("[QSF] drop a spam comment from " . $comment->author) if $ENABLE_LOGGING; 100 143 } 101 144 } … … 106 149 my $mode = $q->param('__mode') || $app->{default_mode}; 107 150 return if $mode ne 'post'; 108 if (is_comment_spam($q->param('text'))) { 109 $app->add_methods(post => sub { $_[0]->handle_error("Spam Comments!") }); 151 my $comment = _make_pseudo_comment($app); 152 if (is_comment_spam($comment)) { 153 $app->add_methods(post => sub { $_[0]->handle_error("Spam Comments!") }); 154 $app->log("[QSF] drop a spam comment from " . $comment->author) if $ENABLE_LOGGING; 110 155 } 111 156 } … … 116 161 my $mode = $q->param('__mode') || $app->{default_mode}; 117 162 return if $mode ne 'post'; 118 if (is_comment_spam($q->param('text'))) { 119 $app->add_methods(post => sub { }); 120 $app->redirect($URL); 163 my $comment = _make_pseudo_comment($app); 164 if (is_comment_spam($comment)) { 165 $app->add_methods(post => sub { }); 166 $app->redirect($URL); 167 $app->log("[QSF] drop a spam comment from " . $comment->author) if $ENABLE_LOGGING; 121 168 } 122 169 } … … 127 174 my $mode = $q->param('__mode') || $app->{default_mode}; 128 175 return if $mode ne 'post'; 129 if (is_comment_spam($q->param('text'))) { 130 $app->add_methods(post => sub { }); 131 $app->redirect($q->param('url') || $URL); 176 my $comment = _make_pseudo_comment($app); 177 if (is_comment_spam($comment)) { 178 $app->add_methods(post => sub { }); 179 $app->redirect($q->param('url') || $URL); 180 $app->log("[QSF] drop a spam comment from " . $comment->author) if $ENABLE_LOGGING; 132 181 } 133 182 } 134 183 135 184 sub tbping_filter { 136 my ($eh, $app, $ping) = @_; 137 return !is_tbping_spam($ping->excerpt); 185 my ($eh, $app, $tbping) = @_; 186 if (is_tbping_spam($tbping)) { 187 $app->log("[QSF] drop a spam tbping from " . $tbping->blog_name) if $ENABLE_LOGGING; 188 return 0; 189 } 190 return 1; 138 191 } 139 192 140 193 sub tbping_throttle_filter { 141 194 my ($eh, $app, $tb) = @_; 142 my $q = $app->{query}; 143 return !is_tbping_spam($q->param('excerpt')); 195 my $tbping = _make_pseudo_tbping($app); 196 if (is_tbping_spam($tbping)) { 197 $app->log("[QSF] drop a spam tbping from " . $tbping->blog_name) if $ENABLE_LOGGING; 198 return 0; 199 } 200 return 1; 144 201 } 145 202 … … 149 206 my $mode = $q->param('__mode') || $app->{default_mode}; 150 207 return if $mode ne 'ping'; 151 if (is_tbping_spam($q->param('excerpt'))) { 208 my $tbping = _make_pseudo_tbping($app); 209 if (is_tbping_spam($tbping)) { 152 210 $app->add_methods('ping' => sub { }); 153 211 $app->_response(Error => 'Spam TBPing!', Code => 403); 212 $app->log("[QSF] drop a spam tbping from " . $tbping->blog_name) if $ENABLE_LOGGING; 154 213 } 155 214 }
![(please configure the [header_logo] section in trac.ini)](/public/chrome/common/trac_banner.png)