]> git.sesse.net Git - pr0n/blob - perl/Sesse/pr0n/pr0n.pm
Remove the unused icon.
[pr0n] / perl / Sesse / pr0n / pr0n.pm
1 use Sesse::pr0n::Common;
2 use Sesse::pr0n::Listing;
3 use Sesse::pr0n::Index;
4 use Sesse::pr0n::Image;
5 use Sesse::pr0n::Rotate;
6 use Sesse::pr0n::Select;
7 use Sesse::pr0n::WebDAV;
8 use Sesse::pr0n::NewEvent;
9 use IO::File::WithPath;
10
11 package Sesse::pr0n::pr0n;
12 use strict;     
13 use warnings;
14
15 sub handler {
16         my $r = shift;
17
18         my $uri = $r->path_info;
19         if ($uri eq '/') {
20                 return Sesse::pr0n::Listing::handler($r);
21         } elsif ($uri eq '/robots.txt' ||
22                  $uri eq '/pr0n.css' ||
23                  $uri eq '/skoyen.css' ||
24                  $uri eq '/faq.html' ||
25                  $uri eq '/pr0n-fullscreen.css' ||
26                  $uri eq '/pr0n-fullscreen-ie.css' ||
27                  $uri eq '/pr0n-fullscreen.js' ||
28                  $uri eq '/previous.png' ||
29                  $uri eq '/next.png' ||
30                  $uri eq '/close.png' ||
31                  $uri =~ m#^/usage/([a-zA-Z0-9_.]+)$#) {
32                 $uri =~ s#^/##;
33                 my $fname = $Sesse::pr0n::Config::image_base . 'files/' . $uri;
34                 my (undef, undef, undef, undef, undef, undef, undef, $size, undef, $mtime) = stat($fname)
35                         or error($r, "stat of $fname: $!");
36
37                 my $res = Plack::Response->new(200);
38                 $res->content_type(Sesse::pr0n::Common::get_mimetype_from_filename($uri));
39                 $res->content_length($size);    
40                 Sesse::pr0n::Common::set_last_modified($res, $mtime);
41
42                 #if((my $rc = $r->meets_conditions) != Apache2::Const::OK) {
43                 #       return $rc;
44                 #}
45
46                 $res->content(IO::File::WithPath->new($Sesse::pr0n::Config::image_base . 'files/' . $uri));
47                 return $res;
48         } elsif ($uri eq '/newevent.html') {
49                 my $res = Plack::Response->new(200);
50                 $res->content_type('text/html; charset=utf-8');
51                 $res->content(IO::File::WithPath->new($Sesse::pr0n::Config::image_base . 'files/newevent.html'));
52                 return $res;
53         } elsif ($uri =~ m#^/webdav#) {
54                 return Sesse::pr0n::WebDAV::handler($r);
55         } elsif ($uri =~ m#^/usage/([a-zA-Z0-9.-]+)$#) {
56                 my $res = Plack::Response->new(200);
57                 $res->content(IO::File::WithPath->new($Sesse::pr0n::Config::image_base . "usage/$1"));
58                 return $res;
59         } elsif ($uri =~ m#^/rotate$#) {
60                 return Sesse::pr0n::Rotate::handler($r);
61         } elsif ($uri =~ m#^/select$#) {
62                 return Sesse::pr0n::Select::handler($r);
63         } elsif ($uri =~ m#^/newevent$#) {
64                 return Sesse::pr0n::NewEvent::handler($r);
65         } elsif ($uri =~ /^\/[a-zA-Z0-9-]+\/?$/ ||
66                  $uri =~ /^\/\+all\/?$/) {
67                 return Sesse::pr0n::Index::handler($r);
68         } elsif ($uri =~ m#^/[a-zA-Z0-9-]+/
69                            (\d+x\d+ ( \@\d+(\.\d+)? )? / | original/ )?
70                            ((?:no)?box/)?
71                            [a-zA-Z0-9._()-]+$#x) {
72                 return Sesse::pr0n::Image::handler($r);
73         }
74
75         my $res = Plack::Response->new(404);
76         my $io = IO::String->new;
77         Sesse::pr0n::Common::header($r, $io, "404 File Not Found");
78         $io->print("     <p>The file you requested was not found.</p>");
79         Sesse::pr0n::Common::footer($r, $io);
80         $io->setpos(0);
81         $res->body($io);
82         return $res;
83 }
84
85 1;
86
87