X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FPlack%2FApp%2FGruntmaster.pm;h=f876bae0dba1534ae04fe33e242d923c50323dc7;hb=02d17b02b29aad989599329ff7a4ee6cae798c73;hp=f401e3f5d403272e4ad971388ffea3755ae70428;hpb=54bc2c5c0fbc6bb19d46c9c638abf4ac727cebb1;p=plack-app-gruntmaster.git diff --git a/lib/Plack/App/Gruntmaster.pm b/lib/Plack/App/Gruntmaster.pm index f401e3f..f876bae 100644 --- a/lib/Plack/App/Gruntmaster.pm +++ b/lib/Plack/App/Gruntmaster.pm @@ -14,9 +14,6 @@ use Web::Simple; use Gruntmaster::Data; use Plack::App::Gruntmaster::HTML; -use Email::Sender::Simple qw/sendmail/; -use Email::Simple; - use warnings NONFATAL => 'all'; no warnings 'illegalproto'; @@ -24,25 +21,12 @@ 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', # ? - 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', GCCGO => 'go', GOLANG => 'go', + GOLFSCRIPT => 'gs', HASKELL => 'hs', MONO => 'cs', JAVA => 'java', @@ -100,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~) { @@ -149,7 +135,7 @@ sub dispatch_request{ 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}; @@ -173,7 +159,7 @@ sub dispatch_request{ 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;