@@ -13,8 +13,10 @@ use File::Path ();
1313use File::Spec ();
1414use Log::Log4perl ();
1515use Path::Tiny qw( path ) ;
16+ use Plack::App::File ();
1617use Plack::App::Directory ();
1718use Plack::App::URLMap ();
19+ use Plack::Util ();
1820
1921my $dev_mode ;
2022my $config ;
@@ -55,11 +57,40 @@ if ( -e "/.dockerenv" and MetaCPAN::Server->log->isa('Catalyst::Log') ) {
5557 STDOUT -> autoflush;
5658}
5759
60+ sub _add_headers {
61+ my ( $app , $add_headers ) = @_ ;
62+ sub {
63+ Plack::Util::response_cb(
64+ $app -> (@_ ),
65+ sub {
66+ my $res = shift ;
67+ my ( $status , $headers ) = @$res ;
68+ if ( $status >= 200 && $status < 300 ) {
69+ push @$headers , @$add_headers ;
70+ }
71+ return $res ;
72+ }
73+ );
74+ };
75+ }
76+
5877my $static
5978 = Plack::App::Directory-> new(
6079 { root => path( $root_dir , ' root' , ' static' ) } )-> to_app;
6180
6281my $urlmap = Plack::App::URLMap-> new;
82+ $urlmap -> map (
83+ ' /favicon.ico' => _add_headers(
84+ Plack::App::File-> new(
85+ file => path( $root_dir , ' root' , ' static' , ' favicon.ico' )
86+ )-> to_app,
87+ [
88+ ' Cache-Control' => ' public, max-age=' . ( 60 * 60 * 24 ),
89+ ' Surrogate-Control' => ' max-age=' . ( 60 * 60 * 24 * 365 ),
90+ ' Surrogate-Key' => ' static' ,
91+ ],
92+ )
93+ );
6394$urlmap -> map ( ' /static' => $static );
6495if ( $ENV {PLACK_ENV } && $ENV {PLACK_ENV } eq ' development' ) {
6596 $urlmap -> map ( ' /v1' => MetaCPAN::Server-> app );
0 commit comments