2dadb8dea1e9f37e62753eeef383534d53678047
[bookreader.git] / plack / bookreader.psgi
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4
5 use Plack::Builder;
6 use Plack::Middleware::Debug;
7 use Plack::App::Directory;
8 use lib './lib';
9 use Plack::App::BookReader;
10
11 builder {
12
13         # use proxy headers for client IP address
14         enable sub {
15                 my ( $app, $env ) = @_;
16                 return sub {
17                         my $env = shift;
18                         my $client_ip = $env->{HTTP_X_REAL_IP} || $env->{HTTP_X_FORWARDED_FOR};
19                         if ( $client_ip ) {
20                                 my $proxy_ip = $env->{REMOTE_ADDR};
21                                 die "request not from authorized proxy $proxy_ip" if $proxy_ip !~ /\Q127.0.0.1\E$/;
22                                 warn "# rewrite $proxy_ip -> $client_ip\n";
23                                 $env->{REMOTE_ADDR} = $client_ip;
24                         }
25
26                         $app->( $env );
27                 }
28         };
29
30         enable "Plack::Middleware::ServerStatus::Lite",
31                 path => '/server-status',
32 #               allow => [ '127.0.0.1', '10.60.0.0/16', '193.198.0.0/16', '0.0.0.0/32' ], # FIXME doesn't work for IPv6
33                 counter_file => '/tmp/counter_file',
34                 scoreboard => '/tmp/server-status';
35
36         enable 'Debug', panels => [
37                 qw(Environment Response Timer Memory),
38         ];
39
40 #       enable 'Plack::Middleware::Static',
41 #               path => qr{^/BookReader}, root => '../BookReader';
42
43         enable 'StackTrace';
44
45         enable "ConditionalGET";
46         enable "Plack::Middleware::ETag", file_etag => [ "inode", "size", "mtime" ];
47
48         mount '/BookReader' =>
49                 Plack::App::Directory->new({ root => "../BookReader" })->to_app;
50
51         mount '/cache/' =>
52                 Plack::App::BookReader->new({ root => "cache" })->to_app;
53
54         # resouces
55
56         mount '/dk.nsk.hr' =>
57                 Plack::App::BookReader->new({ root => "/srv/dk.nsk.hr" })->to_app;
58
59         mount '/share' =>
60                 Plack::App::BookReader->new({ root => "/mnt/share" })->to_app;
61
62         mount '/NSK' =>
63                 Plack::App::Directory->new({ root => "NSK" })->to_app;
64
65 }