X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FPlack%2FApp%2FGruntmaster.pm;h=f876bae0dba1534ae04fe33e242d923c50323dc7;hb=02d17b02b29aad989599329ff7a4ee6cae798c73;hp=c02e7dd3f023cbdbd84c402f36cc0d85cabbcd06;hpb=ba7920cd654e91f98dbe1a783f159974fba278d9;p=plack-app-gruntmaster.git diff --git a/lib/Plack/App/Gruntmaster.pm b/lib/Plack/App/Gruntmaster.pm index c02e7dd..f876bae 100644 --- a/lib/Plack/App/Gruntmaster.pm +++ b/lib/Plack/App/Gruntmaster.pm @@ -21,21 +21,6 @@ no warnings 'illegalproto'; use constant USER_REGEX => qr/^\w{2,20}$/a; -use constant CONTENT_TYPES => +{ - c => 'text/x-csrc', - 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', - pl => 'text/x-perl', - py => 'text/x-python', - rb => 'application/x-ruby', - l => 'text/plain', -}; - use constant FORMAT_EXTENSION => { C => 'c', CPP => 'cpp', @@ -99,13 +84,15 @@ sub dispatch_request{ sub (/src/:job) { return NOT_FOUND if !job; - my $isowner = remote_user && remote_user->id eq job->rawowner; - my $private = job->private || job->problem->private || job->contest && job->contest->is_running; + my $job = db->job_full($_{job}); + my $isowner = remote_user && remote_user->id eq $job->{owner}; + my $contest = $job->{contest} && db->contest_entry($job->{contest}); + my $private = $job->{private} || $contest && ($contest->{started} && !$contest->{finished}); forbid !$isowner && $private; my $privacy = $private ? 'private' : 'public'; - my @headers = ('X-Forever' => 1, 'Cache-Control' => "$privacy, max-age=604800", 'Content-Type' => CONTENT_TYPES->{job->extension}); + my @headers = ('X-Forever' => 1, 'Cache-Control' => "$privacy, max-age=604800", 'Content-Type' => 'text/plain'); push @headers, (Vary => 'Authorization') if $private; - [200, \@headers, [job->source]] + [200, \@headers, [$job->{source}]] }, sub (?:format~) { @@ -113,11 +100,10 @@ sub dispatch_request{ response_filter { my ($r) = @_; return $r if ref $r ne 'Plack::App::Gruntmaster::Response'; - my $vary = 'X-Static'; - $vary .= ', Authorization' if $privacy eq 'private'; - my @hdrs = ('X-Forever' => 1, 'Cache-Control' => "$privacy, max-age=$r->{maxage}", Vary => $vary); + 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; charset=utf-8', @hdrs], [encode_json $r->{params}]] if $format eq 'json'; - my $ret = render $r->{template}, 'en', title => $r->{title}, %{$r->{params}}, maybe static => $env->{HTTP_X_STATIC}; + my $ret = render $r->{template}, 'en', title => $r->{title}, %{$r->{params}}; [200, ['Content-Type' => 'text/html; charset=utf-8', @hdrs], [encode 'UTF-8', $ret]] }, }, @@ -182,7 +168,7 @@ sub dispatch_request{ 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, Vary => 'X-Static'], [render_article $_{article}, 'en', maybe static => $env->{HTTP_X_STATIC}]] } + sub (/:article) { [200, ['Content-Type' => 'text/html; charset=utf-8', 'Cache-Control' => 'public, max-age=3600', 'X-Forever' => 1], [render_article $_{article}, 'en']] } }, sub (POST) {