[dw-free] refactor sysban
[commit: http://hg.dwscoalition.org/dw-free/rev/0ec6e01c4fd9]
http://bugs.dwscoalition.org/show_bug.cgi?id=2261
Refactor ban/unban code to reduce duplication of logic.
Patch by
kareila.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=2261
Refactor ban/unban code to reduce duplication of logic.
Patch by
Files modified:
- bin/ljsysban.pl
- cgi-bin/ljlib.pl
- cgi-bin/sysban.pl
--------------------------------------------------------------------------------
diff -r cd67817249a4 -r 0ec6e01c4fd9 bin/ljsysban.pl
--- a/bin/ljsysban.pl Mon Jan 24 16:16:14 2011 +0800
+++ b/bin/ljsysban.pl Mon Jan 24 10:14:41 2011 -0600
@@ -32,7 +32,7 @@ exit 1 unless GetOptions('list' => \$lis
);
# did they give valid input?
-my $an_opt = ($what || $value || $status || $bandate || $banuntil || $note);
+my $an_opt = ($what || $value || $status || $bandate || $banuntil || $banlength || $note);
unless (($list && (($banid && ! $an_opt) || (! $banid && $an_opt)) ||
($add && $what && $value) ||
($modify && $banid && $an_opt))) {
@@ -56,6 +56,7 @@ unless (($list && (($banid && ! $an_op
# now load in the beast
require "$ENV{'LJHOME'}/cgi-bin/ljlib.pl";
+require 'sysban.pl';
my $dbh = LJ::get_db_writer();
# list bans
@@ -115,21 +116,7 @@ if ($add) {
die $dbh->errstr if $dbh->err;
my $insertid = $dbh->{'mysql_insertid'};
- if ($what eq 'ip') {
- LJ::procnotify_add("ban_ip", { 'ip' => $value,
- 'exptime' => LJ::mysqldate_to_time($banuntil) });
- LJ::MemCache::delete("sysban:ip");
- }
- if ($what eq 'uniq') {
- LJ::procnotify_add("ban_uniq", { 'uniq' => $value,
- 'exptime' => LJ::mysqldate_to_time($banuntil) });
- LJ::MemCache::delete("sysban:uniq");
- }
- if ( $what eq 'spamreport' ) {
- LJ::procnotify_add( 'ban_spamreport', { spamreport => $value,
- exptime => LJ::mysqldate_to_time( $banuntil ) } );
- LJ::MemCache::delete( 'sysban:spamreport' );
- }
+ LJ::sysban_do( $what, $value, LJ::mysqldate_to_time( $banuntil ) );
# log in statushistory
LJ::statushistory_add(0, 0, 'sysban_add',
@@ -157,22 +144,9 @@ if ($modify) {
$banuntil && $banuntil ne $ban->{'banuntil'} ||
($status && $status ne $ban->{'status'} && $status eq 'expired')) {
- if ($ban->{'what'} eq 'ip') {
- LJ::procnotify_add("unban_ip", { 'ip' => $value || $ban->{'value'}});
- LJ::MemCache::delete("sysban:ip");
- }
-
- if ($ban->{'what'} eq 'uniq') {
- LJ::procnotify_add("unban_uniq", { 'uniq' => $value || $ban->{'value'} });
- LJ::MemCache::delete("sysban:uniq");
- }
+ LJ::sysban_undo( $ban->{what}, $value || $ban->{value} );
+ }
- if ( $ban->{what} eq 'spamreport' ) {
- LJ::procnotify_add( 'unban_spamreport', { spamreport => $value || $ban->{value} } );
- LJ::MemCache::delete( 'sysban:spamreport' );
- }
- }
-
# what - must have a value
if ($what && $what ne $ban->{'what'}) {
$ban->{'what'} = $what;
@@ -184,25 +158,10 @@ if ($modify) {
$banuntil && $banuntil ne $ban->{'banuntil'} ||
($status && $status ne $ban->{'status'} && $status eq 'active')) {
- my $new_banuntil = $banuntil || $ban->{'banuntil'};
+ my $new_value = $value || $ban->{value};
+ my $new_banuntil = LJ::mysqldate_to_time( $banuntil || $ban->{banuntil} );
- if ($ban->{'what'} eq 'ip') {
- LJ::procnotify_add("ban_ip", { 'ip' => $value || $ban->{'value'},
- 'exptime' => LJ::mysqldate_to_time($new_banuntil) });
- LJ::MemCache::delete("sysban:ip");
- }
-
- if ($ban->{'what'} eq 'uniq') {
- LJ::procnotify_add("ban_uniq", { 'uniq' => $value || $ban->{'value'},
- 'exptime' => LJ::mysqldate_to_time($new_banuntil) });
- LJ::MemCache::delete("sysban:uniq");
- }
-
- if ( $ban->{what} eq 'spamreport' ) {
- LJ::procnotify_add( 'ban_spamreport', { spamreport => $value || $ban->{value},
- exptime => LJ::mysqldate_to_time( $new_banuntil ) } );
- LJ::MemCache::delete( 'sysban:spamreport' );
- }
+ LJ::sysban_do( $ban->{what}, $new_value, $new_banuntil );
}
# value - must have a value
diff -r cd67817249a4 -r 0ec6e01c4fd9 cgi-bin/ljlib.pl
--- a/cgi-bin/ljlib.pl Mon Jan 24 16:16:14 2011 +0800
+++ b/cgi-bin/ljlib.pl Mon Jan 24 10:14:41 2011 -0600
@@ -1752,47 +1752,22 @@ sub procnotify_callback
return;
}
- # ip bans
- if ($cmd eq "ban_ip") {
- $LJ::IP_BANNED{$arg->{'ip'}} = $arg->{'exptime'};
+ # ip/uniq/spamreport bans
+ my %ban_types = (
+ ip => \%LJ::IP_BANNED,
+ uniq => \%LJ::UNIQ_BANNED,
+ spamreport => \%LJ::SPAMREPORT_BANNED,
+ );
+
+ if ( $cmd =~ /^ban_(\w+)$/ && exists $ban_types{$1} ) {
+ my $banarg = $arg->{$1};
+ $ban_types{$1}->{$banarg} = $arg->{exptime};
return;
}
- if ($cmd eq "unban_ip") {
- delete $LJ::IP_BANNED{$arg->{'ip'}};
- return;
- }
-
- # uniq key bans
- if ($cmd eq "ban_uniq") {
- $LJ::UNIQ_BANNED{$arg->{'uniq'}} = $arg->{'exptime'};
- return;
- }
-
- if ($cmd eq "unban_uniq") {
- delete $LJ::UNIQ_BANNED{$arg->{'uniq'}};
- return;
- }
-
- # spamreport bans
- if ( $cmd eq "ban_spamreport" ) {
- $LJ::SPAMREPORT_BANNED{$arg->{spamreport}} = $arg->{exptime};
- return;
- }
-
- if ( $cmd eq "unban_spamreport" ) {
- $LJ::SPAMREPORT_BANNED{$arg->{spamreport}} = $arg->{exptime};
- return;
- }
-
- # spamreport bans
- if ( $cmd eq "ban_spamreport" ) {
- $LJ::SPAMREPORT_BANNED{$arg->{spamreport}} = $arg->{exptime};
- return;
- }
-
- if ( $cmd eq "unban_spamreport" ) {
- delete $LJ::SPAMREPORT_BANNED{$arg->{spamreport}};
+ if ( $cmd =~ /^unban_(\w+)$/ && exists $ban_types{$1} ) {
+ my $banarg = $arg->{$1};
+ delete $ban_types{$1}->{$banarg};
return;
}
diff -r cd67817249a4 -r 0ec6e01c4fd9 cgi-bin/sysban.pl
--- a/cgi-bin/sysban.pl Mon Jan 24 16:16:14 2011 +0800
+++ b/cgi-bin/sysban.pl Mon Jan 24 10:14:41 2011 -0600
@@ -445,20 +445,7 @@ sub sysban_create {
my $exptime = $opts{bandays} ? time() + 86400*$opts{bandays} : 0;
# special case: creating ip/uniq/spamreport ban
- if ($opts{'what'} eq 'ip') {
- LJ::procnotify_add("ban_ip", { 'ip' => $opts{'value'}, exptime => $exptime });
- LJ::MemCache::delete("sysban:ip");
- }
-
- if ($opts{'what'} eq 'uniq') {
- LJ::procnotify_add("ban_uniq", { 'uniq' => $opts{'value'}, exptime => $exptime});
- LJ::MemCache::delete("sysban:uniq");
- }
-
- if ( $opts{what} eq 'spamreport' ) {
- LJ::procnotify_add( 'ban_spamreport', { spamreport => $opts{value}, exptime => $exptime } );
- LJ::MemCache::delete( 'sysban:spamreport' );
- }
+ LJ::sysban_do( $opts{what}, $opts{value}, $exptime );
# log in statushistory
my $remote = LJ::get_remote();
@@ -632,6 +619,31 @@ sub sysban_modify {
}
+sub sysban_do {
+ my ( $what, $value, $until ) = @_;
+ my %types = ( ip => 1, uniq => 1, spamreport => 1 );
+ return unless $types{$what};
+
+ my $procopts = { $what => $value, exptime => $until };
+
+ LJ::procnotify_add( "ban_$what", $procopts );
+ LJ::MemCache::delete( "sysban:$what" );
+
+ return 1;
+}
+
+sub sysban_undo {
+ my ( $what, $value ) = @_;
+ my %types = ( ip => 1, uniq => 1, spamreport => 1 );
+ return unless $types{$what};
+
+ my $procopts = { $what => $value };
+
+ LJ::procnotify_add( "unban_$what", $procopts );
+ LJ::MemCache::delete( "sysban:$what" );
+
+ return 1;
+}
1;
--------------------------------------------------------------------------------
