Use job_full & contest_entry in /src/:job
[plack-app-gruntmaster.git] / lib / Plack / App / Gruntmaster.pm
index 2ccbeb50d8e216211e656d9b0046a0e469ee5d84..f876bae0dba1534ae04fe33e242d923c50323dc7 100644 (file)
@@ -84,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' => 'text/plain');
                        push @headers, (Vary => 'Authorization') if $private;
-                       [200, \@headers, [job->source]]
+                       [200, \@headers, [$job->{source}]]
                },
 
                sub (?:format~) {
@@ -98,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]]
                        },
                },
@@ -167,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) {
This page took 0.011136 seconds and 4 git commands to generate.