mirror of https://github.com/pragma-/pbot.git
Update ban-whitelist to support user-whitelist
This commit is contained in:
parent
54973eca0b
commit
745686eb75
|
@ -82,12 +82,32 @@ sub initialize {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ban_whitelisted {
|
sub ban_whitelisted {
|
||||||
my ($self, $channel, $mask) = @_;
|
my ($self, $channel, $banmask, $hostmask) = @_;
|
||||||
$channel = lc $channel;
|
$channel = lc $channel;
|
||||||
$mask = lc $mask;
|
$banmask = lc $banmask;
|
||||||
|
|
||||||
#$self->{pbot}->{logger}->log("whitelist check: $channel, $mask\n");
|
return 1 if exists $self->{ban_whitelist}->hash->{$channel}
|
||||||
return (exists $self->{ban_whitelist}->hash->{$channel}->{$mask} and defined $self->{ban_whitelist}->hash->{$channel}->{$mask}->{ban_whitelisted}) ? 1 : 0;
|
and exists $self->{ban_whitelist}->hash->{$channel}->{$banmask}
|
||||||
|
and defined $self->{ban_whitelist}->hash->{$channel}->{$banmask}->{ban_whitelisted};
|
||||||
|
return 0 if not defined $hostmask;
|
||||||
|
|
||||||
|
my $ret = eval {
|
||||||
|
foreach my $chan (keys %{ $self->{ban_whitelist}->hash }) {
|
||||||
|
next unless $channel =~ m/^$chan$/i;
|
||||||
|
foreach my $mask (keys %{ $self->{ban_whitelist}->hash->{$chan} }) {
|
||||||
|
next unless defined $self->{ban_whitelist}->hash->{$chan}->{$mask}->{user_whitelisted};
|
||||||
|
return 1 if $hostmask =~ m/^$mask$/i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($@) {
|
||||||
|
$self->{pbot}->{logger}->log("Error in whitelist: $@");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub whitelist {
|
sub whitelist {
|
||||||
|
@ -105,7 +125,10 @@ sub whitelist {
|
||||||
foreach my $channel (keys %{ $self->{ban_whitelist}->hash }) {
|
foreach my $channel (keys %{ $self->{ban_whitelist}->hash }) {
|
||||||
$text .= " $channel:\n";
|
$text .= " $channel:\n";
|
||||||
foreach my $mask (keys %{ $self->{ban_whitelist}->hash->{$channel} }) {
|
foreach my $mask (keys %{ $self->{ban_whitelist}->hash->{$channel} }) {
|
||||||
$text .= " $mask,\n";
|
my $mode = 'unknown';
|
||||||
|
$mode = 'u' if defined $self->{ban_whitelist}->hash->{$channel}->{$mask}->{user_whitelisted};
|
||||||
|
$mode = 'b' if defined $self->{ban_whitelist}->hash->{$channel}->{$mask}->{ban_whitelisted};
|
||||||
|
$text .= " $mask [$mode],\n";
|
||||||
$entries++;
|
$entries++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -113,10 +136,16 @@ sub whitelist {
|
||||||
return $text;
|
return $text;
|
||||||
}
|
}
|
||||||
when("add") {
|
when("add") {
|
||||||
my ($channel, $mask) = split / /, $args, 2;
|
my ($channel, $mask, $mode) = split / /, $args, 3;
|
||||||
return "Usage: whitelist add <channel> <mask>" if not defined $channel or not defined $mask;
|
return "Usage: whitelist add <channel> <mask> [mode]" if not defined $channel or not defined $mask;
|
||||||
|
|
||||||
$self->{ban_whitelist}->hash->{$channel}->{$mask}->{ban_whitelisted} = 1;
|
$mode = 'user' if not defined $mode;
|
||||||
|
|
||||||
|
if ($mode eq 'user') {
|
||||||
|
$self->{ban_whitelist}->hash->{$channel}->{$mask}->{user_whitelisted} = 1;
|
||||||
|
} else {
|
||||||
|
$self->{ban_whitelist}->hash->{$channel}->{$mask}->{ban_whitelisted} = 1;
|
||||||
|
}
|
||||||
$self->{ban_whitelist}->hash->{$channel}->{$mask}->{owner} = "$nick!$user\@$host";
|
$self->{ban_whitelist}->hash->{$channel}->{$mask}->{owner} = "$nick!$user\@$host";
|
||||||
$self->{ban_whitelist}->hash->{$channel}->{$mask}->{created_on} = gettimeofday;
|
$self->{ban_whitelist}->hash->{$channel}->{$mask}->{created_on} = gettimeofday;
|
||||||
|
|
||||||
|
@ -503,7 +532,7 @@ sub unbanme {
|
||||||
|
|
||||||
if(defined $baninfos) {
|
if(defined $baninfos) {
|
||||||
foreach my $baninfo (@$baninfos) {
|
foreach my $baninfo (@$baninfos) {
|
||||||
if($self->ban_whitelisted($baninfo->{channel}, $baninfo->{banmask})) {
|
if($self->ban_whitelisted($baninfo->{channel}, $baninfo->{banmask}, "$nick!$user\@$host")) {
|
||||||
$self->{pbot}->{logger}->log("anti-flood: [unbanme] $anick!$auser\@$ahost banned as $baninfo->{banmask} in $baninfo->{channel}, but allowed through whitelist\n");
|
$self->{pbot}->{logger}->log("anti-flood: [unbanme] $anick!$auser\@$ahost banned as $baninfo->{banmask} in $baninfo->{channel}, but allowed through whitelist\n");
|
||||||
} else {
|
} else {
|
||||||
if($channel eq lc $baninfo->{channel}) {
|
if($channel eq lc $baninfo->{channel}) {
|
||||||
|
@ -669,7 +698,7 @@ sub check_bans {
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($self->ban_whitelisted($baninfo->{channel}, $baninfo->{banmask})) {
|
if($self->ban_whitelisted($baninfo->{channel}, $baninfo->{banmask}, $mask)) {
|
||||||
$self->{pbot}->{logger}->log("anti-flood: [check-bans] $mask [$alias] evaded $baninfo->{banmask} in $baninfo->{channel}, but allowed through whitelist\n");
|
$self->{pbot}->{logger}->log("anti-flood: [check-bans] $mask [$alias] evaded $baninfo->{banmask} in $baninfo->{channel}, but allowed through whitelist\n");
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
@ -722,6 +751,11 @@ sub check_bans {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (exists $self->{nickflood}->{$message_account}) {
|
||||||
|
$self->{pbot}->{logger}->log("anti-flood: [check-bans] $mask evading nick-flood ban, disregarding\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ($baninfo->{type} eq 'blacklist') {
|
if ($baninfo->{type} eq 'blacklist') {
|
||||||
$self->{pbot}->{chanops}->add_op_command($baninfo->{channel}, "kick $baninfo->{channel} $bannick I don't think so");
|
$self->{pbot}->{chanops}->add_op_command($baninfo->{channel}, "kick $baninfo->{channel} $bannick I don't think so");
|
||||||
} else {
|
} else {
|
||||||
|
@ -729,7 +763,7 @@ sub check_bans {
|
||||||
$owner =~ s/!.*$//;
|
$owner =~ s/!.*$//;
|
||||||
$self->{pbot}->{chanops}->add_op_command($baninfo->{channel}, "kick $baninfo->{channel} $bannick Evaded $baninfo->{banmask} set by $owner");
|
$self->{pbot}->{chanops}->add_op_command($baninfo->{channel}, "kick $baninfo->{channel} $bannick Evaded $baninfo->{banmask} set by $owner");
|
||||||
}
|
}
|
||||||
$self->{pbot}->{chanops}->ban_user_timed($banmask, $baninfo->{channel}, 60 * 60 * 24 * 3);
|
$self->{pbot}->{chanops}->ban_user_timed($banmask, $baninfo->{channel}, 60 * 60 * 24 * 31);
|
||||||
}
|
}
|
||||||
my $channel_data = $self->{pbot}->{messagehistory}->{database}->get_channel_data($message_account, $channel, 'validated');
|
my $channel_data = $self->{pbot}->{messagehistory}->{database}->get_channel_data($message_account, $channel, 'validated');
|
||||||
if($channel_data->{validated} & $self->{NICKSERV_VALIDATED}) {
|
if($channel_data->{validated} & $self->{NICKSERV_VALIDATED}) {
|
||||||
|
@ -840,7 +874,7 @@ sub adjust_offenses {
|
||||||
$update = 1;
|
$update = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($channel_data->{unbanmes} > 0) {
|
if (defined $channel_data->{unbanmes} and $channel_data->{unbanmes} > 0) {
|
||||||
$channel_data->{unbanmes}--;
|
$channel_data->{unbanmes}--;
|
||||||
$update = 1;
|
$update = 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue