X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FLibravatar.pm;h=81668a711e881427fe6bb1bada6951f633eb23a4;hb=c8f3903071c757e2273c9b91c659fcdc8bb035ff;hp=27a879fbce04272525dfaf2387d6e1a2a952fb99;hpb=088b6d61b5ce934302779d7aec5c4376b4e2a956;p=debbugs.git diff --git a/Debbugs/Libravatar.pm b/Debbugs/Libravatar.pm index 27a879f..81668a7 100644 --- a/Debbugs/Libravatar.pm +++ b/Debbugs/Libravatar.pm @@ -42,12 +42,14 @@ use Digest::MD5 qw(md5_hex); use LWP::UserAgent; use File::Temp qw(tempfile); +use Carp; + BEGIN{ ($VERSION) = q$Revision$ =~ /^Revision:\s+([^\s+])/; $DEBUG = 0 unless defined $DEBUG; @EXPORT = (); - %EXPORT_TAGS = (libravatar => [qw(cache_valid serve_cache retrieve_libravatar)] + %EXPORT_TAGS = (libravatar => [qw(cache_valid serve_cache retrieve_libravatar cache_location)] ); @EXPORT_OK = (); Exporter::export_ok_tags(keys %EXPORT_TAGS); @@ -64,9 +66,11 @@ sub cache_valid{ return 0; } -=item retreive_libravatar +=over + +=item retrieve_libravatar - $cache_location = retreive_libravatar(location => $cache_location, + $cache_location = retrieve_libravatar(location => $cache_location, email => lc($param{email}), ); @@ -76,7 +80,7 @@ there isn't a matching avatar, or there is an error, returns undef. =cut -sub retreive_libravatar{ +sub retrieve_libravatar{ my %type_mapping = (jpeg => 'jpg', png => 'png', @@ -171,6 +175,22 @@ sub retreive_libravatar{ return $cache_location.'.'.$dest_type; } +sub blocked_libravatar { + my ($email,$md5sum) = @_; + my $blocked = 0; + for my $blocker (@{$config{libravatar_blacklist}||[]}) { + for my $element ($email,$md5sum) { + next unless defined $element; + eval { + if ($element =~ /$blocker/) { + $blocked=1; + } + }; + } + } + return $blocked; +} + sub cache_location { my %param = @_; my $md5sum; @@ -181,6 +201,7 @@ sub cache_location { } else { croak("cache_location must be called with one of md5sum or email"); } + return undef if blocked_libravatar($param{email},$md5sum); for my $ext (qw(.png .jpg)) { if (-e $config{libravatar_cache_dir}.'/'.$md5sum.$ext) { return $config{libravatar_cache_dir}.'/'.$md5sum.$ext; @@ -223,7 +244,7 @@ sub handler { my $location = $r->location(); my ($email) = $uri =~ m/\Q$location\E\/?(.*)$/; if (not length $email) { - return Apache2::Const::NOT_FOUND; + return Apache2::Const::NOT_FOUND(); } my $q = CGI::Simple->new(); my %param = cgi_parameters(query => $q, @@ -264,9 +285,12 @@ sub serve_cache_mod_perl { } $r->filename($cache_location); $r->path_info(''); - $r->finfo(APR::Finfo::stat($cache_location, APR::Const::FINFO_NORM, $r->pool)); + $r->finfo(APR::Finfo::stat($cache_location, APR::Const::FINFO_NORM(), $r->pool)); } +=back + +=cut 1;