Actually implement filtering.
[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 Sesse::pr0n::Registry;
10 use Sesse::pr0n::Wizard;
11
12 package Sesse::pr0n::pr0n;
13 use strict;     
14 use warnings;
15
16 sub handler {
17         my $r = shift;
18
19         my $uri = $r->uri;
20         if ($uri eq '/') {
21                 return Sesse::pr0n::Listing::handler($r);
22         } elsif ($uri eq '/robots.txt' ||
23                  $uri eq '/pr0n.css' ||
24                  $uri eq '/skoyen.css' ||
25                  $uri eq '/blah.png' ||
26                  $uri eq '/faq.html' ||
27                  $uri eq '/pr0n-fullscreen.css' ||
28                  $uri eq '/pr0n-fullscreen.js' ||
29                  $uri eq '/previous.png' ||
30                  $uri eq '/next.png' ||
31                  $uri eq '/close.png' ||
32                  $uri eq '/wizard.js' ||
33                  $uri eq '/wizard.css' ||
34                  $uri eq '/pr0n.ico' ||
35                  $uri =~ m#^/usage/([a-zA-Z0-9_.]+)$#) {
36                 $uri =~ s#^/##;
37                 my $fname = Sesse::pr0n::Common::get_base($r) . 'files/' . $uri;
38                 my (undef, undef, undef, undef, undef, undef, undef, $size, undef, $mtime) = stat($fname)
39                         or error($r, "stat of $fname: $!");
40
41                 $r->content_type(Sesse::pr0n::Common::get_mimetype_from_filename($uri));
42                 $r->set_content_length($size);  
43                 $r->set_last_modified($mtime);
44
45                 if((my $rc = $r->meets_conditions) != Apache2::Const::OK) {
46                         return $rc;
47                 }
48
49                 $r->sendfile(Sesse::pr0n::Common::get_base($r) . 'files/' . $uri);
50                 return Apache2::Const::OK;
51         } elsif ($uri eq '/newevent.html') {
52                 $r->content_type('text/html; charset=utf-8');
53                 $r->sendfile(Sesse::pr0n::Common::get_base($r) . "files/newevent.html");
54                 return Apache2::Const::OK;
55         } elsif ($uri =~ m#^/webdav#) {
56                 return Sesse::pr0n::WebDAV::handler($r);
57         } elsif ($uri =~ m#^/usage/([a-zA-Z0-9.-]+)$#) {
58                 $r->sendfile(Sesse::pr0n::Common::get_base($r) . "usage/$1");
59                 return Apache2::Const::OK;
60         } elsif ($uri =~ m#^/rotate$#) {
61                 return Sesse::pr0n::Rotate::handler($r);
62         } elsif ($uri =~ m#^/select$#) {
63                 return Sesse::pr0n::Select::handler($r);
64         } elsif ($uri =~ m#^/newevent$#) {
65                 return Sesse::pr0n::NewEvent::handler($r);
66         } elsif ($uri =~ m#^/registry$#) {
67                 return Sesse::pr0n::Registry::handler($r);
68         } elsif ($uri =~ m#^/wizard$#) {
69                 return Sesse::pr0n::Wizard::handler($r);
70         } elsif ($uri =~ m#^/[a-zA-Z0-9-]+/?$# ||
71                  $uri =~ m#^/\+all/?$#) {
72                 return Sesse::pr0n::Index::handler($r);
73         } elsif ($uri =~ m#^/[a-zA-Z0-9-]+/(\d+x\d+/|original/)?(nobox/)?[a-zA-Z0-9._-]+$#) {
74                 return Sesse::pr0n::Image::handler($r);
75         }
76
77         $r->status(404);
78         Sesse::pr0n::Common::header($r, "404 File Not Found");
79         $r->print("     <p>The file you requested was not found.</p>");
80         Sesse::pr0n::Common::footer($r);
81         return Apache2::Const::OK;
82 }
83
84 1;
85
86