]> git.sesse.net Git - pr0n/blobdiff - perl/Sesse/pr0n/pr0n.pm
Many more fixes from the infobox cleanup fallout.
[pr0n] / perl / Sesse / pr0n / pr0n.pm
index 28df8719a04ecebabfbe8283ae7e89de6622e7e9..f5715f53b7077b9f7d5b30831f7915ff75aecb79 100644 (file)
@@ -6,6 +6,7 @@ use Sesse::pr0n::Rotate;
 use Sesse::pr0n::Select;
 use Sesse::pr0n::WebDAV;
 use Sesse::pr0n::NewEvent;
+use IO::File::WithPath;
 
 package Sesse::pr0n::pr0n;
 use strict;    
@@ -14,50 +15,72 @@ use warnings;
 sub handler {
        my $r = shift;
 
-       my $uri = $r->uri;
+       my $uri = $r->path_info;
        if ($uri eq '/') {
                return Sesse::pr0n::Listing::handler($r);
        } elsif ($uri eq '/robots.txt' ||
                 $uri eq '/pr0n.css' ||
                 $uri eq '/skoyen.css' ||
-                $uri eq '/blah.png' ||
                 $uri eq '/faq.html' ||
                 $uri eq '/pr0n-fullscreen.css' ||
+                $uri eq '/pr0n-fullscreen-ie.css' ||
                 $uri eq '/pr0n-fullscreen.js' ||
                 $uri eq '/previous.png' ||
                 $uri eq '/next.png' ||
                 $uri eq '/close.png' ||
+                $uri eq '/options.png' ||
                 $uri =~ m#^/usage/([a-zA-Z0-9_.]+)$#) {
                $uri =~ s#^/##;
-               $r->content_type(Sesse::pr0n::Common::get_mimetype_from_filename($uri));
-               $r->sendfile(Sesse::pr0n::Common::get_base($r) . 'files/' . $uri);
-               return Apache2::Const::OK;
+               my $fname = $Sesse::pr0n::Config::image_base . 'files/' . $uri;
+               my (undef, undef, undef, undef, undef, undef, undef, $size, undef, $mtime) = stat($fname)
+                       or error($r, "stat of $fname: $!");
+
+               my $res = Plack::Response->new(200);
+               $res->content_type(Sesse::pr0n::Common::get_mimetype_from_filename($uri));
+               $res->content_length($size);    
+               Sesse::pr0n::Common::set_last_modified($res, $mtime);
+
+               #if((my $rc = $r->meets_conditions) != Apache2::Const::OK) {
+               #       return $rc;
+               #}
+
+               $res->content(IO::File::WithPath->new($Sesse::pr0n::Config::image_base . 'files/' . $uri));
+               return $res;
        } elsif ($uri eq '/newevent.html') {
-               $r->content_type('text/html; charset=utf-8');
-               $r->sendfile(Sesse::pr0n::Common::get_base($r) . "files/newevent.html");
-               return Apache2::Const::OK;
+               my $res = Plack::Response->new(200);
+               $res->content_type('text/html; charset=utf-8');
+               $res->content(IO::File::WithPath->new($Sesse::pr0n::Config::image_base . 'files/newevent.html'));
+               return $res;
        } elsif ($uri =~ m#^/webdav#) {
                return Sesse::pr0n::WebDAV::handler($r);
        } elsif ($uri =~ m#^/usage/([a-zA-Z0-9.-]+)$#) {
-               $r->sendfile(Sesse::pr0n::Common::get_base($r) . "usage/$1");
-               return Apache2::Const::OK;
+               my $res = Plack::Response->new(200);
+               $res->content(IO::File::WithPath->new($Sesse::pr0n::Config::image_base . "usage/$1"));
+               return $res;
        } elsif ($uri =~ m#^/rotate$#) {
                return Sesse::pr0n::Rotate::handler($r);
        } elsif ($uri =~ m#^/select$#) {
                return Sesse::pr0n::Select::handler($r);
        } elsif ($uri =~ m#^/newevent$#) {
                return Sesse::pr0n::NewEvent::handler($r);
-       } elsif ($uri =~ m#^/[a-zA-Z0-9-]+/?$#) {
+       } elsif ($uri =~ /^\/[a-zA-Z0-9-]+\/?$/ ||
+                $uri =~ /^\/\+all\/?$/) {
                return Sesse::pr0n::Index::handler($r);
-       } elsif ($uri =~ m#^/[a-zA-Z0-9-]+/(\d+x\d+/|original/)?(nobox/)?[a-zA-Z0-9._-]+$#) {
+       } elsif ($uri =~ m#^/[a-zA-Z0-9-]+/
+                          (\d+x\d+ ( \@\d+(\.\d+)? )? / | original/ )?
+                           ((?:no)?box/)?
+                           [a-zA-Z0-9._()-]+$#x) {
                return Sesse::pr0n::Image::handler($r);
        }
 
-       $r->status(404);
-       Sesse::pr0n::Common::header($r, "404 File Not Found");
-       $r->print("     <p>The file you requested was not found.</p>");
-       Sesse::pr0n::Common::footer($r);
-       return Apache2::Const::OK;
+       my $res = Plack::Response->new(404);
+       my $io = IO::String->new;
+       Sesse::pr0n::Common::header($r, $io, "404 File Not Found");
+       $io->print("     <p>The file you requested was not found.</p>");
+       Sesse::pr0n::Common::footer($r, $io);
+       $io->setpos(0);
+       $res->body($io);
+       return $res;
 }
 
 1;