X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FPlack%2FApp%2FGruntmaster.pm;h=3cb38097fb8052b76602c7bca35e62a4b58dbbf1;hb=1bb102efb1444ab35e5cd8d2493d5e15ab00bc3f;hp=f647783e61ac9d1b7ad4c8c7eafb98af6df3ff07;hpb=a5e355d61767a14f7a5cccc989f3abd72ee2ad79;p=gruntmaster-page.git diff --git a/lib/Plack/App/Gruntmaster.pm b/lib/Plack/App/Gruntmaster.pm index f647783..3cb3809 100644 --- a/lib/Plack/App/Gruntmaster.pm +++ b/lib/Plack/App/Gruntmaster.pm @@ -52,6 +52,8 @@ use constant FORMAT_EXTENSION => { use constant NOT_FOUND => [404, ['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' } + my $env; sub db { $env->{'gruntmaster.dbic'} } @@ -76,6 +78,7 @@ sub response { $params = $title; $title = 'No title'; } + $params->{time} = time; bless {template => $template, title => $title, params => $params}, __PACKAGE__.'::Response' } @@ -93,14 +96,14 @@ sub dispatch_request{ my $css = read_file "css/themes/$theme.css"; $css .= read_file $_ for ; my @headers = ('X-Forever' => 1, 'Cache-Control' => 'public, max-age=604800', 'Content-Type' => 'text/css'); - [200, \@headers, [CSS::Minifier::XS::minify $css]] + [200, \@headers, [development ? $css : CSS::Minifier::XS::minify $css]] }, sub (/js.js) { my $js; $js .= read_file $_ for ; my @headers = ('X-Forever' => 1, 'Cache-Control' => 'public, max-age=604800', 'Content-Type' => 'application/javascript'); - [200, \@headers, [JavaScript::Minifier::XS::minify $js]] + [200, \@headers, [development ? $js : JavaScript::Minifier::XS::minify $js]] }, sub (/src/:job) { @@ -153,11 +156,17 @@ sub dispatch_request{ sub (/us/:user) { response us_entry => user->name, db->user_entry($_{user}) }, sub (/ct/:contest) { response ct_entry => contest->name, db->contest_entry($_{contest}) }, sub (/log/:job) { response log_entry => "Job $_{job}", db->job_entry($_{job}) }, - sub (/pb/:problem + ?:contest~) { + sub (/pb/:problem + ?contest~) { + my (undef, undef, $contest) = @_; + $_{contest} = $contest; return NOT_FOUND if !contest && !problem->is_in_archive || contest && !db->contest_problems->find($_{contest}, $_{problem}); forbid problem->is_private; response pb_entry => problem->name, db->problem_entry($_{problem}, $_{contest}, remote_user && remote_user->id); }, + sub (/sol/:problem) { + forbid !problem->is_in_archive; + response sol => 'Solution of ' . problem->name, {solution => db->problem($_{problem})->solution}; + }, sub (/) { redispatch_to '/index' }, sub (/:article) { [200, ['Content-Type' => 'text/html'], [render_article $_{article}, 'en']] }