use Gruntmaster::Data;
use Plack::App::Gruntmaster::HTML;
-use Email::Sender::Simple qw/sendmail/;
-use Email::Simple;
-
use warnings NONFATAL => 'all';
no warnings 'illegalproto';
cpp => 'text/x-c++src',
cs => 'text/x-csharp', # Used by GNOME. Not in mime.types.
go => 'text/plain', # ?
+ gs => 'text/plain',
hs => 'text/x-haskell',
java => 'text/x-java',
pas => 'text/x-pascal',
CPP => 'cpp',
GCCGO => 'go',
GOLANG => 'go',
+ GOLFSCRIPT => 'gs',
HASKELL => 'hs',
MONO => 'cs',
JAVA => 'java',
response_filter {
my ($r) = @_;
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';
+ my $vary = 'X-Static';
+ $vary .= ', Authorization' if $privacy eq 'private';
+ my @hdrs = ('X-Forever' => 1, 'Cache-Control' => "$privacy, max-age=$r->{maxage}", Vary => $vary);
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}};
+ my $ret = render $r->{template}, 'en', title => $r->{title}, %{$r->{params}}, maybe static => $env->{HTTP_X_STATIC};
[200, ['Content-Type' => 'text/html; charset=utf-8', @hdrs], [encode 'UTF-8', $ret]]
},
},
sub (/ct/ + ?:owner~) { response ct => 'Contests', db->contest_list(%_), 300 },
sub (/log/ + ?:contest~&:owner~&:page~&:problem~&:private~&:result~) {
forbid $_{private};
- response log => 'Job list', {%{db->job_list(%_)}, maybe contest => $_{contest},}, 5
+ response log => 'Job list', db->job_list(%_), 5
},
sub (/pb/ + ?:owner~&:contest~&:private~) {
forbid $_{private};
forbid !remote_user;
$privacy = 'private';
}
- response pb_entry => problem->name, {%{db->problem_entry($_{problem}, $_{contest}, remote_user && remote_user->id)}, maybe contest => $_{contest}}, $_{contest} ? 10 : ();
+ response pb_entry => problem->name, db->problem_entry($_{problem}, $_{contest}, remote_user && remote_user->id), $_{contest} ? 10 : ();
},
sub (/sol/:problem) {
forbid problem->private;
sub (/) { redispatch_to '/index' },
sub (/favicon.ico) { redirect '/static/favicon.ico' },
- sub (/:article) { [200, ['Content-Type' => 'text/html; charset=utf-8', 'Cache-Control' => 'public, max-age=3600', 'X-Forever' => 1], [render_article $_{article}, 'en']] }
+ sub (/:article) { [200, ['Content-Type' => 'text/html; charset=utf-8', 'Cache-Control' => 'public, max-age=3600', 'X-Forever' => 1, Vary => 'X-Static'], [render_article $_{article}, 'en', maybe static => $env->{HTTP_X_STATIC}]] }
},
sub (POST) {