@@ -13,8 +13,10 @@ use File::Path ();
13
13
use File::Spec ();
14
14
use Log::Log4perl ();
15
15
use Path::Tiny qw( path ) ;
16
+ use Plack::App::File ();
16
17
use Plack::App::Directory ();
17
18
use Plack::App::URLMap ();
19
+ use Plack::Util ();
18
20
19
21
my $dev_mode ;
20
22
my $config ;
@@ -55,11 +57,40 @@ if ( -e "/.dockerenv" and MetaCPAN::Server->log->isa('Catalyst::Log') ) {
55
57
STDOUT -> autoflush;
56
58
}
57
59
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
+
58
77
my $static
59
78
= Plack::App::Directory-> new(
60
79
{ root => path( $root_dir , ' root' , ' static' ) } )-> to_app;
61
80
62
81
my $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
+ );
63
94
$urlmap -> map ( ' /static' => $static );
64
95
if ( $ENV {PLACK_ENV } && $ENV {PLACK_ENV } eq ' development' ) {
65
96
$urlmap -> map ( ' /v1' => MetaCPAN::Server-> app );
0 commit comments