X-Git-Url: https://git.sesse.net/?p=pr0n;a=blobdiff_plain;f=perl%2FSesse%2Fpr0n%2FCommon.pm;h=1cd65046d9769787de6aa3ca44205fb19137fb79;hp=6317ca4c09f66010a222518cd0a61751426cbe65;hb=29d3bea6754640ffe4ed735caafa7f497623142d;hpb=d5656c57d0f9cf32eb61652e49c5b6811e432158 diff --git a/perl/Sesse/pr0n/Common.pm b/perl/Sesse/pr0n/Common.pm index 6317ca4..1cd6504 100644 --- a/perl/Sesse/pr0n/Common.pm +++ b/perl/Sesse/pr0n/Common.pm @@ -19,7 +19,7 @@ use DBD::Pg; use Image::Magick; use POSIX; use Digest::MD5; -use Digest::SHA1; +use Digest::SHA; use Digest::HMAC_SHA1; use MIME::Base64; use MIME::Types; @@ -39,7 +39,7 @@ BEGIN { require Sesse::pr0n::Config_local; }; - $VERSION = "v2.72"; + $VERSION = "v2.80"; @ISA = qw(Exporter); @EXPORT = qw(&error &dberror); %EXPORT_TAGS = qw(); @@ -96,7 +96,7 @@ sub header { $quote = LWP::Simple::get("http://itk.samfundet.no/include/quotes.cli.php"); $quote = "Error: Could not fetch quotes." if (!defined($quote)); } - Sesse::pr0n::Templates::print_template($r, "header", { title => $title, quotes => Encode::decode_utf8($quote) }); + Sesse::pr0n::Templates::print_template($r, "header", { title => $title, quotes => $quote }); } sub footer { @@ -211,7 +211,7 @@ sub get_base { my $r = shift; return $r->dir_config('ImageBase'); } - + sub get_disk_location { my ($r, $id) = @_; my $dir = POSIX::floor($id / 256); @@ -231,6 +231,23 @@ sub get_cache_location { } } +sub ensure_disk_location_exists { + my ($r, $id) = @_; + my $dir = POSIX::floor($id / 256); + + my $img_dir = get_base($r) . "/images/$dir/"; + if (! -d $img_dir) { + $r->log->info("Need to create new image directory $img_dir"); + mkdir($img_dir) or die "Couldn't create new image directory $img_dir"; + } + + my $cache_dir = get_base($r) . "/cache/$dir/"; + if (! -d $cache_dir) { + $r->log->info("Need to create new cache directory $cache_dir"); + mkdir($cache_dir) or die "Couldn't create new image directory $cache_dir"; + } +} + sub get_mipmap_location { my ($r, $id, $width, $height) = @_; my $dir = POSIX::floor($id / 256); @@ -291,6 +308,10 @@ sub update_image_info { # Tags my @tags = $exiftool->GetValue('Keywords', 'ValueConv'); + if (scalar @tags == 0) { + # This is XMP-dc:Subject, an RDF bag of tags. + @tags = $exiftool->GetValue('Subject', 'ValueConv'); + } $dbh->do('DELETE FROM tags WHERE image=?', undef, $id) or die "Couldn't delete old tag information in SQL: $!"; @@ -346,11 +367,11 @@ sub output_401 { # proxies etc. are being used), and we use HMAC instead of simple # hashing simply because that's a better signing method. # - # NOTE: For some weird reason, Digest::HMAC_SHA1 doesn't like taking + # NOTE: For some weird reason, Digest::HMAC_SHA doesn't like taking # the output from time directly (it gives a different response), so we # forcefully stringify the argument. my $ts = time; - my $nonce = Digest::HMAC_SHA1->hmac_sha1_hex($ts . "", $Sesse::pr0n::Config::db_password); + my $nonce = Digest::HMAC_SHA->hmac_sha1_hex($ts . "", $Sesse::pr0n::Config::db_password); my $stale_nonce_text = ""; $stale_nonce_text = ", stale=\"true\"" if ($options{'StaleNonce'} // 0); @@ -372,7 +393,7 @@ sub check_basic_auth { my $ref = $dbh->selectrow_hashref('SELECT sha1password,digest_ha1_hex FROM users WHERE username=? AND vhost=?', undef, $user, $r->get_server_name); - if (!defined($ref) || $ref->{'sha1password'} ne Digest::SHA1::sha1_base64($pass)) { + if (!defined($ref) || $ref->{'sha1password'} ne Digest::SHA::sha1_base64($pass)) { $r->content_type('text/plain; charset=utf-8'); $r->log->warn("Authentication failed for $user/$takenby"); output_401($r); @@ -1100,8 +1121,6 @@ sub purge_cache { } $regex .= "(\\?.*)?\$"; $r->headers_out->{'X-Pr0n-Purge'} = $regex; - - $r->log->info($r->headers_out->{'X-Pr0n-Purge'}); } # Find a list of all cache URLs for a given image, given what we have on disk.