X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FPlack%2FApp%2FGruntmaster.pm;h=8aab08c2c7e261f50418d9f5454d44fb25baa1a6;hb=462db4aa165159efd9aa859ef8a36654c731e9c4;hp=da00862dfa48a6579aa092687c2785769f877757;hpb=0879466792e79a49331bf5f3328baae117aa3475;p=plack-app-gruntmaster.git diff --git a/lib/Plack/App/Gruntmaster.pm b/lib/Plack/App/Gruntmaster.pm index da00862..8aab08c 100644 --- a/lib/Plack/App/Gruntmaster.pm +++ b/lib/Plack/App/Gruntmaster.pm @@ -148,12 +148,24 @@ sub dispatch_request{ }, 10 }, + sub (/login) { + forbid !remote_user; + + [204, ['Set-Cookie' => "username=".remote_user->id], []] + }, + sub (/ct/:contest/log/st) { redirect "/st/$_{contest}" }, sub (/us/) { response us => 'Users', {us => db->user_list} }, sub (/ct/ + ?:owner~) { response ct => 'Contests', db->contest_list(%_) }, - sub (/log/ + ?:contest~&:owner~&:page~&:problem~) { response log => 'Job list', {%{db->job_list(%_)}, maybe contest => $_{contest}} }, - sub (/pb/ + ?:owner~&:contest~) { response pb => 'Problems', {%{db->problem_list(%_)}, maybe contest => $_{contest}} }, + sub (/log/ + ?:contest~&:owner~&:page~&:problem~&:private~) { + forbid $_{private}; + response log => 'Job list', {%{db->job_list(%_)}, maybe contest => $_{contest}} + }, + sub (/pb/ + ?:owner~&:contest~&:private~) { + forbid $_{private}; + response pb => 'Problems', {%{db->problem_list(%_)}, maybe contest => $_{contest}} + }, sub (/us/:user) { response us_entry => user->name, db->user_entry($_{user}) }, sub (/ct/:contest) { response ct_entry => contest->name, db->contest_entry($_{contest}) }, @@ -210,7 +222,7 @@ sub dispatch_request{ my $source = $prog ? read_file $prog->path : $_{source_code}; unlink $prog->path if $prog; - db->jobs->create({ + my $newjob = db->jobs->create({ maybe contest => $_{contest}, maybe private => problem->private, date => time, @@ -222,7 +234,7 @@ sub dispatch_request{ }); purge '/log/'; - redirect $_{contest} ? "/log/?contest=$_{contest}" : '/log/'; + [303, [Location => '/log/' . $newjob->id], []] } } }