##
## Homepage: http://www.kwiki.org/?KwikiSpamWhitelist
## Source: http://www.kwiki.org/?CodeKwikiSpamWhitelist
##
package Kwiki::SpamWhitelist;
use Kwiki::Plugin -Base;
use Kwiki::Formatter;
our $VERSION = '0.0';
const class_id => 'spam_whitelist';
sub register {
my $registry = shift;
$registry->add(preload => $self->class_id);
}
package Kwiki::SpamWhitelist::Mixin;
use mixin 'Spoon::IndexList';
use IO::All;
sub spam_link {
my ($url, $title) = @_;
return unless $url =~ s/^https?:\/\/([^\/]+)/spam:\/\/$1/i;
my $domain = $1;
my $whitelist =
$self->hub->spam_whitelist->plugin_directory . '/whitelist';
my $index = $self->index_list($whitelist);
my $ok = eval { $index->{$domain} };
return 'spam' if $@;
return if $ok;
my $spam_link = qq{<$url>};
$spam_link = qq{$title$spam_link}
unless $title =~ /^http/i;
return $spam_link;
}
package Kwiki::Formatter::TitledHyperLink;
use mixin 'Kwiki::SpamWhitelist::Mixin';
no warnings;
sub html {
my $text = $self->escape_html($self->matched);
my ($title1, $target, $title2) = ($text =~ $self->pattern_start);
$title1 = '' unless defined $title1;
$title2 = '' unless defined $title2;
$target =~ s{^\w+:(?!//)}{};
my $title = $title1 . ' ' . $title2;
$title =~ s/^\s*(.*?)\s*$/$1/;
$title = $target
unless $title =~ /\S/;
return $self->spam_link($target, $title) ||
qq($title);
}
package Kwiki::Formatter::HyperLink;
use mixin 'Kwiki::SpamWhitelist::Mixin';
sub html {
my $text = $self->escape_html($self->matched);
return $text if $text =~ s/^!//;
return qq(
)
if $text =~ /(?:jpe?g|gif|png)$/i;
my $target = $text;
return $self->spam_link($target, $text) ||
qq($text);
}