]> iEval git - plack-app-gruntmaster.git/blobdiff - lib/Plack/App/Gruntmaster.pm
Declare charset in content-type header
[plack-app-gruntmaster.git] / lib / Plack / App / Gruntmaster.pm
index 2edc6dc2999daa3cbb9006cb3954e25b48fe4ada..3ec528429124eb4e1c0b85bd1174b29252c91554 100644 (file)
@@ -53,7 +53,7 @@ use constant FORMAT_EXTENSION => {
        SBCL => 'l',
 };
 
-use constant NOT_FOUND => [404, ['Content-Type' => 'text/plain'], ['Not found']];
+use constant NOT_FOUND => [404, ['X-Forever' => 1, 'Content-Type' => 'text/plain'], ['Not found']];
 use constant FORBIDDEN => [401, ['Content-Type' => 'text/plain', 'WWW-Authenticate' => 'Basic realm="Gruntmaster 6000"'], ['Forbidden']];
 
 sub development() { ($ENV{PLACK_ENV} // 'development') eq 'development' }
@@ -75,7 +75,7 @@ sub job     { db->job     ($_{job})     }
 sub user    { db->user    ($_{user})    }
 
 sub redirect { [301, ['X-Forever' => 1, 'Location' => $_[0]], []] }
-sub reply    { [200, ['Content-Type' => 'text/plain'], \@_] }
+sub reply    { [200, ['Content-Type' => 'text/plain; charset=utf-8'], \@_] }
 sub response {
        my ($template, $title, $params, $maxage) = @_;
        unless ($params) {
@@ -104,17 +104,20 @@ sub dispatch_request{
                        return NOT_FOUND unless -e "css/themes/$theme.css";
                        my $css = read_file "css/themes/$theme.css";
                        $css .= read_file $_ for <css/*.css>;
-                       my @headers = ('X-Forever' => 1, 'Cache-Control' => 'public, max-age=604800', 'Content-Type' => 'text/css');
+                       my @headers = ('X-Forever' => 1, 'Cache-Control' => 'public, max-age=604800', 'Content-Type' => 'text/css; charset=utf-8');
                        [200, \@headers, [development ? $css : CSS::Minifier::XS::minify $css]]
                },
 
                sub (/js.js) {
                        my $js;
                        $js .= read_file $_ for <js/*.js>;
-                       my @headers = ('X-Forever' => 1, 'Cache-Control' => 'public, max-age=604800', 'Content-Type' => 'application/javascript');
+                       my @headers = ('X-Forever' => 1, 'Cache-Control' => 'public, max-age=604800', 'Content-Type' => 'application/javascript; charset=utf-8');
                        [200, \@headers, [development ? $js : JavaScript::Minifier::XS::minify $js]]
                },
 
+               sub (/robots.txt) { NOT_FOUND },
+               sub (/favicon.ico) { NOT_FOUND },
+
                sub (/src/:job) {
                        return NOT_FOUND if !job;
                        my $isowner = remote_user && remote_user->id eq job->rawowner;
@@ -145,9 +148,9 @@ sub dispatch_request{
                                return $r if ref $r ne 'Plack::App::Gruntmaster::Response';
                                my @hdrs = ('X-Forever' => 1, 'Cache-Control' => "$privacy, max-age=$r->{maxage}");
                                push @hdrs, Vary => 'Authorization' if $privacy eq 'private';
-                               return [200, ['Content-Type' => 'application/json', @hdrs], [encode_json $r->{params}]] if $format eq 'json';
+                               return [200, ['Content-Type' => 'application/json; charset=utf-8', @hdrs], [encode_json $r->{params}]] if $format eq 'json';
                                my $ret = render $r->{template}, 'en', title => $r->{title}, %{$r->{params}};
-                               [200, ['Content-Type' => 'text/html', @hdrs], [encode 'UTF-8', $ret]]
+                               [200, ['Content-Type' => 'text/html; charset=utf-8', @hdrs], [encode 'UTF-8', $ret]]
                        },
                },
 
@@ -210,7 +213,7 @@ sub dispatch_request{
 
                sub (/) { redispatch_to '/index' },
                sub (/favicon.ico) { redirect '/static/favicon.ico' },
-               sub (/:article) { [200, ['Content-Type' => 'text/html', 'Cache-Control' => 'public, max-age=60', 'X-Forever' => 1], [render_article $_{article}, 'en']] }
+               sub (/:article) { [200, ['Content-Type' => 'text/html; charset=utf-8', 'Cache-Control' => 'public, max-age=60', 'X-Forever' => 1], [render_article $_{article}, 'en']] }
        },
 
        sub (POST) {
This page took 0.026892 seconds and 4 git commands to generate.